티스토리 뷰

반응형

chapter 14. 람다식

최근, 함수적 프로그래밍이 다시 부각중 => 병렬 처리, 이벤트 지향 프로그래밍에 적합함

람다식은 익명 함수(anonymous function)를 생성하기 위한 식으로, 객체 지향 언어보다는 함수 지향 언어에 가까움

자바 코드가 간결해지고, 컬렉션 요소를 필터링하거나 매핑해서 원하는 결과를 쉽게 집계할 수 있음

람다식 -> 매개 변수를 가진 코드 블록 -> 익명 구현 객체

 

14.2 람다식 기본 문법

(타입 매개변수, ...) -> {실행문; ...}

(타입 매개변수) 는 오른쪽 중괄호 {} 블록을 실행하기 위해 필요한 값을 제공하는 역할

매개 변수의 이름은 자유롭게 쓸 수 있음

-> 기호는 매개 변수를 이용해 중괄호 {} 를 실행한다는 뜻

매개 변수 타입은 런타임 시에 대입되는 값에 따라 자동으로 인식될 수 있기 때문에 람다식에서는 매개 변수의 타입을 언급하지 않음

따라서

(int a) -> {System.out.println(a); } 가 아니라
a -> {System.out.println(a); }와 같이 사용함

- 하나의 매개 변수가 있다면 괄호 ()를 생략할 수 있고 , 중괄호 {}도 생략 가능

- 그러나 매개변수가 없다면 람다식에서 매개 변수 자리가 없어지므로 빈 괄호()를 반드시 사용해야 함

- 중괄호{}에 return문만 있을 경우, 람다식에서는 return문을 사용하지 않고 작성함

(x, y) -> {return x+y; }가 아니라
(x, y) -> x+y 와 같이 사용함

 

14.3 타겟 타입과 함수적 인터페이스

람다식은 단순히 메소드를 선언하는 것이 아닌 메소드를 가진 객체를 생성해냄

람다식은 인터페이스 변수에 대입 => 람다식은 인터페이스의 익명 구현 객체를 생성한다는 뜻

람다식은 익명 구현 클래스를 생성하고 객체화함

대입되는 인터페이스의 종류에 따라 작성 방법이 달라지기 때문에 람다식이 대입될 인터페이스를 람다식의 타겟 타입(target type)이라고 함

 

14.3.1 함수적 인터페이스(@FunctionalInterface)

하나의 추상 메소드가 선언된 인터페이스만이 람다식의 타겟 타입이 될 수 있음 => 함수적 인터페이스(functional interface)

@FunctionalInterface 어노테이션 : 두 개 이상의 추상 메소드가 선언되면 컴파일 오류를 발생시킴

 

 

반응형
댓글