[Java] μžλ°” ν•¨μˆ˜ν˜• μΈν„°νŽ˜μ΄μŠ€μ™€ λžŒλ‹€μ‹(Lambda Expression) μ‰½κ²Œ 배우기

2025. 5. 23. 17:59Β·πŸ› οΈBackend/β˜•Java

βœ… 1. λžŒλ‹€μ‹μ΄λž€?

// ν•¨μˆ˜ν˜• μΈν„°νŽ˜μ΄μŠ€
@FunctionalInterface
interface Printer {
    void print(String message);
}
// Main
public class Main {
    public static void main(String[] args) {
        Printer printer = (message) -> System.out.println("좜λ ₯:" + message); // 읡λͺ…ν•¨μˆ˜μ •μ˜
        printer.print("print, message") // μ •μ˜ 된 ν•¨μˆ˜ 호좜
    }
}
  • ν•¨μˆ˜ν˜• μΈν„°νŽ˜μ΄μŠ€μ˜ 좔상 λ©”μ„œλ“œλ₯Ό κ°„κ²°ν•˜κ²Œ ν‘œν˜„ν•˜λŠ” 문법을 μ˜λ―Έν•œλ‹€.
  • λžŒλ‹€μ‹μ€ 였직 좔상 λ©”μ„œλ“œκ°€ ν•˜λ‚˜μΈ μΈν„°νŽ˜μ΄μŠ€ μ—μ„œλ§Œ μ‚¬μš©μ΄ κ°€λŠ₯ν•˜λ©°, 이λ₯Ό ν•¨μˆ˜ν˜• μΈν„°νŽ˜μ΄μŠ€λΌκ³  ν•œλ‹€.
  • 읡λͺ… κ΅¬ν˜„ 클래슀의 객체 생성 λΆ€λΆ„λ§Œ λžŒλ‹€μ‹μœΌλ‘œ ν‘œν˜„ν•¨.
  • λ©”μ„œλ“œκ°€ ν•˜λ‚˜λ§Œ 있기 λ•Œλ¬Έμ— λ©”μ„œλ“œ 이름을 μƒλž΅ ν•  수 있으며, μ΄λ•Œλ¬Έμ— λžŒλ‹€μ‹μ€ 읡λͺ… ν•¨μˆ˜λ‘œλ„ λΆˆλ¦°λ‹€.

βœ… 2. λžŒλ‹€μ‹κ³Ό 읡λͺ…ν΄λž˜μŠ€

// λžŒλ‹€μ‹
Printer printer = msg -> System.out.println("받은 λ©”μ‹œμ§€: " + msg);
// 읡λͺ…ν΄λž˜μŠ€
Printer printer = new Printer() {
    @Override
    public void print(String msg) {
        System.out.println("받은 λ©”μ‹œμ§€: " + msg);
    }
};
  • λžŒλ‹€μ‹μ€ 읡λͺ… 클래슀의 단점을 λ³΄μ™„ν•˜κ³ μž μžλ°” 8μ—μ„œ λ„μž…λœ κΈ°λŠ₯이닀.
  • 즉, λžŒλ‹€μ‹μ€ 읡λͺ…ν΄λž˜μŠ€λ₯Ό 기반으둜 λ§Œλ“€μ—ˆκΈ° λ•Œλ¬Έμ—, κΈ°λŠ₯μ μœΌλ‘œλŠ” μ™„μ „ λ™μΌν•˜κ²Œ λ™μž‘μ„ ν•œλ‹€.
  • μΈν„°νŽ˜μ΄μŠ€μ˜ κ΅¬ν˜„μ²΄ 클래슀λ₯Ό λ§Œλ“€μ§€ μ•Šκ³ , 읡λͺ…ν΄λž˜μŠ€λ‘œ κ΅¬ν˜„μ„ ν•˜κΈ° λ•Œλ¬Έμ— 읡λͺ…ν΄λž˜μŠ€μΈκ²ƒμ΄λ‹€.
  • 즉, λžŒλ‹€μ‹μ€ λ‚΄λΆ€μ μœΌλ‘œ 읡λͺ… κ΅¬ν˜„κ°μ²΄κ°€ λ„˜μ–΄κ°€μ§€λ§Œ, λ³Ό λ•ŒλŠ” 식이 λ„˜μ–΄κ°€λŠ” κ²ƒμ²˜λŸΌ 보일 수 μžˆλ‹€.

βœ… 3. λžŒλ‹€μ‹ ν‘œν˜„ μ’…λ₯˜

(1) λ§€κ°œλ³€μˆ˜ μžλ£Œν˜• μƒλž΅ κ°€λŠ₯ - μΈν„°νŽ˜μ΄μŠ€μ—μ„œ λ§€κ°œλ³€μˆ˜ νƒ€μž…μ„ μ•Œ 수 있으면 μžλ£Œν˜• μƒλž΅μ΄ κ°€λŠ₯ν•˜λ‹€.

@FunctionalInterface
interface Calculator {
    int operate(int a, int b);
}
Calculator add = (a, b) -> a + b; // μžλ£Œν˜• μƒλž΅
System.out.println(add.operate(3, 5)); // 좜λ ₯: 8

 

(2) λ§€κ°œλ³€μˆ˜κ°€ 1개면 κ΄„ν˜Έ μƒλž΅μ΄ κ°€λŠ₯ν•˜λ‹€.

@FunctionalInterface
interface Printer {
    void print(String message);
}
Printer printer = message -> System.out.println("좜λ ₯: " + message); // κ΄„ν˜Έ μƒλž΅
printer.print("Hello");

 

(3) λ§€κ°œλ³€μˆ˜κ°€ 0개면 κ΄„ν˜Έλ§Œ 남긴닀.

@FunctionalInterface
interface Greeter {
    void greet();
}
Greeter greeter = () -> System.out.println("μ•ˆλ…•ν•˜μ„Έμš”!"); // κ΄„ν˜Έλ§Œ λ‚¨μŒ
greeter.greet();

 

(4) 싀행문이 1개면 μ€‘κ΄„ν˜Έ μƒλž΅μ΄ κ°€λŠ₯ν•˜λ‹€.

@FunctionalInterface
interface Squarer {
    int square(int x);
}
Squarer s = x -> x * x; // μ‹€ν–‰λ¬Έ 1개, μ€‘κ΄„ν˜Έ μƒλž΅
System.out.println(s.square(4)); // 좜λ ₯: 16

 

(5) 싀행문이 return ν•˜λ‚˜λ©΄ return + μ„Έλ―Έμ½œλ‘  + μ€‘κ΄„ν˜Έ μƒλž΅μ΄ κ°€λŠ₯ν•˜λ‹€.

@FunctionalInterface
interface Adder {
    int add(int a, int b);
}
// 이건 μƒλž΅ μ „
Adder a1 = (a, b) -> { return a + b; };
// 이건 μƒλž΅ ν›„
Adder a2 = (a, b) -> a + b; // return, μ€‘κ΄„ν˜Έ, μ„Έλ―Έμ½œλ‘  λͺ¨λ‘ μƒλž΅
System.out.println(a2.add(2, 3)); // 좜λ ₯: 5

βœ… 4. 정리

  • λžŒλ‹€μ‹μ€ μΈν„°νŽ˜μ΄μŠ€λ₯Ό 읡λͺ…ν΄λž˜μŠ€λ‘œ κ΅¬ν˜„ν•œ 클래슀이며, λ‚΄λΆ€μ μœΌλ‘œ λ©”μ„œλ“œλ₯Ό κ΅¬ν˜„ν•˜λŠ” 식을 κ°€μ§€κ³  μžˆλ‹€.
  • ν•΄λ‹Ή 읡λͺ…ν΄λž˜μŠ€μ˜ μž¬μ •μ˜ 된 λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•¨μœΌλ‘œμ¨, κ΅¬ν˜„ 된 λ©”μ„œλ“œλ₯Ό μ΄μš©ν•˜λŠ” 방식이 λžŒλ‹€μ‹μ΄λ‹€.
  • ν•œλ§ˆλ””λ‘œ, λ©”μ„œλ“œλ₯Ό μž¬μ •μ˜ ν•΄μ„œ ν•΄λ‹Ή λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•΄μ„œ μ΄μš©ν•˜λŠ” κ°œλ…μž„.

'πŸ› οΈBackend > β˜•Java' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[Java] java.io νŒ¨ν‚€μ§€ μž…μΆœλ ₯ 슀트림 μ‰½κ²Œ μ΄ν•΄ν•˜κΈ°  (2) 2025.05.28
[Java] java.lang νŒ¨ν‚€μ§€ 정리: Object, String, Math 클래슀 총정리  (0) 2025.05.26
[Java] μ œλ„€λ¦­(Generic) 문법 정리: 클래슀, λ©”μ„œλ“œ, μ œν•œκΉŒμ§€  (0) 2025.05.23
[Java] 읡λͺ… 클래슀(Anonymous Class)  (1) 2025.05.22
[Java] λ‹€ν˜•μ„±(polymorphism)  (1) 2025.05.22
'πŸ› οΈBackend/β˜•Java' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
  • [Java] java.io νŒ¨ν‚€μ§€ μž…μΆœλ ₯ 슀트림 μ‰½κ²Œ μ΄ν•΄ν•˜κΈ°
  • [Java] java.lang νŒ¨ν‚€μ§€ 정리: Object, String, Math 클래슀 총정리
  • [Java] μ œλ„€λ¦­(Generic) 문법 정리: 클래슀, λ©”μ„œλ“œ, μ œν•œκΉŒμ§€
  • [Java] 읡λͺ… 클래슀(Anonymous Class)
junbin2
junbin2
java.lang.NullPointerException
  • junbin2
    bin's Development Diary
    junbin2
  • 전체
    였늘
    μ–΄μ œ
    • 전체보기 (181)
      • πŸŽ“λ°©μ†‘ν†΅μ‹ λŒ€ν•™κ΅ (41)
        • βš™οΈμ»΄ν“¨ν„°μ˜ 이해 (11)
        • πŸ’»μ»΄ν“¨ν„°κ³Όν•™ 개둠 (9)
        • πŸ”’μžλ£Œκ΅¬μ‘° (6)
        • πŸŒμœ λΉ„μΏΌν„°μŠ€ μ»΄ν“¨νŒ… (11)
        • πŸ›οΈμ„Έκ³„μ˜μ •μΉ˜μ™€κ²½μ œ (3)
        • πŸ–₯️컴퓨터과학과 (1)
      • πŸ› οΈBackend (64)
        • πŸ“šλ°±μ—”λ“œ 곡뢀 (4)
        • β˜•Java (23)
        • 🌳Spring (13)
        • βš™οΈC (8)
        • ⚑Python (13)
        • JavaScript (1)
        • πŸ›’οΈDatabase (0)
        • Algorithm Problem Solving (2)
      • 🌐 Network (7)
        • πŸ“œHTTP (7)
      • πŸš€DevOps (1)
      • β›ΊμŠ€νŒŒλ₯΄νƒ€μ½”λ”©ν΄λŸ½ (64)
      • 정보 (2)
      • 정리가 ν•„μš”ν•œ κΈ€ (2)
  • λΈ”λ‘œκ·Έ 메뉴

    • ν™ˆ
    • νƒœκ·Έ
    • λ°©λͺ…둝
  • 링크

    • GitHub
  • 곡지사항

  • 인기 κΈ€

  • νƒœκ·Έ

    Java
    ν•¨μˆ˜
    μœ λΉ„μΏΌν„°μŠ€ μ»΄ν“¨νŒ…κ°œλ‘ 
    컴퓨터과학 개둠
    C
    λ°©μ†‘λŒ€
    λ°©ν†΅λŒ€
    μžλ°”
    μœ λΉ„μΏΌν„°μŠ€
    Python
    λ°°μ—΄
    λ°©μ†‘ν†΅μ‹ λŒ€ν•™κ΅
    파이썬
    자료ꡬ쑰
    Cμ–Έμ–΄
    μž…μΆœλ ₯
    μ»΄ν“¨ν„°μ˜ 이해
    C μ–Έμ–΄
    Spring Framework
    spring
  • 졜근 λŒ“κΈ€

  • 졜근 κΈ€

  • hELLOΒ· Designed Byμ •μƒμš°.v4.10.1
junbin2
[Java] μžλ°” ν•¨μˆ˜ν˜• μΈν„°νŽ˜μ΄μŠ€μ™€ λžŒλ‹€μ‹(Lambda Expression) μ‰½κ²Œ 배우기
μƒλ‹¨μœΌλ‘œ

ν‹°μŠ€ν† λ¦¬νˆ΄λ°”