437. API의 고민, 하위 호환성
“객체지향 모델은 신중히 설계해서 클래스 라이브러리가
변한다고 이미 컴파일된 애플리케이션이 망가지지 않도록
해야 한다. 정말로, 애플리케이션은 망가뜨리지 말아라.”
---Ira Forman, Michael Conner, Scott Danforth, and Larry Raper, Release-
to-Release Binary Compatibility in SOM, in Proceedings of OOPSLA '95.
An object-oriented model must be carefully
designed so that class-library transformations
that should not break already compiled applications,
indeed, do not break such applications.”
438. API의 고민, 하위 호환성
Adding new fields,
methods, or
constructors to an
existing class or
interface.
기존 클래스나 인터페이스
에 새 필드, 메서드, 생성자
추가
439. 깨어진 하위 호환성
자바 인터페이스의 호환성 문제
자바 인터페이스의 모든 메서드는 공개(public) 추상
(abstract)
이스를 구현한 모든 클래스는 추가된 메서드를 구현해서 새로 컴
파일 해야 한다.
440. 자바 인터페이스 개선 전략
1) 호환성 무시! 내가 고치겠다는데 뭐… (쓰는 사람도 없고)
2) 새 술은 새 부대에, 새 메서드는 새 인터페이스에…
기존 인터페이스를 확장한 새 인터페이스 생성, 버전 인터페이스
3) 기본 추상 클래스 제공
고객이 인터페이스를 구현하는 대신 기본 제공되는 추상 객체를 확장하도록 권장
4) 그리고 전통적인 자바 API의 방법…
고치지 않는다…
441. 하위 호환성을 버려야 할 위기
람다의 도입은 단순한 표현 방법 추가 이상의 의미
“OOP 방식 외 새로운 추상화 기법 도입”
자바 SDK의 기본 API의 대대적인 변형 필수
하지만 자바가 하위 호환성을 버릴 수는…
661. 기본 메서드와 트레잇(Trait)
OOP에서 다른 클래스의 기능을 확장하는데 사용되는 메서드
의 집합
보통 인터페이스와 믹스인 중간에 해당한다. 인터페이스는
메서드 선언만 있고, 트레잇은 정의까지 포함한다. 믹스인은
상태를 가지지만 트레잇은 보통 상태를 가지지 않는다.
662. 기본 메서드와 트레잇(Trait)
OOP
의 집합
보통 인터페이스와 믹스인 중간에 해당한다. 인터페이스는
메서드 선언만 있고, 트레잇은 정의까지 포함한다. 믹스인은
상태를 가지지만 트레잇은 보통 상태를 가지지 않는다.
663. 인터페이스 정적 메서드
기본 구현과 함께 인터페이스에도 정적 메서드 정의 가능
편의 메서드(utility method)를 위한 이름 공간(Name
space)로서의 인터페이스
interface
698. 범용 함수형 인터페이스
java.util.function 패키지에 범용으로 사용될
다양한 함수형 인터페이스 기본 제공
ConsumerT
BiConsumerT,U
FunctionT,R
BiFunctionT,U,R
PredicateT
SupplierT
UnaryOperatorT
BinaryOperatorT
void accept(T t)
void accept(T t, U u)
R apply(T t)
R apply(T t, U u)
boolean test(T t)
T get()
T apply(T t)
T apply(T t1, T t2)
700. 기본 타입 변환 함수 인터페이스
Double
FunctionT,R: T 타입을 R타입으로 바꾸는 함수 인터페이스
Int
Long
Double
Int
Long
IntToDoubleFunction
LongToDoubleFunction
DoubleToIntFunction
LongToIntFunction
DoubleToLongFunction
IntToLongFunction