귀찮지만 만들어보자

이펙티브 자바 - 람다와 스트림(1) 본문

이펙티브 자바

이펙티브 자바 - 람다와 스트림(1)

타우렌주술사 2018. 12. 29. 12:38

익명 클래스보다 람다를 사용하라


- 자바8에 와서 추상 메서드 하나짜리 인터페이스는 인스턴스를 람다식을 이용해서 짧게 만들수 있게 됐다.
이를 이용하면 기존보다 간결하고 읽기 좋은 코드를 만들 수 있다.

- 익명 클래스를 사용한 코드

Collections.sort(words, new Comparator<String>() {
    public int compare(String s1, String s2) {
        return Integer.compare(s1.length(), s2.length());
    }
});

- 람다식을 이용한 코드

Collections.sort(words, (s1, s2) -> Integer.compare(s1.length(), s2.length());

확실히 더 간결하고 읽기 좋은 코드를 만들 수 있다.

* 타입을 명시해야 코드가 더 명확할때만 제외하고는 람다의 모든 매개변수 타입은 생략하자
* 람다는 이름이 없고 문서화도 못한다. 코드로 일견에 동작이 보이지 않거나, 코드 라인이 길어지면 람다를 쓰지말아야한다
* 길어야 3줄 정도로 생각하자
* 람다 도입 이후 익명 클래스의 설 자리가 줄어들었지만 람다는 함수형 인터페이스에서만 사용이 가능하다
* 림다도 익명 클래스처럼 직렬화의 형태가 구현별로 다를 수 있기 때문에 람다를 직렬화하는 일은 극히 삼가야 한다