Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

끄적끄적

람다식 (2) 본문

CS 공부

람다식 (2)

yenacathy97 2022. 3. 26. 17:14

람다 캡처링

- 람다는 외부에 있는 변수를 참조할 수 있다. -> 이때의 변수를 자유 변수라 한다.

 

람다 캡처링의 제약 조건

1. 지역변수는 final로 선언되어야 한다.

2. final로 선언되어 있지 않아도 값이 재할당이 일어나선 안된다.

 

메모리와 람다(람다캡처링의 제약조건이 있는 이유)

- 쓰레드는 힙을 공유하고 별도의 스택을 생성하므로, 지역변수는 공유되지 않고 인스턴스 변수는 공유한다.

- 람다는 별도의 쓰레드에서 실행한다. 캡처하고 있는 변수가 있는 쓰레드가 사라저 해당 지역변수가 사라지면 오류가 날것 같지만 나지 않는다.

- 지역변수에 직접 접근하는 것이 아니라 변수를 자신의 스택으로 복사하여 동일한 값을 참조한다.

 

람다의 유효범위

- 람다 표현식의 중촉 블록 내의 유효 범위  = 람다 표현식과 이를 포함하고 있는 블록의 유효 범위

- 위 사진에서 8번 라인을보면 람다 외부의 변수를 접근하여 사용하고 있다. 동일한 변수가 있어서 9번 라인에서 에러가 발생한다.

- 위 사진에서 This는 테스트 클래스 내부를 나타내다. 즉,람다에서 this는 람다를 생성하는 객체의 this 키워드를 사용하는 것과 같다.

 

FunctionalInterface

- 하나의 추상 메서드를 갖는 인터페이스

- 추상 메서드의 시그니처(매개변수 개수와 타입, 리턴타입)과 동일한 람다 함수를 할당해서 사용할 수 있다.

- 함수형 인터페이스를 정의하고 @FunctionalInterface 어노테이션을 붙이면 함수형 인터페이스의 정의를 람다가 검증해준다.

 

@FunctionalInterface
interface MySum{
public int sum(int a, int b);
}

public static void Main(String []args){
	MySym func = (a,b) ->a+b;
    System.out.println(fuc.sum(10,11));
}

 

'CS 공부' 카테고리의 다른 글

해시맵  (0) 2022.03.30
RestAPI 란  (0) 2022.03.28
[java]람다식(Lambda Expression)  (0) 2022.03.20
thread와 런에이블  (0) 2022.03.20
[java] static  (0) 2022.03.18
Comments