๋žŒ๋‹ค์‹(lambda expression)

  • ๋ฉ”์„œ๋“œ๋ฅผ ํ•˜๋‚˜์˜ ์‹์œผ๋กœ ํ‘œํ˜„ํ•œ ๊ฒƒ
  • ๋ฉ”๋“œ๋ฅผ ๋ณ€์ˆ˜์ฒ˜๋Ÿผ ๋‹ค๋ฃจ๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•ด์ง
public interface A {
	void m();
}

์˜ˆ๋ฅผ๋“ค์–ด ์œ„์™€ ๊ฐ™์€ ํ•จ์ˆ˜ํ˜• ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์ž

ํ•จ์ˆ˜ํ˜• ์ธํ„ฐํŽ˜์ด์Šค

  • ํ•˜๋‚˜์˜ ์ถ”์ƒ ๋ฉ”์†Œ๋“œ์™€ ์„ ์–ธ์„ ํฌํ•จํ•œ ์ธํ„ฐํŽ˜์ด์Šค
  • ๋‹จ์ผ ์ถ”์ƒ ๋ฉ”์†Œ๋“œ๋ฅผ ๊ฐ€์ง„๋‹ค
public class AA implements A {
	public void m() {
		System.out.println("AA");
	}
}
public class Test {
	public static void main(String[] args) {
		A a1 = new AA();
	}
}

๊ธฐ์กด์—๋Š” A ๋ผ๋Š” ์ธํ„ฐํŽ˜์ด์Šค์˜ ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด A ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ implementsํ•œ AAํด๋ž˜์Šค๋ฅผ ๋ฐ›์•„์™€์„œ ์ •์˜ํ•˜์˜€๋‹ค

public class Test {
	A a2 = new A() {
		public void m() {
			System.out.println("์ต๋ช…๋‚ด๋ถ€ํด๋ž˜์Šค");
		}
	}
}

๋˜๋Š” ์ต๋ช… ๋‚ด๋ถ€ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ๋‹ค

public class Test{
	A a3 = () -> System.out.println("๋žŒ๋‹ค์‹");
}

๋žŒ๋‹ค์‹์€ ์œ„์™€ ๊ฐ™์€ ์ต๋ช… ๋‚ด๋ถ€ ํด๋ž˜์Šค์—์„œ new ๋ฅผ ์ƒ๋žตํ•˜๊ณ  ๋ฉ”์†Œ๋“œ(์–ด์ฐจํ”ผ ํ•˜๋‚˜๋ฐ–์— ์—†๊ธฐ ๋•Œ๋ฌธ์—)๋„ ์ƒ๋žตํ•œ ๋’ค ๊ตฌํ˜„ ๋‚ด์šฉ์„ ์ž…๋ ฅํ•˜๋Š”๊ฒƒ์ด ๋žŒ๋‹ค์‹์ด๋‹ค

๋žŒ๋‹ค์‹์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๋ฐ˜๋“œ์‹œ ๋ฉ”์†Œ๋“œ๊ฐ€ ํ•˜๋‚˜์—ฌ์•ผ ํ•˜๊ณ , ๋žŒ๋‹ค์‹์— ๊ตฌํ˜„ํ•˜๋Š” ๋ฉ”์†Œ๋“œ์˜ ๋‚ด์šฉ์€ ์ธํ„ฐํŽ˜์ด์Šค ๋ฉ”์†Œ๋“œ์˜ ๋‚ด์šฉ์ด๋‹ค


๋žŒ๋‹ค์‹ ํ‘œํ˜„ ๋ฐฉ๋ฒ•

public interface A { // ํŒŒ๋ผ๋ฏธํ„ฐ x, ๋ฆฌํ„ด๊ฐ’ x
	void m(); 
}
 
public interface A { // ํŒŒ๋ผ๋ฏธํ„ฐ o, ๋ฆฌํ„ด๊ฐ’ x
	void m(String str); 
}
 
public interface A { // ํŒŒ๋ผ๋ฏธํ„ฐ x, ๋ฆฌํ„ด๊ฐ’ o
	String m(); 
}
 
public interface A { // ํŒŒ๋ผ๋ฏธํ„ฐ o, ๋ฆฌํ„ด๊ฐ’ o
	int m(int x, int y); 
}
 
public class Test{
	public static void main(String[] args) {
		A a = () -> System.out.println("A");
		
		B b = str -> System.out.println(str); // ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ํ•˜๋‚˜๋ผ๋ฉด ๊ด„ํ˜ธ๋„ ์ƒ๋žต ๊ฐ€๋Šฅ
		
		
		C c = () -> {
			System.out.println("C");
			return "C";
		}
		
		// ๋งŒ์•ฝ ๊ตฌํ˜„๋ถ€๊ฐ€ 1์ค„์ด๋ผ๋ฉด {}์™€ return์„ ํ•จ๊ป˜ ์ƒ๋žตํ•ด์•ผํ•จ
		
		// C c = () -> "C"; 
		
		D d = (x, y) -> x + y
	}
 
}

๋žŒ๋‹ค์‹์œผ๋กœ ์‚ฌ์šฉํ•  ์ธํ„ฐํŽ˜์ด์Šค์—๋Š” @FunctionalInterface ๋ฅผ ๋ถ™์—ฌ์ฃผ๋ฉด ๋ฉ”์†Œ๋“œ๋ฅผ ๋” ์ด์ƒ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์—†์Œ

Ref.