<Lambda> 9. JAVA8 in Action - Chapter 9
by BFine반응형
JAVA8 in Action - part3
Chapter 9 - 디폴트 메서드
9.1.0 변화하는 API
- 설계자 입장에서 인터페이스에 새로운 메서드를 추가 ,수정하고 싶을때 문제가 발생한다.
- 인터페이스를 바꾸면 상속받은 모든 클래스의 구현도 고쳐야한다.
- 인터페이스 내부에 정적메서드, 디폴트메서드 기능이 추가 되었다.
- 자바 8에서는 메서드 구현을 포함하는 인터페이스를 정의할 수 있다.
- 디폴트메서드를 이용하면 자바 API의 호환성을 유지하면서 라이브러리를 바꿀 수 있다.
- 정적메서드는 Collections와 Collection 처럼 인터페이스 따로 정적 클래스 따로 쓸 필요가 없다.
9.1.1 API 버전
공개된 API를 고치면 기존 버전과의 호환성 문제가 발생한다.
-
바이너리 호환성 : 뭔가를 바꾼 후에도 에러없이 기존 바이너리가 실행되어야함
인터페이스에 메서드 추가후 호출했는데 실행되지 않는 문제도 있음
-
소스호환성 : 코드를 코쳐도 기존 프로그램을 성공적으로 재컴파일 할 수 있어야함
추가한 메서드를 구현하도록 클래스를 수정해야함
동작호환성 : 코드를 바꿔도 같은 입력값이 주어지면 같은 동작이 실행되어야함
9.2.0 디폴트메서드란 무엇인가?
- 호환성을 유지하면서 API를 바꿀 수 있도록 새로운 기능이 디폴트메서드 이다.
- 인터페이스 자체에서 기본적으로 제공하기 때문에 디폴트라고 부른다.
- 추상클래스와 자바8 인터페이스의 차이
- 클래스는 하나의 추상클래스만 상속받을 수 있지만 인터페이스는 여러개 구현할 수 있다.
- 추상클래스는 인스턴스 변수로 공통 상태를 가질 수 있지만 인터페이스는 가질 수 없다.
9.3.1 선택형 메서드
- 인터페이스를 구현한 클래스를 보면 메서드 내용이 빈 것이 있다.
- 이러한 부분을 해결하기 위해 디폴트메서드를 사용하면 구현할 필요가 없다.
9.3.2 동작 다중 상속
- 중복되지 않는 최소한의 인터페이스를 유지해 재사용과 조합이 가능하다
- final로 선언된 클래스는 다른 클래스가 이클래스를 상속받지 못하게 함으로써 동작을 바꾸지 않는다.
9.4.1 알아야할 세가지 해석 규칙
- 같은 시그니처를 갖는 디폴트메서드를 상속받는 상황이 생길 수 있다.
- 1. 클래스나 슈퍼클래스에서 정의한 메서드가 최우선 순위
- 2. 1번 이외로는 인터페이스 끼리 상속은 상속받은 쪽이 우선이다.
- 3. 그외로는 상속받는 클래스에서 명시적으로 오버라이드하여 호출해야한다
9.4.3 충돌 그리고 명시적인 문제해결
- 자바 8에서는 X.super.m(…) 형태의 새로운 문법을 제공한다.(X는 슈퍼인터페이스)
- 위의 형태로 디폴트메서드를 구분할 수 있다.
출처
- Java8 in Action
반응형
'개발서적 > 자바8 인 액션' 카테고리의 다른 글
<Lambda> 8. JAVA8 in Action - Chapter 8 (0) | 2019.04.09 |
---|---|
<Lambda> 7. JAVA8 in Action - Chapter 7 (0) | 2019.04.03 |
<Lambda> 6. JAVA8 in Action - Chapter 6 (0) | 2019.04.02 |
<Lambda> 5. JAVA8 in Action - Chapter 5 (0) | 2019.04.01 |
<Lambda> 4. JAVA8 in Action - Chapter 4 (0) | 2019.04.01 |
블로그의 정보
57개월 BackEnd
BFine