Effective Java 7강 ITEM42 익명 클래스보다는 람다를 사용하라

park geonwoo·2024년 10월 29일

Effective Java

목록 보기
43/56

Item 42 : 익명 클래스보다는 람다를 사용하라

Conclusion

익명 클래스는 구구절절히 작성되어 가독성이 좋지 못하므로 될수있으면 람다로 작성하라.

In case

일회성으로 사용될 객체를 만들기 위해서 익명 클래스를 만들어 제공하곤 한다.
이름에서부터 알수있듯 이름을 지정할정도로 중요한것이 아니고, 재사용성이 없고, class 문서 파일을 만들 필요가 없을때 사용된다.
하지만 코드에서 클래스 정의의 문법 그대로를 따라가야하므로 안그래도 자바 언어 특성상 타 언어에 비해 문자량이 많은데 가독성도 좋지 못하고, 작성하는 입장에서도 피곤하다.

대부분은 자바8에 추가된 람다로 교체 가능하기 때문에 람다로 작성하라.
한가지 주의해야할 점은, 람다는 타입추론에 의존하는 부분이 많기 때문에 raw타입으로 선언된 제네릭 클래스와 섞어 사용할때는 명시적인 타입캐스팅이 필요할수도 있다.

한번쯤 자바에서 스레드를 사용하려고 Runnable을 이용하려다 당황한적이 있었을것이다.

익명 클래스로 작성된 두개의 인스턴스 myFunction1, 2 는 같은일을 하는 객체이며, 2의 run은 빨간색 박스로 표시된 정의부와 매칭된다.

람다도 일종의 익명 클래스이며, Runnable 은 구현해야하는 한개의 메소드만 가지고 있기 때문에 위와 같은 예제가 가능하다.

<enum 레거시 코드>

또 하나, 중요한 주의점
람다식 자체도 직렬화 대상이 될수도 있다.
이 경우 같은 vm일때는 문제가 없지만, 직렬화 된 파일을 다른 vm에서 역 직렬화 했을시 다른 방식으로 구현되어 동작할수 있어 원하는 방식의 동작이 아닐수도 있기 때문에 주의해야한다.
또한 람다를 직렬화 대상으로 삼는것 자체가 보안위협이 될수 있으므로 되도록이면 하지말라.

in my opinion

주로 콜백을 이용해야 할때 사용하는 람다이지만, 함부로 남발하지 말고, 너무 긴 코드를 작성하지도 말라.

람다 역시 일종의 익명 클래스이므로 이 녀석이 뭘 하는 녀석인지 정보가 부족할수가 있다.
또한 final이기 때문에 상속구조를 가질수도 없고, 다형성을 이용할수도 없다.

참고
https://github.com/SeolYoungKim/effective_java_study

0개의 댓글