지난 26일(2014/7/26), 지앤선과 KSUG가 함께 진행했던 세미나에서 발표한 람다 관련 내용입니다.
첫 시간에 정대원님이 발표하신 람다 기본에 다루지 않은 내용만 정리했는데 지난 번에 올렸던 자료(http://www.slideshare.net/gyumee/java-8-lambda-35352385)의 후편으로도 볼 수 있을 것 같습니다.
제 발표는 장표만으로 내용을 가늠하기 어려운데 그래도 이번에는 청각 장애인들도 참여한다고 해서 장표에 글자를 많이 넣으려고 했습니다.
432. 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.”
433. API의 고민, 하위 호환성
“Adding new fields,
methods, or constructors
to an existing class or
interface. “
기존 클래스나 인터페이스
에 새 필드, 메서드, 생성자
추가시 하위 호환성이 깨진
다.
434. 깨어진 하위 호환성
자바 인터페이스의 호환성 문제
자바 인터페이스의 모든 메서드는 공개(public) 추상
(abstract) 메서드이므로 새로운 메서드를 추가하면 이 인터페
이스를 구현한 모든 클래스는 추가된 메서드를 구현해서 새로 컴
파일 해야 한다.
435. 자바 인터페이스 개선 전략
1) 호환성 무시! 내가 고치겠다는데 뭐… (쓰는 사람도 없고)
2) 새 술은 새 부대에, 새 메서드는 새 인터페이스에…
기존 인터페이스를 확장한 새 인터페이스 생성, 버전 인터페이스
3) 기본 추상 클래스 제공
고객이 인터페이스를 구현하는 대신 기본 제공되는 추상 객체를 확장하도록 권장
4) 그리고 전통적인 자바 API의 방법…
고치지 않는다…
436. 하위 호환성을 버려야 할 위기
람다의 도입은 단순한 표현 방법 추가 이상의 의미
“OOP 방식 외 새로운 추상화 기법 도입”
자바 SDK의 기본 API의 대대적인 변형 필수
하지만 자바가 하위 호환성을 버릴 수는…
656. 기본 메서드와 트레잇(Trait)
OOP에서 다른 클래스의 기능을 확장하는데 사용되는 메서드
의 집합
보통 인터페이스와 믹스인 중간에 해당한다. 인터페이스는
메서드 선언만 있고, 트레잇은 정의까지 포함한다. 믹스인은
상태를 가지지만 트레잇은 보통 상태를 가지지 않는다.
657. 기본 메서드와 트레잇(Trait)
OOP에서 다른 클래스의 기능을 확장하는데 사용되는 메서드
의 집합
보통 인터페이스와 믹스인 중간에 해당한다. 인터페이스는
메서드 선언만 있고, 트레잇은 정의까지 포함한다. 믹스인은
상태를 가지지만 트레잇은 보통 상태를 가지지 않는다.
658. 인터페이스 정적 메서드
기본 구현과 함께 인터페이스에도 정적 메서드 정의 가능
편의 메서드(utility method)를 위한 이름 공간(Name
space)로서의 인터페이스
interface
693. 범용 함수형 인터페이스
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)
695. 기본 타입 변환 함수 인터페이스
Double
FunctionT,R: T 타입을 R타입으로 바꾸는 함수 인터페이스
Int
Long
Double
Int
Long
IntToDoubleFunction
LongToDoubleFunction
DoubleToIntFunction
LongToIntFunction
DoubleToLongFunction
IntToLongFunction