ASAC 7기 동기들과 인터페이스와 추상클래스에 대해 대화를 나눈 후
둘의 차이점을 쉽게 이해하고 싶은 분들을 위해 글을 작성하게 되었습니다!
| 구분 | 인터페이스 (Interface) | 추상 클래스 (Abstract Class) |
|---|---|---|
| 주요 목적 | 특정 "기능" 구현 강제 | 클래스 간의 공통된 속성 및 동작을 정의하고 상속 제공 |
| 상속 관계 | 클래스와 느슨한 관계 (구조적 연관성 X) | 클래스 간 강한 상속 관계를 형성 |
| 다중 상속 | 여러 인터페이스를 구현 가능 | 단일 상속만 가능 |
| 메서드 구현 여부 | 모든 메서드는 기본적으로 추상 메서드 (abstract 생략 가능) | 추상 메서드와 일반 메서드 모두 포함 가능 |
| 필드 사용 | public static final(상수)만 선언 가능 | 인스턴스 변수, 상수 모두 사용 가능 |
| 접근 제어자 | 모든 필드와 메서드는 암묵적으로 public | private, protected, public 등 다양한 접근 제어자 가능 |
| 생성자 | 생성자 정의 불가능 | 생성자 정의 가능 |
| 추가 기능 | 클래스에 여러 기능을 조합할 때 유용 | 공통된 기본 구현을 제공하여 코드 재사용 가능 |
| 예제 | interface Flyable { void fly(); } | abstract class Animal { abstract void makeSound(); } |
책을 펼쳤는데..
- 책 내용에 대한 챕터 : 인터페이스
- 챕터를 관통하는 책의 공통된 주제 : 추상 클래스
자 너가 오늘 해야할 과제야! = 인터페이스
근데 이 조건을 공통적으로 적용시켜야해! = 추상 클래스