조슈아 블로크 님의 "Effective Java" 책을 정리한 포스팅 입니다.
1. 추상 클래스보다는 인터페이스를 우선하라
추상클래스
상속을 통한 재사용
- 기본적인 구현을 제공
- 일부 메서드를 abstract로 선언하여 하위 클래스가 이를 구현하도록 요구
- 추상클래스가 정의한 타입을 구현한는 클래스는 반드시 추상 클래스의 하위 클래스가 되어야 함
인터페이스
믹스인 정의
- 주된 기능에 선택적 기능을 혼합
- 기존 클래스에도 손쉽게 새로운 인터페이스를 구현해 추가 가능
계층구조가 없는 타입 프레임워크 생성 가능
- 인터페이스가 선언한 메서드를 정의하고 규약을 지킨다면 어떤 클래스를 확장했던 같은 타입
- 현실세계의 다양한 모델을 표현하는데 유용
2. 인터페이스는 구현하는 쪽을 생각해 설계하라
디폴트 메서드
- 인터페이스 메서드의 기본 구현을 제공하는 기능
- Java 8에서 도입됨
예외 발생 가능성
- 컴파일에 성공하더라도 기존 구현체에 런타임 오류를 일으킬 수 있음
Collection.removeIf()
- org.apache.commons.collections4.collection.SynchronizedCollection
- 동기화 컬렉션
- 클라이언트가 제공한 객체로 락을 거는 기능을 가짐
- removeIf는 동기화에 관해 아무것도 모름
- 재정의하지 않는다면 동기화가 되지 않음
- 서브 클래스에 removeIf()를 재정의하도록 하였음
3. 인터페이스는 타입을 정의하는 용도로만 사용하라
- 자신을 구현한 클래스의 인스턴스를 참조할 수 있는 타입 역할
'Java' 카테고리의 다른 글
[Effective Java] 5-1. 제네릭: 제한 사항 (0) | 2024.12.27 |
---|---|
[Effective Java] 4-4. 클래스와 인터페이스: 클래스 (0) | 2024.12.27 |
[Effective Java] 4-2. 클래스와 인터페이스: 상속보다는 컴포지션을 사용하라 (2) | 2024.12.27 |
[Effective Java] 4-1. 클래스와 인터페이스: 클래스와 멤버의 접근 권한을 최소화하라 (0) | 2024.12.27 |
[Effective Java] 3. 모든 객체의 공통 메서드 (0) | 2024.12.27 |