๊ตญ๋น์ง์ 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); };
์ด๋ ๊ฒ ํ์ฌ ๋๋ค์์ด ์์ฑ๋์๋ค.
๋๋ค๋ ์ปดํ์ผ๋ฌ๊ฐ ์ธํฐํ์ด์ค๋ฅผ ๋ถ์ํด ํ์ ์ถ๋ก ์ด ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ ๋ด์ฉ์ ๋์ด๋ผ ์ ์๋ ๊ฒ์ด๋ค.
์ฆ, ์ปดํ์ผ๋ฌ์ ์ฅ์์ ๋ถํ์ํ ์ ๋ณด๋ฅผ ๋์ด๋ธ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ์ ๊ฑฐํด๋ ์ด๋ฏธ ๋ค ์ถ๋ก ํด์ ์ ์ ์๋ค.
๋๊ธ