람다가 도입된 이유 ?

빅데이터를 프로그램적으로 다룰 수 있는 방법이 필요해졌다. 그 방법의 중심에는 멀티 코어를 활용한 분산 처리, 즉 병렬화 기술이 필요하다.

이제 하나의 CPU 안에 다수의 코어를 삽입하는 멀티 코어 프로세서들이 등장하면서 일반 프로그래머에게도 병렬화 프로그래밍에 대한 필요성이 생기기 시작했다.

자바 8에서는 병렬화를 위해 **컬렉션(배열, List, Set, Map)**을 강화했고, 컬렉션을 더 효율적으로 사용하기 위해 스트림(Stream)을 강화했다.

스트림을 효율적으로 사용하기 위해 함수형 프로그래밍이, 함수형 프로그래밍을 위해 람다가, 람다를 위한 인터페이스를 함수형 인터페이스의 변화가 수반됐다.

즉, 자바8의 발전과 변화는 꼬리에 꼬리를 무는 것이다.

<aside> 📌 정리 빅데이터 지원 → 병렬화 강화 → 컬렉션 강화 → 스트림 강화 → 람다 도입 → 인터페이스 명세 변경 → 함수형 인터페이스 도입

</aside>


람다란 무엇인가 ?

코드 블록

기존의 코드 블록은 반드시 메서드 내에 존재해야만 했다. 그래서 코드 블록만 갖고 싶어도 기존에는 코드 블록을 위해 메서드를, 메서드를 사용하기 위해 익명 객체를 만들거나 하는 식이었다.

하지만 위대하게도 자바 8부터는 코드 블록을 만들기 위해 이런 수고를 할 필요가 없다.

코드 블록인 람다를 메서드의 인자나 반환값으로 사용할 수 있게 됐기 때문이다.

→ 이것의 의미는 코드 블록을 변수처럼 사용할 수 있다는 것이다.

// 기존 코드 블록
psvm{
	Test test = new Test();
	Run r = test;
	r.run();
}
class Test implements Run{
	public void run(){
		sout(" 1 ");
	}
}

// 코드를 개선해서 클래스 없이 익명 객체를 만들어 사용
psvm{
	Run r = new Run(){
		public void run(){
			sout(" 2 ");
		}
	};
	r.run();
}
// 위 코드는 별도의 클래스 정의 없이 코드 블록인 메서드를 사용하고자 할 때 
// 많이 사용되던 익명 객체를 사용하는 방법이다.
// 아래 코드 자바8의 더 나은 방법, 익명 객체조차 없이 바로 코드 블록만 사용
psvm{
	Run r = () -> {
	sout("3");
	};
	r.run();
}