본문 바로가기

이펙티브 자바

[이펙티브 자바] 아이템 42. 익명 클래스보다는 람다를 사용하라

익명 클래스(Anonymous Class) : 이름이 없는 클래스로, 주로 인터페이스의 구현체를 생성할 때 사용된다. 익명 클래스는 일회성으로 사용되며, 클래스 정의와 동시에 인스턴스를 생성하여 사용할 수 있다.

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()));
  • 타입을 명시해야 코드가 더 명확할 때만 제외하고는, 람다의 모든 배개변수 타입은 생략하자.
  • 람다는 이름이 없고 문서화도 못 한다. 따라서 코드 자체로 동작이 명확히 설명되지 않거나 코드 줄 수가 많아지면 람다를 쓰지 말아야 한다.
  • 람다는 한 줄일 때 가장 좋고 길어야 세 줄 안에 끝내는게 좋다. 세 줄을 넘어가면 가독성이 나빠진다.

 

 

핵심 정리 : 익명 클래스는 ( 함수형 인터페이스가 아닌) 타입의 인스턴스를 만들 때만 사용하라. 람다는 작음 함수 객체를 아주 쉽게 표현할 수 있어 함수형 프로그래밍의 지평을 열었다.