Java 8 Lambda Function 용어 정리

* Lambda Function

= anonymous function

* Free Variable (<-> Local Variable)

해당 함수 외부의 참조 변수를 free variable이라 부른다.
free variable 종류
  1. static 변수
  2. member 변수
  3. local 변수(람다가 속해 있는 함수의 local 변수를 말함)
비고) 3번의 local 변수는 final의 특성(읽기만 가능)을 가져야 하는데 이유는 아래 코드를 보자.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
public void lambdaTest() {
    int base = 1000;

    new Thread( = () -> {
        try {
            Thread.sleep(1000);
            base = 999;            
        } catch(Exception e) {
            /*  do nothing */
        } 
    }).start();

    System.out.println(base); 
}

각 변수들의 jvm 상의 위치를 예상해 보면, 1번은 method area에 2번은 java heap에 3번은 해당 함수가 실행되는 stack에 위치하게 될 것이다. 그러면 위와 같은 코드에서 lambdaTest() 함수가 끝나버리면 stack이 pop 됨으로 lambda 내부에서 잘못된 local 변수를  참조할 수 있다. 그러므로 3번의 local 변수 참조는 읽기만 가능하다.

* Lambda Capturing

lambda body 안에서 free variable을 사용할수 있도록 해주는 동작

댓글

이 블로그의 인기 게시물

[Protocol] WIEGAND 통신

Orange for Oracle에서 한글 깨짐 해결책

[UI] GNB·LNB·SNB·FNB 용어 설명