๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์‹œ๋„/๊ตญ๋น„์ง€์›

[D+71] ๋žŒ๋‹ค Lamda

by ๐Ÿ‡๋ฐ•๋ด‰๋ด‰๐Ÿ‡ 2022. 12. 30.

 

 

๊ตญ๋น„์ง€์› 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); };

์ด๋ ‡๊ฒŒ ํ•˜์—ฌ ๋žŒ๋‹ค์‹์ด ์™„์„ฑ๋˜์—ˆ๋‹ค.

๋žŒ๋‹ค๋Š” ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋ถ„์„ํ•ด ํƒ€์ž…์ถ”๋ก ์ด ๊ฐ€๋Šฅํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋‚ด์šฉ์„ ๋œ์–ด๋‚ผ ์ˆ˜ ์žˆ๋˜ ๊ฒƒ์ด๋‹ค.

์ฆ‰, ์ปดํŒŒ์ผ๋Ÿฌ์ž…์žฅ์—์„  ๋ถˆํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ๋œ์–ด๋‚ธ ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ œ๊ฑฐํ•ด๋„ ์ด๋ฏธ ๋‹ค ์ถ”๋ก ํ•ด์„œ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

 

 

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€