Backend/Java

[Java] λžŒλ‹€μ‹(Lambda Expression)

_μ„±ν˜Έ_ 2022. 1. 17. 09:48
728x90
λ°˜μ‘ν˜•

* λ³Έ λ‚΄μš©μ€ <Java의 정석 기초편(남ꢁ μ„±)>을 μ°Έκ³ ν•˜μ—¬ μž‘μ„±ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

● λžŒλ‹€μ‹(Lambda Expression)은 λ©”μ„œλ“œλ₯Ό ν•˜λ‚˜μ˜ '식(expression)'으둜 ν‘œν˜„ν•œ 것이닀. λžŒλ‹€μ‹μ€ ν•¨μˆ˜λ₯Ό κ°„λž΅ν•˜λ©΄μ„œλ„ λͺ…ν™•ν•˜κ²Œ ν‘œν˜„ν•  수 있게 ν•΄μ€€λ‹€. λ©”μ„œλ“œλ₯Ό λžŒλ‹€μ‹μœΌλ‘œ ν‘œν˜„ν•˜λ©΄ λ©”μ„œλ“œμ˜ 이름과 λ°˜ν™˜κ°’μ΄ μ—†μ–΄μ§€λ―€λ‘œ, λžŒλ‹€μ‹μ„ '읡λͺ… ν•¨μˆ˜(anonymous function)'라고도 ν•œλ‹€. 즉, λžŒλ‹€μ‹μœΌλ‘œ 인해 λ©”μ„œλ“œλ₯Ό λ³€μˆ˜μ²˜λŸΌ λ‹€λ£¨λŠ” 것이 κ°€λŠ₯ν•΄μ§„ 것이닀.

● λžŒλ‹€μ‹ μž‘μ„±ν•˜κΈ°

int max(int a, int b) { return a > b ? a : b; }

 

  • λ©”μ„œλ“œμ—μ„œ 이름과 λ°˜ν™˜νƒ€μž…μ„ μ œκ±°ν•˜κ³  λ§€κ°œλ³€μˆ˜ 선언뢀와 λͺΈν†΅{} 사이에 '->'λ₯Ό μΆ”κ°€ν•˜κΈ°λ§Œ ν•˜λ©΄ λœλ‹€.
(int a, int b) -> { return a > b ? a : b; }

 

  • λ°˜ν™˜κ°’μ΄ μžˆλŠ” λ©”μ„œλ“œμ˜ 경우, returnλ¬Έ λŒ€μ‹ '식(expression)'으둜 λŒ€μ‹  ν•  수 μžˆλ‹€. μ‹μ˜ μ—°μ‚°κ²°κ³Όκ°€ μžλ™μ μœΌλ‘œ λ°˜ν™˜κ°’μ΄ λœλ‹€. μ΄λ•ŒλŠ” 'λ¬Έμž₯(statement)'이 μ•„λ‹Œ '식'μ΄λ―€λ‘œ 끝에 ';'을 뢙이지 μ•ŠλŠ”λ‹€.
(int a, int b) -> a > b ? a : b

 

  • λžŒλ‹€μ‹μ— μ„ μ–Έλœ λ§€κ°œλ³€μˆ˜μ˜ νƒ€μž…μ€ 좔둠이 κ°€λŠ₯ν•œ κ²½μš°λŠ” μƒλž΅ν•  수 μžˆλŠ”λ°, λŒ€λΆ€λΆ„μ˜ κ²½μš°μ— μƒλž΅κ°€λŠ₯ν•˜λ‹€. λžŒλ‹€μ‹μ— λ°˜ν™˜νƒ€μž…μ΄ μ—†λŠ” μ΄μœ λ„ 항상 좔둠이 κ°€λŠ₯ν•˜κΈ° λ•Œλ¬Έμ΄λ‹€.
(a, b) -> a > b ? a : b