-
[더 자바 8] 람다 표현식JAVA/JAVA8 관련 2022. 2. 6. 00:50
람다
- (인자 리스트) -> (반디)
//인자 // 바디(한줄일때는 바디 {} 생략 가능) Supplier<Integer> get10 = ()->10; System.out.println(get10.get()); Supplier<Integer> get11 = () ->{11}; System.out.println(get11.get());
인자 리스트
- 인자가 없을 때 : {}
- 인자가 한개일 때 : (one) 또는 one
- 인자가 여러개 일때 : (one, two)
- 인자의 타입은 생략 가능, 컴파일러가 추론하지만 명시할 수도 있다.
변수 캡처(Variable Capture)
- 로컬 변수 캡처
- final 이거나 effective final인 경우에만 참조할 수 있다.
- 그렇지 않을 경우 concurrency 문제가 생길 수 있어서 컴파일 방지가 된다.
위의 스크린샷 처럼 변수의 값이 변경되면 컴파일 에러가 난다. (final, effective final일 경우에만 참조 가능)
- Effectvie final : 초기화 이후 아무런 값의 변경이 없는 사실상의 final 변수
- Effective final은 JAVA8 이후 부터 생긴 개념임.
로컬 클래스와 익명 클래스는 내부 (스코프 안)안에 있는 지역 변수를 참조할 수 있지만,
람다를 사용하면 스코프가 부모 클래스와 동일하기 때문에 참조가 불가능하고 컴파일 에러가 발생한다.
'JAVA > JAVA8 관련' 카테고리의 다른 글
[더 자바8] Opitonal 소개 (0) 2022.04.05 [더 자바8] STREAM API (0) 2022.03.20 [더 자바8] 인터페이스 기본 메소드와 스태틱 메소드 (0) 2022.02.13 [더 자바 8] 메소드 레퍼런스 (0) 2022.02.13 [더 자바 8] 함수형 인터페이스와 람다 표현식 (0) 2022.02.04