Item 20 : 추상클래스보다는 인터페이스를 우선하라
2021. 7. 19. 23:51
abstract와 interface중 어떤게 더 효율적일까?
둘의 가장 큰 차이는 추상 클래스가 정의한 타입을 구현하는 클래스는
반드시 추상 클래스의 하위 클래스가 되어야한다는 점이다.
반면 인터페이스가 선언한 메소드를 모두 정의하고 그 일반 규약을 잘 지킨 클래스라면
다른 어떤 클래스를 상속했든 같은 타입으로 취급한다.
둘의 사용 목적도 다르다.
추상클래스 -> 부모 클래스의 메소드(기본) + 자식클래스의 메소드 (확장, Is-a 관계)
interface -> 함수의 껍데기만 받아서 재정의(interface의 메소드를 무조건 재정의 해야함, Has-a 관계)
자바는 다중 상속을 지원하지 않기 때문에 absctract는 어느 정도 제약이 따른다
(extends뒤에 여러개 안된다는 의미)
반면 interface는 여러개의 인터페이스를 구현할 수 있는 장점이 있다.
책에서 말하듯이 인터페이스는 계층구조가 없는 타입 프레임워크 만들 수 있는게 큰 장점인것 같다.
여기까지가 내가 기본적으로 알고 있어야하는 추상클래스와 인터페이스의 차이이고
이후로 책에서는 골격 구현 클래스에서 추가적으로 설명하고 있는데 이부분은 지금은 스킵하고 추후에 실력이 상승한다면 포스팅 해보겠다.
'책 > 이펙티브자바' 카테고리의 다른 글
Item 22 : 인터페이스는 타입을 정의하는 용도로만 사용하라 (0) | 2021.07.21 |
---|---|
Item 21 : 인터페이스는 구현하는 쪽을 설계하라 (0) | 2021.07.20 |
Item 19 : 상속을 고려해 설계하고 문서화하라. 그러지 않았다면 상속을 금지하라 (0) | 2021.07.18 |
Item 18 : 상속보다는 컴포지션을 사용하라 (0) | 2021.07.18 |
Item 17 : 변경 가능성을 최소화 하라 (0) | 2021.07.16 |