스터디/이펙티브 자바

[Effective Java] Item42. 익명 클래스보다는 람다를 사용하라

📝 작성 : 2022.07.03  ⏱ 수정 : 
728x90

람다의 장점

람다식은 메서드가 하는 일을 보다 간결하고 읽기 쉽게 표현합니다.

익명 클래스로 작성된 코드입니다.

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는 바깥 인스턴스를 가리킵니다.)

람다를 쓰면 안되는 경우

  • 직렬화를 해야하는 경우
반응형