티스토리 뷰

람다 ( Lambda ) 란?

함수형 인터페이스의 구현체를 간단히 표현하는 방식이다.

 

함수형 인터페이스
자바 8부터 추가된 단 하나의 추상 메서드를 가진 인터페이스다. 다만, default 메서드와 private 메서드는 예외로 한다.

 

람다의 형식

(람다 파라미터) -> { 람다 바디 };

람다 파라미터 : 함수형 인터페이스의 매개변수 목록과 동일한 시그니처
람다 바디 : 추상 메서드와 같은 Return Type을 가진 함수 로직

 

람다의 형식 추론

람다는 사용되는 문맥 (Context)에 따라 람다의 형식 추론이 가능한데, 여기서 문맥은 함수형 인터페이스의 추상 메서드 시그니처를 얘기한다. 이러한 시그니처와 동일한 시그니처의 추상 메서드를 가진 인터페이스 타입을 추론하여 대체한다.

 

 

람다 캡쳐링

람다 표현식은 일반적인 함수와 다르게, 자유변수(람다 바디 밖 지역변수)를 람다 바디에서 사용할 수 있다. 이를 람다 캡쳐링이라고 한다.

이 람다 캡쳐링은 지역 변수의 현재 모습을 캡처하여 복사하여 람다 바디 내부에서 사용할 수 있도록 전달해 준다.

람다 캡쳐링의 제약
람다 캡쳐링에 사용할 수 있는 자유 변수에는 제약이 있다. 이는 final 혹은 실질적인 final만 사용할 수 있는 것이다.
이는 변경 되지 않는 지역 변수만을 람다 바디에서 사용 가능하게 하는 것인데, 이유는 지역 변수가 스택영역에 존재하여 람다를 사용하는 순간에 해당 지역변수 할당이 해제되었을 수 있어 이 지역변수를 람다에서 사용할 때는 값을 복사해서 사용하기 때문에 복사된 값을 변경하는 것은 외부에서 의미가 없음에도 착각을 불러일으킬 수 있기 때문이다.

'BackEnd > Java&Kotilin' 카테고리의 다른 글

[Kotilin] 변수와 함수 선언방법  (0) 2022.08.16
[Java] 자바의 에러와 예외  (0) 2022.08.15
[Java] 컴파일 방법과 Option  (0) 2022.08.02
DAO, VO, DTO의 정의  (0) 2022.07.31
IS-A 와 HAS-A  (0) 2022.07.30
댓글