자바가 제공하는 다중 구현 메카니즘
- 인터페이스(Interface) : 인터페이스가 선언한 메서드를 모두 정의하고 그 일반 규악을 잘 지킨 클래스라면 다른 어떤 클래스를 상속했든 같은 타입으로 취급된다.
- 추상 클래스(abstract class) : 추상 클래스가 정의한 타입을 구현하는 클래스는 반드시 추상 클래스의 하위 클래스가 되어야한다. 자바는 단일 상속만 지원한다.
인터페이스를 사용하면 얻을 수 있는 것
- 기존 클래스에도 손쉽게 새로운 인페이스를 구현해넣을 수 있다.
- 인터페이스는 믹스인 정의에 안성맞춤이다.
- 인터페이스로는 계층구조가 없는 타입 프로엠워크를 만들 수 있다.
- 래퍼 클래스 관용구(아이템18)와 함께 사용하면 인터페이스 기능을 향상시키는 강력한 수단이 된다.
인터페이스와 추상 클래스를 적절히 사용하여 구현하는 방법
- 골격 구현(skeletal implementation) 클래스 사용
- 복잡한 인터페이스라면 구현하는 수고를 덜어주는 골격 구현을 함께 제공하는 방법
- 가능한 한 인터페이스의 디폴트 메서드로 제공하여 그 인터페이스를 구현한 모든 곳에서 활용하도록 하는 것이 좋다.
- ex) Map.Entry를 사용한 Abstract class 방법
- 단순 구현 클래스 사용
- 골격 구현의 작은 변종으로 상속을 위해 인터페이스만으로 구현하는 방법
- ex) AbstractMap.SimpleEntry
'Java > EffectiveJava' 카테고리의 다른 글
Effective Java Item26. 로 타입은 사용하지 말라. (0) | 2025.01.24 |
---|---|
Effective Java Item24. 멤버 클래스는 되도록 static으로 만들라. (0) | 2025.01.23 |
Effective Java Item18. 상속보다는 컴포지션을 사용하라. (0) | 2025.01.15 |
Effective Java Item8. finalizer와 cleaner 사용을 피하라 (0) | 2025.01.12 |
Effective Java Item5. 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라 (0) | 2025.01.12 |