Lambda

Lambda

Created: April 30, 2022 7:19 PM Tags: Java

Lambda(λžŒλ‹€μ‹)μ΄λž€?


  • 읡λͺ…ν•¨μˆ˜λ₯Ό μ§€μΉ­ν•˜λŠ” μš©μ–΄
  • ν•¨μˆ˜λ₯Ό 보닀 λ‹¨μˆœν•˜κ²Œ ν‘œν˜„ν•˜λŠ” 방법

μž₯점

  • μ½”λ“œμ˜ κ°„κ²°μ„±
  • 지연연상 μˆ˜ν–‰ - λžŒλ‹€λŠ” 지연연상을 μˆ˜ν–‰ ν•¨μœΌλ‘œμ¨ λΆˆν•„μš”ν•œ 연산을 μ΅œμ†Œν™” ν•  수 μžˆλ‹€.
  • λ³‘λ ¬μ²˜λ¦¬ κ°€λŠ₯ - λ©€ν‹°μ“°λ ˆλ“œλ₯Ό ν™œμš©ν•˜μ—¬ λ³‘λ ¬μ²˜λ¦¬λ₯Ό μ‚¬μš© ν•  수 μžˆλ‹€.

단점

  • λžŒλ‹€μ‹μ˜ 호좜이 κΉŒλ‹€λ‘­λ‹€.
  • λžŒλ‹€ stream μ‚¬μš©μ‹œ λ‹¨μˆœ forλ¬Έ ν˜Ήμ€ whileλ¬Έ μ‚¬μš© 보닀 μ„±λŠ₯이 λ–¨μ–΄μ§„λ‹€.
  • λΆˆν•„μš”ν•˜κ²Œ μ‚¬μš©ν•˜κ²Œ 되면 가독성을 λ–¨μ–΄ 뜨릴 수 μžˆλ‹€.

λžŒλ‹€ ν‘œν˜„μ‹ μž‘μ„±λ²•

(λ§€κ°œλ³€μˆ˜λͺ©λ‘) -> {ν•¨μˆ˜ λͺΈμ²΄}

//κΈ°μ‘΄ ν‘œν˜„μ‹
int min(int x, int y){
	return x<y ? x: y;
}

//λžŒλ‹€ ν‘œν˜„μ‹
	(x, y) -> x < y ? x : y;
  • 유의 사항
    • λ§€κ°œλ³€μˆ˜μ˜ νƒ€μž…μ„ μΆ”λ‘ ν•  수 μžˆλŠ” 경우 νƒ€μž…μ„ μƒλž΅ν•  수 μžˆλ‹€.
    • λ§€κ°œλ³€μˆ˜κ°€ ν•˜λ‚˜μΈ κ²½μš°μ—λŠ” κ΄„ν˜Έ(())λ₯Ό μƒλž΅ν•  수 μžˆλ‹€.
    • ν•¨μˆ˜μ˜ λͺΈμ²΄κ°€ ν•˜λ‚˜μ˜ λͺ…λ Ήλ¬Έλ§ŒμœΌλ‘œ 이루어진 κ²½μš°μ—λŠ” μ€‘κ΄„ν˜Έ({})λ₯Ό μƒλž΅ν•  수 μžˆλ‹€.(이 λ•Œ μ„Έλ―Έμ½œλ‘ (;)을 뢙이지 μ•ŠμŒ)
    • ν•¨μˆ˜μ˜ λͺΈμ²΄κ°€ ν•˜λ‚˜μ˜ return 문으둜만 이루어진 κ²½μš°μ—λŠ” μ€‘κ΄„ν˜Έ({})λ₯Ό μƒλž΅ν•  수 μ—†λ‹€.
    • return λ¬Έ λŒ€μ‹  ν‘œν˜„μ‹μ„ μ‚¬μš©ν•  수 있으며, 이 λ–„ λ°˜ν™˜κ°’μ€ ν‘œν˜„μ‹μ˜ 결과값이 λœλ‹€.(이 λ•Œ μ„Έλ―Έμ½œλ‘ (;)은 뢙이지 μ•ŠμŒ)

        new Thread(new Runnable() {
        		public void run(){
        			System.out,println("전톡적인 λ°©μ‹μ˜ μŠ€λ ˆλ“œ 생성");
        			}
        }).start();
              
        new Thread(()->{
        		System.out.println("λžŒλ‹€ ν‘œν˜„μ‹μ„ μ‚¬μš©ν•œμŠ€λ ˆλ“œ 생성");
        }).start();
      

ν•¨μˆ˜ν˜• μΈν„°νŽ˜μ΄μŠ€(functional interface)

  • λžŒλ‹€ ν‘œν˜„μ‹μ„ μ‚¬μš©ν•  λ•ŒλŠ” λžŒλ‹€ ν‘œν˜„μ‹μ„ μ €μž₯ν•˜κΈ° μœ„ν•œ μ°Έμ‘° λ³€μˆ˜μ˜ νƒ€μž…μ„ κ²°μ •ν•΄μ•Όλ§Œ ν•©λ‹ˆλ‹€.
  • μ°Έμ‘°λ³€μˆ˜μ˜νƒ€μž… μ°Έμ‘°λ³€μˆ˜μ˜μ΄λ¦„ = λžŒλ‹€ν‘œν˜„μ‹
  • ν•¨μˆ˜ν˜• μΈν„°νŽ˜μ΄μŠ€λŠ” 좔상 ν΄λž˜μŠ€μ™€λŠ” 달리 단 ν•˜λ‚˜μ˜ 좔상 λ©”μ†Œλ“œλ§Œμ„ κ°€μ Έμ•Ό ν•œλ‹€.
  • @FunctionalInterfaceλ₯Ό μ‚¬μš©ν•˜μ—¬ ν•¨μˆ˜ν˜• μΈν„°νŽ˜μ΄μŠ€μž„μ„ λͺ…μ‹œ ν•  수 μžˆλ‹€.
@FunctionalInterface
interface Calc { //ν•¨μˆ˜ν˜• μΈν„°νŽ˜μ΄μŠ€μ˜ μ„ μ–Έ
		public int min(int x, int y);
}

public class Lambda02{
	public static void main(String[] args){
			Calc minNum = (x, y) -> x < y ? x : y; //좔상 λ©”μ†Œλ“œμ˜ κ΅¬ν˜„
			System.out.println(minNum.min(3,4)); //ν•¨μˆ˜ν˜• μΈν„°νŽ˜μ΄μŠ€μ˜ μ‚¬μš©
}

Reference

μ½”λ”©κ΅μœ‘ ν‹°μ”¨ν”ΌμŠ€μΏ¨

[JAVA] λžŒλ‹€μ‹(Lambda)의 κ°œλ… 및 μ‚¬μš©λ²•


You might also enjoy

-->