πŸ“Œ μžλ°” λžŒλ‹€(Lambda) ν™œμš© 정리

My Pale Blue DotΒ·2025λ…„ 3μ›” 20일
0

JAVA

λͺ©λ‘ 보기
29/35
post-thumbnail

πŸ“… λ‚ μ§œ

2025λ…„ 3μ›” 20일

πŸ“ ν•™μŠ΅ λ‚΄μš©


βœ… λžŒλ‹€(Lambda)λž€?

λžŒλ‹€(Lambda)λŠ” μžλ°”μ—μ„œ ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ„ μ§€μ›ν•˜κΈ° μœ„ν•œ κΈ°λŠ₯으둜, 읡λͺ… ν•¨μˆ˜λ₯Ό κ°„κ²°ν•˜κ²Œ μž‘μ„±ν•  수 μžˆλ„λ‘ 도와쀀닀.
기쑴에 읡λͺ… 클래슀λ₯Ό μ‚¬μš©ν•˜μ—¬ κ΅¬ν˜„ν–ˆλ˜ κΈ°λŠ₯을 더 κ°„λ‹¨ν•˜κ²Œ ν‘œν˜„ν•  수 μžˆλ‹€.

🎯 λžŒλ‹€ ν‘œν˜„μ‹ κΈ°λ³Έ 문법

(λ§€κ°œλ³€μˆ˜) -> { μ‹€ν–‰λ¬Έ }
  • λ§€κ°œλ³€μˆ˜: μž…λ ₯값을 μ •μ˜ν•˜λŠ” λΆ€λΆ„
  • ν™”μ‚΄ν‘œ(->): λ§€κ°œλ³€μˆ˜μ™€ 싀행문을 κ΅¬λΆ„ν•˜λŠ” μ—­ν• 
  • μ‹€ν–‰λ¬Έ: μ‹€ν–‰ν•  λ‘œμ§μ„ μž‘μ„±ν•˜λŠ” λΆ€λΆ„

μ˜ˆμ‹œ

// 두 숫자의 합을 κ΅¬ν•˜λŠ” λžŒλ‹€ ν‘œν˜„μ‹
(int a, int b) -> { return a + b; }

// 약식 ν‘œν˜„ (μ€‘κ΄„ν˜Έ μƒλž΅ κ°€λŠ₯)
(a, b) -> a + b

1️⃣ 리슀트 μ •λ ¬κ³Ό 좜λ ₯ (C01Lamda.java)

λžŒλ‹€ ν‘œν˜„μ‹μ„ μ‚¬μš©ν•˜μ—¬ 리슀트 μ •λ ¬ 및 좜λ ₯을 μˆ˜ν–‰ν•˜λŠ” μ˜ˆμ œμ΄λ‹€.

βœ… μ½”λ“œ 뢄석

  • Person 클래슀λ₯Ό μƒμ„±ν•˜κ³ , List<Person> 객체λ₯Ό λ§Œλ“€μ–΄ μ‚¬λžŒ 정보λ₯Ό μ €μž₯ν•œλ‹€.
  • forEach(System.out::println)을 μ‚¬μš©ν•˜μ—¬ 리슀트 좜λ ₯ν•œλ‹€.
  • λžŒλ‹€μ‹μ„ μ΄μš©ν•œ list.sort()둜 λ‚˜μ΄μˆœ 정렬을 μˆ˜ν–‰ν•œλ‹€.
import java.util.ArrayList;
import java.util.List;

// Person 클래슀 μ •μ˜
class Person {
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() { return name; }
    public int getAge() { return age; }

    @Override
    public String toString() {
        return "Person [name=" + name + ", age=" + age + "]";
    }
}

public class C01Lamda {
    public static void main(String[] args) {
        List<Person> list = new ArrayList<>();
        list.add(new Person("jung", 55));
        list.add(new Person("hong", 22));
        list.add(new Person("bob", 33));

        // κΈ°μ‘΄ 리슀트 좜λ ₯ (λžŒλ‹€μ‹ ν™œμš©)
        list.forEach(System.out::println);
        System.out.println("--");

        // λžŒλ‹€λ₯Ό ν™œμš©ν•œ λ‚˜μ΄μˆœ μ •λ ¬ (λ‚΄λ¦Όμ°¨μˆœ)
        list.sort((a, b) -> b.getAge() - a.getAge());

        // μ •λ ¬λœ 리슀트 좜λ ₯
        list.forEach(System.out::println);
    }
}

2️⃣ ν•¨μˆ˜ν˜• μΈν„°νŽ˜μ΄μŠ€ ν™œμš© (C02Lamda.java)

λžŒλ‹€μ‹μ„ μ‚¬μš©ν•˜μ—¬ μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•˜λŠ” 방법을 배울 수 μžˆλ‹€.

βœ… ν•¨μˆ˜ν˜• μΈν„°νŽ˜μ΄μŠ€λž€?

ν•¨μˆ˜ν˜• μΈν„°νŽ˜μ΄μŠ€(Functional Interface)λŠ” ν•˜λ‚˜μ˜ 좔상 λ©”μ„œλ“œλ§Œ κ°€μ§€λŠ” μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ˜λ―Έν•œλ‹€.
μžλ°”μ—μ„œλŠ” @FunctionalInterface μ–΄λ…Έν…Œμ΄μ…˜μ„ μ‚¬μš©ν•˜μ—¬ ν•¨μˆ˜ν˜• μΈν„°νŽ˜μ΄μŠ€μž„μ„ λͺ…μ‹œν•  수 μžˆλ‹€.

@FunctionalInterface
interface MyFunction {
    int apply(int a, int b);
}

βœ… μ½”λ“œ 뢄석

  • Printer μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ„ μ–Έν•˜κ³  좔상 λ©”μ„œλ“œ print() μ •μ˜.
  • λžŒλ‹€ ν‘œν˜„μ‹μ„ μ‚¬μš©ν•˜μ—¬ Printer μΈν„°νŽ˜μ΄μŠ€ κ΅¬ν˜„.
  • μ‚¬μš©μžλ‘œλΆ€ν„° μž…λ ₯을 λ°›μ•„ λ°˜ν™˜ν•˜λŠ” κΈ°λŠ₯을 μˆ˜ν–‰ν•œλ‹€.
import java.util.Scanner;

// ν•¨μˆ˜ν˜• μΈν„°νŽ˜μ΄μŠ€ μ„ μ–Έ
interface Printer {
    String print();  // ν•˜λ‚˜μ˜ 좔상 λ©”μ„œλ“œλ§Œ μ‘΄μž¬ν•΄μ•Ό 함
}

public class C02Lamda {
    public static void main(String[] args) {
        // λžŒλ‹€μ‹μ„ ν™œμš©ν•œ Printer μΈν„°νŽ˜μ΄μŠ€ κ΅¬ν˜„
        Printer printer = () -> {
            Scanner sc = new Scanner(System.in);
            System.out.print("μž…λ ₯ : ");
            String str = sc.nextLine();  // μ‚¬μš©μž μž…λ ₯ λ°›κΈ°
            sc.close();  // Scanner λ‹«κΈ°
            return str;  // μž…λ ₯받은 λ¬Έμžμ—΄ λ°˜ν™˜
        };

        String returnValue = printer.print();
        System.out.println(returnValue);
    }
}

3️⃣ 사칙연산 계산기 (C03Lamda.java)

λžŒλ‹€μ‹μ„ ν™œμš©ν•˜μ—¬ 사칙연산 κΈ°λŠ₯을 κ΅¬ν˜„ν•˜λŠ” μ˜ˆμ œμ΄λ‹€.

βœ… μ½”λ“œ 뢄석

  • Calculator ν•¨μˆ˜ν˜• μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ„ μ–Έν•œλ‹€ (int calculator(int num1, int num2))
  • λ§μ…ˆ, λΊ„μ…ˆ, κ³±μ…ˆ, λ‚˜λˆ—μ…ˆμ„ λžŒλ‹€μ‹μœΌλ‘œ κ΅¬ν˜„ν•œλ‹€.
// ν•¨μˆ˜ν˜• μΈν„°νŽ˜μ΄μŠ€ μ„ μ–Έ
interface Calculator {
    int calculator(int num1, int num2);
}

public class C03Lamda {
    public static void main(String[] args) {
        // λ§μ…ˆ μ—°μ‚°
        Calculator add = (a, b) -> a + b;

        // λΊ„μ…ˆ μ—°μ‚° (큰 μˆ˜μ—μ„œ μž‘μ€ 수λ₯Ό 뺌)
        Calculator sub = (a, b) -> a > b ? a - b : b - a;

        // κ³±μ…ˆ μ—°μ‚°
        Calculator mul = (a, b) -> { return a * b; };

        // λ‚˜λˆ—μ…ˆ μ—°μ‚° (큰 μˆ˜μ—μ„œ μž‘μ€ 수λ₯Ό λ‚˜λˆ”)
        Calculator div = (a, b) -> { return a > b ? a / b : b / a; };

        // μ—°μ‚° κ²°κ³Ό 좜λ ₯
        System.out.println("λ§μ…ˆ κ²°κ³Ό: " + add.calculator(10, 20));  
        System.out.println("λΊ„μ…ˆ κ²°κ³Ό: " + sub.calculator(30, 10));  
        System.out.println("κ³±μ…ˆ κ²°κ³Ό: " + mul.calculator(10, 20));  
        System.out.println("λ‚˜λˆ—μ…ˆ κ²°κ³Ό: " + div.calculator(100, 5));  
    }
}

πŸ”₯ 정리

  • λžŒλ‹€ ν‘œν˜„μ‹μ„ μ‚¬μš©ν•˜λ©΄ μ½”λ“œκ°€ κ°„κ²°ν•΄μ§€κ³ , 읡λͺ… 클래슀λ₯Ό λŒ€μ²΄ν•  수 μžˆλ‹€.
  • forEach(System.out::println)을 ν™œμš©ν•˜λ©΄ 리슀트λ₯Ό κ°„λ‹¨ν•˜κ²Œ 좜λ ₯ κ°€λŠ₯ν•˜λ‹€.
  • ν•¨μˆ˜ν˜• μΈν„°νŽ˜μ΄μŠ€ (Printer, Calculator)λ₯Ό ν™œμš©ν•˜μ—¬ μ›ν•˜λŠ” λ™μž‘μ„ λžŒλ‹€λ‘œ μ •μ˜ν•  수 μžˆλ‹€.
  • λ©”μ„œλ“œ μ°Έμ‘°(System.out::println)을 μ΄μš©ν•˜λ©΄ λ”μš± 가독성이 μ’‹μ•„μ§„λ‹€.

πŸ”— μ°Έκ³  자료


profile
Here, My Pale Blue.🌏

0개의 λŒ“κΈ€