inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

더 자바, Java 8

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

해결된 질문

299

현상혁

작성한 질문수 14

0

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

java

답변 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.

0

현상혁

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

0

현상혁

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

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

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

RunSomething runSomething = () -> System.out.println("익명 클래스");

CompletableFuture의 get 실행에 대해 궁금한 점이 있습니다

0

234

2

기본 인터페이스의 기본 제공 메서드 관련 질문 (왜 이걸 사용하는지)

0

521

2

static 과 metaspace 관련 질문있습니다.

0

710

0

Map의 가장 큰 특징이 key는 null이 아니다

0

2384

2

Optional 질문드립니다.

0

473

0

인텔리제이 콘솔창

0

582

0

Supplier를 쓰는 이유

0

1362

1

allOf()에서 컬렉션으로 반환하는 것을 설명할 때 코드

0

710

1

[참고] LTS주기

0

473

1

orElseThrow()

1

1089

2

findFirst함수

0

360

1

메서드 레퍼런스

1

478

1

primitive type 질문

0

304

1

FunctionalInterface 상속 관계 질문

0

293

1

함수형 인터페이스를 왜 사용하나요?

1

500

1

while문 세미콜론

0

437

1

flatMap Optional과 Stream에서의 차이점을 제가 잘 이해했는지 헷갈립니다!

0

411

1

람다식과 익명 클래스

0

323

1

steam api 예제 git 주소

3

786

1

thread.sleep질문

0

389

2

.orElse 매개변수 질문

0

265

1

isPresent( ) 와 null 질문

0

337

1

예제 코드 질문

2

291

1

코드 질문있습니다.

0

238

1