인프런 커뮤니티 질문&답변

현상혁님의 프로필 이미지
현상혁

작성한 질문수

더 자바, Java 8

람다식과 함수형 프로그래밍

해결된 질문

작성

·

255

0

안녕하세요!
 
학습 중 궁금한 내용이 있어 질문드립니다.
 
람다식을 사용 시 final 변수가 아니면 참조 시 오류가 발생한다고 하셨는데 그렇다면 람다식을 사용해 익명 클래스를 생성하는 것이 해당 함수가 부수 효과가 없는 함수라는 것을 보장해주는지 궁금합니다.
 
아니라면, 개발자가 직접 부수효과가 발생하지 않도록 신경써서 람다식을 작성해야 하는 것인가요?
 
감사합니다.

답변 1

1

백기선님의 프로필 이미지
백기선
지식공유자

좋은 질문이네요. 람다식을 사용하면 final 변수 또는 "사실상"(effective) final 변수만 람다식 내부에서 참조할 수 있습니다.

람다식을 사용해서 "익명 클래스"를 생성하는 것은 아니구요. 해당 하는 타입의 객체를 만들 수는 있죠. 어디까지나 익명 클래스와 람다식은 다르니까요. 

그리고 자바 특정 함수(Consumer)는 부수 효과가 있습니다. 자바에서는 함수라고해서 모두 부수 효과가 없는 것은 아닙니다.

https://docs.oracle.com/javase/8/docs/api/java/util/function/Consumer.html

Represents an operation that accepts a single input argument and returns no result. Unlike most other functional interfaces, Consumer is expected to operate via side-effects.

현상혁님의 프로필 이미지
현상혁
질문자

자료 확인해보겠습니다. 답변 감사합니다!

현상혁님의 프로필 이미지
현상혁
질문자

앗 추가로 한 가지만 더 질문드리겠습니다.

그럼 아래와 같은 코드의 경우 익명 클래스를 생성하는 것이 아닌건가요?

(아래의 코드가 람다식을 통해 '해당 타입의 객체'를 생성하는 것임은 이해했습니다!)

RunSomething runSomething = () -> System.out.println("익명 클래스");
현상혁님의 프로필 이미지
현상혁

작성한 질문수

질문하기