람다의 장점
람다식은 메서드가 하는 일을 보다 간결하고 읽기 쉽게 표현합니다.
익명 클래스로 작성된 코드입니다.
Collection.sort(words, new Comparator<String>() {
public int compare(String s1, String s2){
return Integer.compare(s1.length(), s2.length());
}
});
람다식으로 바꾸면
Collection.sort(words, (s1,s2) -> Integer.compare(s1.length(), s2.length()));
열거 타입에서의 람다
public enum Operation {
PLUS("+") {
public double apply(double x, double y) {
return x + y;
}
};
private final String symbol;
Operation(String symbol) {
this.symbol = symbol;
}
public abstract double apply(double x, double y);
}
람다식으로 바꾸면
public enum Operation {
PLUS("+", (x, y) -> x + y);
private final String symbol;
private final DoubleBinaryOperator op;
OperationLambda(String symbol, DoubleBinaryOperator op) {
this.symbol = symbol;
this.op = op;
}
public double apply(double x, double y){
return op.applyAsDouble(x,y);
}
}
람다를 쓸 수 없는 경우
- 추상클래스의 인스턴스를 만드는 경우
- 추상메서드가 여러개인 인터페이스의 인스턴스를 만드는 경우
- 함수 객체가 자신을 참조해야하는 경우(람다의 this는 바깥 인스턴스를 가리킵니다.)
람다를 쓰면 안되는 경우
- 직렬화를 해야하는 경우
반응형
'스터디 > 이펙티브 자바' 카테고리의 다른 글
[Effective Java] Item 44. 표준 함수형 인터페이스를 사용하라 (0) | 2022.07.03 |
---|---|
[Effective Java] Item43. 람다보다는 메서드 참조를 사용하라 (0) | 2022.07.03 |
[Effective Java] Item41. 정의하려는 것이 타입이면 마커 인터페이스를 활용하라 (0) | 2022.07.03 |
[Effective Java] Item40. @Override 애너테이션을 일관되게 사용하라 (0) | 2022.07.03 |
[Effective Java] Item39. 명명 패턴보단 어노테이션 (0) | 2022.06.26 |