티스토리 뷰
반응형
클로저에 대한 내용을 람다식을 활용하여 설명한다.
자바에서 클로저는 람다식이나 내부 클래스 같은 영역 안에서 외부에서 정의된 변수를 사용하는 방식을 의미한다.
즉, 람다식을 만들 때 람다식 안에서 정의한 변수나 매개 변수로 받지 않는 변수가 사용될 경우 클로저가 사용됐다고 볼 수 있다.
예시
int a = 3;
(i) -> i + a; // 클로저
이렇게 클로저에서 사용된 변수를 자유 변수(free variables)라고 하며, 자유 변수는 코드 블록 안에서 정의되거나 매개 변수가 아닌데 사용되는 변수를 뜻한다.
예제
class CodeRunner {
public static void main(String args[]) {
int a = 3; // 자유 변수
InterfaceRamda interfaceRamda = i -> i + a; // 클로저
System.out.println(interfaceRamda.test(11));
}
}
@FunctionalInterface
interface InterfaceRamda {
int test(int n);
}
예제 코드의 결과는 14이다.
자유 변수의 경우 변경할 수 없어야 한다. 즉, final 키워드가 있는 변수같이 사용해야 하며 변수의 값을 변경하려고 하면 아래와 같은 에러가 발생한다.
"local variables referenced from a lambda expression must be final or effectively final"
class CodeRunner {
public static void main(String args[]) {
int a = 1;
InterfaceRamda interfaceRamda = (i -> {
a = 2; // 에러
return i + a;
});
System.out.println(interfaceRamda.test(11));
}
}
@FunctionalInterface
interface InterfaceRamda {
int test(int n);
}
반응형
'java&spring' 카테고리의 다른 글
[Java] Stream을 사용하는 방법 (0) | 2022.03.18 |
---|---|
[Java] toString 메서드 (0) | 2022.03.18 |
[Java] 문자열(String) 비교하기(==, equals) (0) | 2022.03.04 |
클래스 경로(Class Path)와 클래스 로더(Class Loader) (0) | 2017.08.11 |
[Java] 불변 객체(Immutable Object) (0) | 2017.07.14 |
댓글