코딩하렴

Lambda Expressions 람다식의 활용 - 껍데기

by 으렴

어우.. 람다식 넘나 어렵고요^^;

람다식의 정의와 활용법 등은 앞글에서 보고 오쎄옹

 

Lambda Expressions 람다식

람다쓰... "수학자 Alonzo Church가 발표한 람다계산법에서 사용된 식"을 제자 John Macarthy가 프로그래밍 언어에 도입! Java8부터 Lambda Expressions 지원 람다는 객체지향보다 함수지향(병렬처리, 이벤트 지향..

ryeom2.tistory.com

 

후;;

이게 모라;;

암튼

B b4 = () ->  () -> System.out.println("람다식ㅜㅜ");

와웅 몇다리를 걸친 람다식을 한번 만들어 보겠다.

 

자 이제 인터페이스 A와 B를 만든다.

interface A {
	public void func01();
}

interface B {
	public A func02(); // interface가 리턴된다
}

A는 평범하게 아무것도 리턴하지 않는 보이드를 사용하고

 

B는 헷갈리지않게 func02라는 이름으로 생성하고 리턴타입을 A로 한다.

 

이는 interface가 리턴 된다는 말이다.

 

		B b1 = new B() {
			public A func02() {
				return new A() {
					public void func01() {					//1껍딱 떼기
						System.out.println("new B -> func02 -> return -> new A -> func01 ->출력");
					}
				};
			}
		};

껍따구가 여러개이다.

 

여기서 한개의 껍따구를 떼보자

 

		B b2 = new B() {
			public A func02() {					//2껍딱 떼기
				return () -> {
					System.out.println("new B -> func02 -> return -> /* new A -> func01 */ ->출력");
				};
			}
		};
		

 

new A와 func01의 껍따구가 벗겨졌다.

 

주석해둔 껍따구를 벗겨보자

 

		B b3 = () -> {
				return () -> {
					System.out.println("/* new B -> func02 -> */ return -> /* new A -> func01 */ ->출력");
				};
		};

와웅

이렇게 해두고 첨에 완성인줄 알았따.

 

아니어따..

B b4 = () ->  () -> System.out.println("/* new B -> func02 -> */ /* return -> */ /* new A -> func01 */ ->출력");

껄껄껄 이렇게 희안하게 생긴 람다식이 나온다.

 

굉; 장;

		b1.func02().func01();
		b2.func02().func01();
		b3.func02().func01();
		b4.func02().func01();

이것을 돌려보면

new B -> func02 -> return -> new A -> func01 ->출력
new B -> func02 -> return -> /* new A -> func01 */ ->출력
/* new B -> func02 -> */ return -> /* new A -> func01 */ ->출력
/* new B -> func02 -> */ /* return -> */ /* new A -> func01 */ ->출력

요렇게 나온다. 주석부분만 지워보게따.

와아우...

 

 

코드 껍데기를 그림으로보면 노랑이 벗기고 초록이 벗기고 파랑이를 벗겼다고 생각하면 된다.

 

 

사이트의 정보

코딩하렴

으렴

활동하기