이전 까지 동작 파라미터화를 이용해서 변화하는 client의 요구사항에 효과적으로 대응하는 코드를 구현 및 정의한 코드 블록을 다른 메서드로 전달할 수 있다는 것을 알게 되었다. anonymous class 로 다양한 동작을 구현할 수 있지만 코드가 아직까지 불편함을 느끼게 만들었다. 이를 개선한 자바8의 람다 표현 식을 3장에서 설명한다. 전반적인 내용을 다루는 해당 3장이 제일 중요하다. 따라서, 간추리지 않고 책의 내용을 거의 인용 했다고 봐도 무방하다.

람다의 표현식

익명 클래스처럼 이름이 없는 함수이면서 메서드를 인수로 전달할 수 있다. → 익명 클래스와 유사하다. 람다 표현식과 함께 위력을 발휘하는 새로운 기능인 메서드 참조를 확인해볼 것이다.

(Integer i) -> return "a" +i;
(String s) -> {"Iron Man";}

3.1 람다란 무엇인가?

람다표현식 : 메서드로 전달할 수 있는 익명 함수를 단순화한 것이다. 람다 표현식에는 이름은 없지만, 파라미터 리스트, 바디, 반환 형식, 발생할 수 있는 예외 리스트는 가질 수 있다.

람다의 특징

  1. 익명 보통의 메서드와 달리 이름이 없으므로 익명이라 표현한다.
  2. 함수 람다는 메서드처럼 특정 클래스에 종속되지 않으므로 함수라고 부른다. But 메서드처럼 파라미터 리스트, 바디, 반환 형식, 발생할 수 있는 예외 리스트를 포함한다.
  3. 전달 람다 표현식을 메서드 인수로 전달하거나 변수로 저장할 수 있다.
  4. 간결성 익명 클래스처럼 많은 필요없는 코드를 구현할 필요가 없다.

람다가 왜 필요할까 ?

→ 2장에서 확인한 것처럼 코드를 전달하는 과정에서 자질구레한 코드가 많이 생긴다. 이를 람다로 해결할수 있다. 즉, 람다를 이용해서 간결한 방식으로 코드를 전달할 수 있게된 것이다. 또한 동작 파라미터를 이용할 때 익명클래스 등 정해진 판에 박힌 코드를 구현할 필요가 없어졌다. 예시로 알아보자.

// 기존
Comparator<Apple> byWeight = new Comparator<Apple>(){
	public int compare(Apple a1, Apple a2){
		return a1.getWeight().compareTo(a2.getWeight());
	}
};

// 람다 이용
Comparator<Apple> byWeight =
	(Apple a1, Apple a2) -> a1.getWeight().compareTo(a2.getWeight());

이렇게 구현하면 compare 메서드의 바디를 직접 전달하는 것처럼 코드를 전달할 수 있다.

Untitled