티스토리 뷰
인터페이스에 새로운 메서드를 추가하는 방법
- 자바 8 이전
- 기존 구현체를 깨뜨리지 않고는 인터페이스에 메서드 추가할 방법이 없다.
- 자바 8 이후
- 디폴트 메서드가 추가되어 기존 인터페이스에 메서드 추가할 방법이 생겼다.
- 하지만 생각할 수 있는 모든 상황에서 불변식을 해치지 않는 디폴트 메서드를 작성하기란 어렵다.
디폴트 메서드의 문제점
- 디폴트 메서드는 (컴파일에 성공하더라도) 기존 구현체에 런타임 오류를 일으킬 수 있다.
- 디폴트 메서드는 인터페이스로부터 메서드를 제거하거나 기존 메서드의 시그니처를 수정하는 용도로 사용한다면 반드시 기존 클라이언트를 망가뜨리게 된다.
결론
- 기존 인터페이스에 디폴트 메서드로 새 메서드를 추가하는 일은 꼭 필요한 경우가 아니면 피해야 한다.
- 디폴트 메서드라는 도구가 생겼더라도 인터페이스를 설계할때는 여전히 세심한 주의를 기울여야 한다는 것이다.
- 새로운 인터페이스라면 릴리즈 전에 반드시 테스트를 거쳐야 하는데 서로 다른 방식으로 최소한 3가지는 구현해봐야 한다.
- 인터페이스를 릴리즈한 후라도 결함을 수정하는게 가능한 경우도 있겠지만, 절대 그 가능성에 기대지말고 릴리즈 전에 결함을 찾아내자.
'책 > 이펙티브자바' 카테고리의 다른 글
아이템23. 태그 달린 클래스보다는 클래스 계층구조를 활용하라 (0) | 2021.08.24 |
---|---|
아이템22. 인터페이스는 타입을 정의하는 용도로만 사용하라 (0) | 2021.08.24 |
아이템20. 추상 클래스보다는 인터페이스를 우선하라 (0) | 2021.08.18 |
아이템19. 상속을 고려해 설계하고 문서화하라. 그러지 않았다면 상속을 금지하라 (0) | 2021.08.17 |
아이템18. 상속보다는 컴포지션을 사용하라 (0) | 2021.08.15 |
링크
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- JPA 연관관계 매핑
- GCP
- ㅇㄷㅇㅈ
- 백기선 스터디
- 이펙티브자바
- 패스트캠퍼스 컴퓨터공학 완주반
- HTTP 완벽 가이드
- js promise
- HTTP 완벽가이드
- JS 딥다이브
- 프로그래머스
- 백준
- js api
- 드림코딩
- java
- 이펙티브자바 아이템60
- 김영한 JPA
- 킹수빈닷컴
- 이펙티브자바 스터디
- 프로그래머스 SQL
- http
- 김영한 http
- js array
- 모던자바스크립트
- 이펙티브자바 아이템59
- Spring Security
- REST API
- 가상 면접 사례로 배우는 대규모 시스템 설계 기초
- dreamcoding
- BOJ
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함