티스토리 뷰
728x90
반응형
인터페이스는 구현하는 쪽을 생각해 설계하라
- Java 8버전 부터는 인터페이스에도 default 메서드를 추가할 수 있습니다. 해당 default 메서드를 사용하여 인터페이스 내에도 로직을 직접 추가할 수 있게 되었습니다.
- default 메서드를 선언하면, 구현한 모든 클래스에서 default 메서드가 쓰이게 됩니다.
💡예제 코드
- Phone 인터페이스와 이를 구현한 IPhone 클래스가 있습니다. 그런데 기존에는 해당 인터페이스에 call 메서드만 있었는데 기능 추가를 위해 videoCall 메서드가 추가되야하는 상황이 되었습니다. 그래서 이 메서드를 인터페이스에 추가하면 해당 인터페이스를 구현하는 모든 하위 클래스에서 메서드를 구현하지 않으면 컴파일 에러가 발생합니다. 그렇기 때문에 모든 하위 클래스에 공통적으로 들어가는 로직이 있다면 static 혹은 default 메서드를 추하하여 손쉽게 처리할 수 있습니다.
public interface Phone {
void call(String number);
default void videoCall(String number) {
System.out.println(number + "로 화상전화를 겁니다.");
}
}
public class IPhone implements Phone {
@Override
public void call(String number) {
System.out.println(number + "로 전화를 겁니다.");
}
}
default 메서드의 사용은 어렵다.
- 사용법만 놓고보면 default 키워드를 사용하여 모든 하위 클래스에서 사용이 가능합니다. 하지만 그렇게 쉬운 일만은 아닙니다.
디폴트 메서드는 구현 클래스에 대해서는 알지 못한채로 무작정 구현될 뿐만 아니라 이렇게 추가되는 default 메서드가 모든 상황에서 불변식을 해치지 않고 추가되는것은 어려운 일입니다. - 그렇기 때문에 default 메서드는 기존 인터페이스에 추가되는것은 피하고 새로운 인터페이스 생성시 선언하는것은 좋은거 같습니다.
💡정리
- default 메서드는 인터페이스의 메서드 제거 및 기존 메서드의 시그니처 수정용이 아닙니다.
- default 메서드는 구현 클래스에 공통으로 기능을 제공하는 만큼 문제가 발생한다면 역시 모든 구현 클래스에서 문제가 발생할 수 있습니다.
- 새로운 인터페이스에서 작성하는 default 메서드는 표준 메서드를 제공하는 유용한 수단이 됩니다.
728x90
반응형
'스터디 > 이펙티브 자바' 카테고리의 다른 글
이펙티브 자바 - Item23. 태그 달린 클래스보다는 클래스 계층구조를 활용하라. (0) | 2022.07.16 |
---|---|
이펙티브 자바 - Item22. 인터페이스는 타입을 정의하는 용도로만 사용하라. (0) | 2022.07.16 |
이펙티브 자바 - Item20. 추상 클래스보다는 인터페이스를 우선하라 (0) | 2022.07.15 |
이펙티브 자바 - Item19. 상속을 고려해 설계하고 문서화하라. 그렇지 않다면 상속을 금지하라. (0) | 2022.07.13 |
이펙티브 자바 - Item18. 상속보다는 컴포지션을 사용하라. (0) | 2022.07.13 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- pipe and filter architecture
- spring boot redis 대기열 구현
- spring boot excel download oom
- microkernel architecture
- pipeline architecture
- 공간 기반 아키텍처
- 자바 백엔드 개발자 추천 도서
- java ThreadLocal
- spring boot redisson sorted set
- spring boot poi excel download
- service based architecture
- JDK Dynamic Proxy와 CGLIB의 차이
- spring boot redisson destributed lock
- space based architecture
- redis sorted set
- transactional outbox pattern spring boot
- @ControllerAdvice
- spring boot 엑셀 다운로드
- spring boot excel download paging
- 레이어드 아키텍처란
- 람다 표현식
- redis 대기열 구현
- 트랜잭셔널 아웃박스 패턴 스프링 부트 예제
- redis sorted set으로 대기열 구현
- 트랜잭셔널 아웃박스 패턴 스프링부트
- spring boot redisson 분산락 구현
- 서비스 기반 아키텍처
- polling publisher spring boot
- java userThread와 DaemonThread
- transactional outbox pattern
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
글 보관함