μ‹œλ„/ꡭ비지원

[D+71] λžŒλ‹€ Lamda

πŸ‡λ°•λ΄‰λ΄‰πŸ‡ 2022. 12. 30. 08:59

 

 

ꡭ비지원 D+71

-  λžŒλ‹€ Lamda -

 


 

λžŒλ‹€

• λžŒλ‹€ κ΅¬ν˜„ 단계

1단계 : 일반적인 μΈν„°νŽ˜μ΄μŠ€μ™€ 이λ₯Ό κ΅¬ν˜„ν•œ 클래슀

// 일반적인 μΈν„°νŽ˜μ΄μŠ€μ™€ 이λ₯Ό κ΅¬ν˜„ν•œ 클래슀 
interface Printable
{
	public void print(String s);
}

class Printer implements Printable
{
	public void print(String s)
	{
		System.out.println(s);
	}
}

public class StepLamda1 {

	public static void main(String[] args) 
	{
		Printable prn = new Printer();
		prn.print("hello");
	}

}

 

2단계 : 읡λͺ… 클래슀둜 κ΅¬ν˜„ν•œ 클래슀

interface Printable2
{
	public void print(String s);
}

public class StepLamda2 {

	public static void main(String[] args) 
	{
		// κΈ°μ‘΄ Printer클래슀λ₯Ό 둜컬-μ΄λ„ˆ 클래슀둜 λ°”κΎΈκ³  이λ₯Ό λ‹€μ‹œ 읡λͺ… 클래슀둜 λ°”κΎΈμ—ˆλ‹€.
		Printable2 prn = new Printable2() {
							public void print(String s)
							{
								System.out.println(s);
							}};
							
		prn.print("hello2");
	}

}

 

3단계 : λžŒλ‹€λ‘œ κ΅¬ν˜„ν•œ 클래슀

interface Printable3
{
	public void print(String s);
}

public class StepLamda3 
{
	public static void printHello(Printable3 prn)
	{
		prn.print("Hello");
	}

	public static void main(String[] args) 
	{
		// 읡λͺ… 클래슀 μ½”λ“œ
		// 읡λͺ… 클래슀λ₯Ό κ΅¬ν˜„ν•˜λŠ” μ „μ œλŠ” 1. 클래슀 1개, 2. ν•¨μˆ˜ν˜• μΈν„°νŽ˜μ΄μŠ€
		// -> κ°€ λ‚˜μ™”λ‹€λŠ”κ±΄ ν•¨μˆ˜ 1개짜리 κ°μ²΄λΌλŠ” μ˜λ―Έμ΄λ‹€.
		// νŒŒλΌλ―Έν„° -> κ΅¬ν˜„
		Printable3 prn = (s) -> { System.out.println(s); };
							
		prn.print("hello3");
		
		printHello(prn);
		
		printHello((s) -> { System.out.println(s); });
	}

}

 

μΆ”κ°€ : λ‹€μ–‘ν•œ λ°©λ²•μœΌλ‘œ λžŒλ‹€ κ΅¬ν˜„ν•˜κΈ°

interface Printable4
{
	public void print(String s);
}
public class StepLamda4 {

	public static void main(String[] args) 
	{
		Printable4 prn = null;
		
		prn = (String s) -> {System.out.println(s);};	// κ°€μž₯ κΈ΄ νƒ€μž…μ˜ λžŒλ‹€μ‹
		prn.print("Hello1");
		
		prn = (String s) -> System.out.println(s);	// μ€‘κ΄„ν˜Έλ₯Ό μƒλž΅ (ν•œμ€„μΈ 경우)
		prn.print("Hello2");
		
		prn = (s) -> {System.out.println(s);};	// νŒŒλΌλ―Έν„°μ˜ νƒ€μž…μ„ μƒλž΅ (많이 μ‚¬μš©ν•¨)
		prn.print("Hello3");
		
		prn = s -> {System.out.println(s);};	// νŒŒλΌλ―Έν„°μ˜ μ†Œκ΄„ν˜Έλ₯Ό μƒλž΅ (νŒŒλΌλ―Έν„°κ°€ 1개인 κ²½μš°μ—λ§Œ)
		prn.print("Hello4");

	}

}

 

• κΈ°μ‘΄ ν΄λž˜μŠ€κ°€ λžŒλ‹€κ°€ κ΅¬ν˜„λ˜λŠ” κ³Όμ •

기쑴의 읡λͺ… ν΄λž˜μŠ€κ°€ λžŒλ‹€κ°€ λ˜κΈ°κΉŒμ§€μ˜ 과정을 μ„Έμ„Ένžˆ μ•Œμ•„λ³΄λ„λ‘ ν•˜μž.

 

Printable prn = new Printable() {
			public void print(String s)
			{
				System.out.println(s);
			}};

λ³€μˆ˜ prn에 μ–΄λ–€ λ‚΄μš©μ΄ λ‹΄κ²¨μžˆμ„ μ§€λŠ” λͺ°λΌλ„ μ΅œμ†Œν•œ prnμ•ˆμ—λŠ” Printableμ΄λΌλŠ” μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•œ 객체가 μ˜¨λ‹€λŠ” κ±Έ μš°λ¦¬λŠ” νƒ€μž…μΆ”λ‘ μ„ 톡해 μ˜ˆμƒν•  수 μžˆλ‹€.

κ·Έλ ‡κΈ° λ•Œλ¬Έμ— 컴파일러 μž…μž₯μ—μ„œλŠ” μ΅œμ†Œν•œ new Printable()μ΄λΌλŠ” μ •λ³΄λŠ” ꡳ이 μ•Œλ €μ£Όμ§€ μ•Šμ•„λ„ 좔둠이 κ°€λŠ₯ν•˜κΈ° λ•Œλ¬Έμ— ν•„μš”κ°€ μ—†λ‹€.

 

Printable prn = {
			public void print(String s)
			{
				System.out.println(s);
			}};

new Printable()을 μ§€μ›Œμ£Όκ³  λ‚˜μ„œ λ‹€μ‹œ ν™•μΈν•˜κ³  λ‚˜λ©΄ ν•΄λ‹Ή μΈν„°νŽ˜μ΄μŠ€λŠ” λ©”μ†Œλ“œκ°€ ν•˜λ‚˜λ§Œ κ΅¬ν˜„λ˜μ–΄ μžˆλŠ” ν•¨μˆ˜ν˜• μΈν„°νŽ˜μ΄μŠ€λΌλŠ” 것을 μ•Œ 수 μžˆλ‹€.

κ·Έλ ‡κΈ° λ•Œλ¬Έμ— μ–΄μ°¨ν”Ό ν΄λž˜μŠ€μ— κ΅¬ν˜„λœ λ©”μ†Œλ“œλŠ” ν•˜λ‚˜μΌ κ²ƒμ΄λ‹ˆ ꡳ이 ν•¨μˆ˜(λ©”μ†Œλ“œ) 이름을 μ•Œ ν•„μš”κ°€ μ—†λ‹€κ³  생각해 ν•¨μˆ˜λͺ…을 μ§€μ›Œλ²„λ¦°λ‹€.

그리고 λ§€κ°œλ³€μˆ˜μ•ˆμ— μžˆλŠ” λ°μ΄ν„°νƒ€μž…λ„ μΈν„°νŽ˜μ΄μŠ€ μ•ˆμ— λ‹€ κ΅¬ν˜„λ˜μ–΄ 있기 λ•Œλ¬Έμ— μ§€μ›Œλ²„λ¦°λ‹€.

 

Printable prn = {(s) { System.out.println(s); }};

사싀상 λ°”κΉ₯을 κ°μ‹Έμ£ΌλŠ” μ€‘κ΄„ν˜Έλ„ μ˜λ―Έκ°€ μ—†κΈ° λ•Œλ¬Έμ— μ§€μ›Œλ²„λ¦¬κ³  λŒ€μ‹  ν™”μ‚΄ν‘œλ‘œ ν‘œν˜„ν•΄λ²„λ¦°λ‹€.

 

Printable prn = (s) -> { System.out.println(s); };

μ΄λ ‡κ²Œ ν•˜μ—¬ λžŒλ‹€μ‹μ΄ μ™„μ„±λ˜μ—ˆλ‹€.

λžŒλ‹€λŠ” μ»΄νŒŒμΌλŸ¬κ°€ μΈν„°νŽ˜μ΄μŠ€λ₯Ό 뢄석해 νƒ€μž…μΆ”λ‘ μ΄ κ°€λŠ₯ν–ˆκΈ° λ•Œλ¬Έμ— λ‚΄μš©μ„ λœμ–΄λ‚Ό 수 있던 것이닀.

즉, μ»΄νŒŒμΌλŸ¬μž…μž₯에선 λΆˆν•„μš”ν•œ 정보λ₯Ό λœμ–΄λ‚Έ 것이기 λ•Œλ¬Έμ— μ œκ±°ν•΄λ„ 이미 λ‹€ μΆ”λ‘ ν•΄μ„œ μ•Œ 수 μžˆλ‹€.

 

 

λ°˜μ‘ν˜•