[JAVA] interface vs abstract class

2025. 8. 2. 12:48·Java
728x90

📌 추상 클래스 (abstract class)

public abstract class Shape { 
   public abstract void draw(); 
}
  • 인스턴스 생성 불가, 반드시 자식 클래스에서 상속 받아야 함
  • 공통 로직은 직접 구현, 자식 클래스에서 달라지는 부분은 추상 메서드로 강제
  • 객체 생성 시, 부모 생성자 먼저 실행
  • 중복된 필드나 공통 메서드를 통합해 상속할 수 있음
  • 구현 강제성과 재사용성을 동시에 제공
abstract class Animal {
   public abstract void makeSound(); // 강제 구현 
   public void eat() {
      System.out.println("냠냠"); // 공통 구현
   }
} 

class Dog extends Animal {
   @Override 
   public void makeSound() {
      System.out.println("멍멍");
   }
}

📌 인터페이스 (interface)

interface Animal { 
   int A = 10; // public static final 
   void eat(); // public abstract
}
  • 모든 멤버 변수는 상수(public static final)
  • 모든 메서드는 기본적으로 public abstract
  • 다중 구현(implements) 가능
  • 객체 생성 불가, 역할 정의에 집중 (기능 중심 설계)
  • 결합도를 낮추고 유연한 설계에 적합 (OOP 원칙)
  • Java 8 이후부터는 default/static 메서드 구현 가능
interface Pet {
   void play(); 
   default void introduce() {
      System.out.println("ㅎㅇ"); 
   } 
} 

class Cat implements Animal, Pet {
   public void eat() {
      System.out.println("냠냠"); 
   }
}

📌 추상 클래스 vs 인터페이스 비교

 

항목 추상 클래스  인터페이스
상속 단일 상속 다중 구현 가능
변수 선언 인스턴스 변수 O 상수만 가능 (final)
메서드 구현 구현/추상 모두 가능 Java 8부터 일부 구현 가능 (default/static)
생성자 생성자 O (super 접근 가능) 생성자 X
설계 목적 공통 로직 포함 + 일부 구현 강제 기능 정의, 유연한 구조 설계
사용 예 기본 동작 공유가 필요한 경우 다양한 구현체가 필요한 경우
 

 


📌 Tip

  • **상속 관계(“is-a”)**가 명확하고 일부 구현이 필요한 경우 → 추상 클래스
  • 여러 객체가 기능만 공유하고 구현은 달라야 할 경우 → 인터페이스
  • Java 8+ 이후부터는 인터페이스로도 구현 로직이 가능해져 경계가 다소 유연
728x90
저작자표시 (새창열림)

'Java' 카테고리의 다른 글

[JAVA] String vs StringBuffer & equals() vs hashCode()  (1) 2025.08.02
[JAVA] 변수와 제어자  (3) 2025.08.02
[JAVA] Generics Type  (0) 2025.08.01
Java  (0) 2021.11.15
'Java' 카테고리의 다른 글
  • [JAVA] String vs StringBuffer & equals() vs hashCode()
  • [JAVA] 변수와 제어자
  • [JAVA] Generics Type
  • Java
gudwnsgur
gudwnsgur
IT
    250x250
  • gudwnsgur
    gudwnsgur
    gudwnsgur
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 개발이야기
      • Spring
        • 이슈 해결
      • JPA
        • spring data jpa
      • Java
        • Java의 정석
      • Kotlin
        • Kotlin In Action
        • Kotlin 정리
      • 대규모 시스템 설계 기초
      • 주니어 백엔드 개발자가 반드시 알아야 할 실무 지..
      • JavaScript
        • JS ES6+
      • 면접
        • CS
        • BE
      • SQLD
      • BE 개발
        • spring webflux
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    대규모 시스템 설계 기초
    HTTP
    cookie
    session
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
gudwnsgur
[JAVA] interface vs abstract class
상단으로

티스토리툴바