반응형
클래스 멤버와 로컬 변수 사용
람다식 실행블록에는 클래스 멤버와 로컬 변수를 사용할 수 있다.
클래스의 멤버 사용
일반적으로 익명객체에 사용되는 this는 익명객체의 참조이지만, 람다식에서 this는 내부적으로 생성되는 익명 객체의 참조가 아니라 람다식을 실행한 객체의 참조이다.
this 사용 예제
public class UsingThis {
public int outterValue = 10;
class Inner{
int innerValue = 20;
void method(){
MyFunctionalInterface fi = () -> {
int innerValue = 40;
System.out.println("outterValue : " + outterValue);
System.out.println("outterValue : " + UsingThis.this.outterValue + "\n");
System.out.println("innerValue : " + innerValue);
System.out.println("innerValue : " + this.innerValue + "\n"); // 람다식 내부에서 this는 Inner 객체를 참조
};
fi.method();
}
}
}
public class UsingThisExample {
public static void main(String[] args) {
UsingThis usingThis = new UsingThis();
UsingThis.Inner inner = usingThis.new Inner();
inner.method();
}
}
outterValue : 10
outterValue : 10innerValue : 40
innerValue : 20
로컬 변수 사용
람다식에서 바깥 클래스의 필드나 메소드는 제한 없이 사용할 수 있으나, 메소드의 매개 변수 또는 로컬 변수를 사용하면 이 두 변수는 final 특성을 가져야 한다. 따라서 매개 변수 또는 로컬 변수를 람다식에서 읽는 것은 허용되지만, 람다식 내부 또는 외부에서 변경할 수 없다.
public class UsingLocalVariable {
void method(int arg){
int localVar = 40;
MyFunctionalInterface fi = () -> {
// 로컬 변수 읽기
System.out.println("arg : " + arg);
System.out.println("localVar : " + localVar + "\n");
// localVar = localVar + 1; // 불가
};
fi.method();
}
}
public class UsingLocalVariableExample {
public static void main(String[] args) {
UsingLocalVariable ulv = new UsingLocalVariable();
ulv.method(20);
}
}
반응형
'프로그래밍 노트 > JAVA' 카테고리의 다른 글
[JAVA] 익명객체_익명 구현 객체 생성 (0) | 2019.04.15 |
---|---|
[JAVA] 익명객체_익명 자식 객체 생성 (0) | 2019.04.15 |
[JAVA] 람다식 함수적 인터페이스 (0) | 2019.04.02 |
[JAVA] 람다식이란? (1) | 2019.03.28 |
[JAVA] 동기화된 컬렉션(thread-safe collection), 병렬처리 가능한 컬렉션 (0) | 2019.03.20 |