개발 새발/JAVA
[Java] 자바 객체지향 - 추상클래스 VS 인터페이스
recordari
2025. 4. 10. 19:09
인터페이스 vs 추상 클래스
추상 클래스와 인터페이스는 둘 다 미완성 설계를 제공하고, 다형성과 유연한 구조 설계를 위한 핵심 개념이다.
하지만 둘 사이에는 분명한 차이가 있다.
→ 이 차이는 언제 추상 클래스를 쓰고, 언제 인터페이스를 써야 하는지 판단 기준이 된다.
주요 차이점 비교
구분 추상 클래스 인터페이스
구분 | 추상클래스 | 인터페이스 |
키워드 | abstract class | interface |
상속/구현 방법 | extends | implements |
다중 상속 | 불가능 | 가능 |
멤버 구성 | 추상 메서드, 일반 메서드, 변수 등 포함 | 추상 메서드, 상수만 포함 (Java 8 이후 일부 메서드 허용) |
접근 제어자 | 자유롭게 설정 가능 | 모든 메서드는 public abstract, 모든 변수는 public static final (생략 가능) |
공통 기능 구현 | 가능 (일반 메서드 포함) | 불가능 (Java 8 이후 default 메서드로 일부 구현 가능) |
사용 목적 | 클래스 간 상속 관계를 표현 | 기능적인 계약(규약, 역할) 정의 |
의미 | "A는 B이다" (IS-A 관계) | "A는 B의 기능을 가진다" (기능 명세) |
사용 판단 기준
- 공통적인 속성과 메서드까지 공유할 필요가 있다면 → 추상 클래스
(예: 모든 동물은 숨을 쉰다 → breathe() 공통 구현) - 서로 관련 없는 클래스들에게 특정 기능을 강제하고 싶다면 → 인터페이스
(예: 걷는 기능을 갖는 것 → Walkable 인터페이스로 표현)
예시로 보는 차이
추상 클래스 예시
(공통 동작 breathe()를 포함)
abstract class Animal {
abstract void sound();
void breathe() {
System.out.println("숨을 쉰다");
}
}
인터페이스 예시
(기능만 정의)
interface Flyable {
void fly();
}
class Bird implements Flyable {
public void fly() {
System.out.println("하늘을 난다");
}
}
결론
- 추상 클래스는 설계 틀과 공통 구현을 제공하는 역할
- 인터페이스는 특정 역할(기능)에 대한 약속을 정의
→ 추상 클래스는 상속 구조를 설계할 때 사용
→ 인터페이스는 구현의 일관성과 확장을 고려할 때 사용