Search

λžŒλ‹€μ‹

λžŒλ‹€μ‹

읡λͺ… ν•¨μˆ˜λ₯Ό (λ§€κ°œλ³€μˆ˜) -> { μ‹€ν–‰λ¬Έ } ν˜•νƒœλ‘œ μ •μ˜ν•œ 방식
β€’
μˆ˜ν•™μ˜ ν•¨μˆ˜
β€’
μˆ˜ν•™μ˜ λžŒλ‹€μ‹
β€’
λ©”μ†Œλ“œ
β€’
λžŒλ‹€μ‹
β—¦
λžŒλ‹€μ‹ ν˜•νƒœ
β—¦
λžŒλ‹€μ‹ λ¬Έλ²•κ·œμΉ™
β—¦
λžŒλ‹€μ‹ μ‚¬μš©

μˆ˜ν•™μ˜ ν•¨μˆ˜

ν•œ μ§‘ν•©μ˜ 각 μ›μ†Œλ₯Ό λ‹€λ₯Έ μ§‘ν•©μ˜ μ›μ†Œμ™€ λŒ€μ‘μ‹œν‚€λŠ” κ·œμΉ™
f(x, y) = x + y
Java
볡사

μˆ˜ν•™μ˜ λžŒλ‹€μ‹

ν•¨μˆ˜μ˜ μ •μ˜λ₯Ό κ°„κ²°ν•˜κ²Œ ν‘œν˜„ν•˜κΈ° μœ„ν•œ 기법
(x, y) -> x + y
Java
볡사

λ©”μ†Œλ“œ

λ©”μ†Œλ“œλŠ” 클래슀 λ‚΄λΆ€μ˜ μ •μ˜ν•œ ν•¨μˆ˜
객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ— κΈ°λ°˜ν•œ κ°œλ…

λ©”μ†Œλ“œ ν˜•νƒœ

μ ‘κ·Όμ§€μ •μž λ°˜ν™˜νƒ€μž… λ©”μ†Œλ“œλͺ…( λ§€κ°œλ³€μˆ˜ ) { }
Plain Text
볡사

λžŒλ‹€μ‹

μˆ˜ν•™μ˜ λžŒλ‹€μ‹ κ°œλ…μ„ μ°¨μš©ν•˜μ—¬, 읡λͺ… ν•¨μˆ˜λ₯Ό μ •μ˜ν•˜λŠ” 기법
ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ— κΈ°λ°˜ν•œ κ°œλ…

λžŒλ‹€μ‹ ν˜•νƒœ

( λ§€κ°œλ³€μˆ˜1, λ§€κ°œλ³€μˆ˜2 ) -> { μ‹€ν–‰λ¬Έ }
Java
볡사
λ§€κ°œλ³€μˆ˜ -> { μ‹€ν–‰λ¬Έ }
Java
볡사
( λ§€κ°œλ³€μˆ˜1, λ§€κ°œλ³€μˆ˜2 ) -> μ‹€ν–‰λ¬Έ
Java
볡사
( λ§€κ°œλ³€μˆ˜1, λ§€κ°œλ³€μˆ˜2 ) -> { μ‹€ν–‰λ¬Έ1 return κ²°κ³Όκ°’; }
Java
볡사

λžŒλ‹€μ‹ 문법 κ·œμΉ™

단일 νŒŒλΌλ―Έν„°λ₯Ό κ°€μ§€λŠ” 경우, ( ) κ΄„ν˜Έλ₯Ό μƒλž΅ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
두 개 μ΄μƒμ˜ νŒŒλΌλ―Έν„°λ₯Ό κ°€μ§€λŠ” 경우, κ΄„ν˜Έλ₯Ό λ°˜λ“œμ‹œ μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€.
λžŒλ‹€μ‹μ΄ 단일 ν‘œν˜„μ‹λ§Œμ„ ν¬ν•¨ν•˜λŠ” 경우, { } μ€‘κ΄„ν˜Έλ₯Ό μƒλž΅ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
{ } μ€‘κ΄„ν˜Έ μƒλž΅ μ‹œ, return 은 λ°˜λ“œμ‹œ μƒλž΅ν•΄μ•„ν•©λ‹ˆλ‹€.

λžŒλ‹€μ‹ μ‚¬μš©

1.
ν•¨μˆ˜ν˜• μΈν„°νŽ˜μ΄μŠ€ μ •μ˜
a.
좔상 λ©”μ†Œλ“œκ°€ 1개인 인페이슀λ₯Ό μ •μ˜
2.
λžŒλ‹€μ‹ 읡λͺ…ν•¨μˆ˜ μ •μ˜ν•˜μ—¬ μΈν„°νŽ˜μ΄μŠ€μ— μ„ μ–Έ
3.
λžŒλ‹€μ‹ ν•¨μˆ˜ 호좜
@FunctionalInterface // μ»΄νŒŒμΌλŸ¬μ— ν•΄λ‹Ή μΈν„°νŽ˜μ΄μŠ€κ°€ ν•¨μˆ˜ν˜• μΈν„°νŽ˜μ΄μŠ€μž„μ„ λͺ…μ‹œμ μœΌλ‘œ μ•Œλ €μ€€λ‹€. interface FuncInterface { // * @FunctionalInterface λ₯Ό μ§€μ •ν•˜λ©΄, μΆ”μƒλ©”μ†Œλ“œλ₯Ό 2κ°œμ΄μƒ μ •μ˜ν•˜λ©΄ μ—λŸ¬λ₯Ό λ°œμƒν•˜κ²Œ ν•œλ‹€. void method(); // void method2(); * ν•¨μˆ˜ν˜• μΈν„°νŽ˜μ΄μŠ€λŠ”, 좔상 λ©”μ†Œλ“œ 1개만 μ •μ˜ν•΄μ•Όν•œλ‹€. } public class LambdaFormat { public static void main(String[] args) { // λ§€κ°œλ³€μˆ˜, λ°˜ν™˜νƒ€μž… μ—†λŠ” λžŒλ‹€μ‹ // () -> { System.out.println("λžŒλ‹€μ‹"); } // () -> System.out.println("λžŒλ‹€μ‹"); * ν•œ λ¬Έμž₯이면 {}μ€‘κ΄„ν˜Έ μƒλž΅κ°€λŠ₯ FuncInterface fi = () -> System.out.println("μžλ°”λžŒλ‹€μ‹"); fi.method(); } }
Java
볡사

μžλ°” ν‘œμ€€ 라이브러리의 μ£Όμš” ν•¨μˆ˜ν˜• μΈν„°νŽ˜μ΄μŠ€

μΈν„°νŽ˜μ΄μŠ€
λ©”μ†Œλ“œ
μ„€λͺ…
Function<T, R>
R apply(T t)
ν•˜λ‚˜μ˜ 인자λ₯Ό λ°›μ•„ κ²°κ³Όλ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.
Consumer<T>
void accept(T t)
ν•˜λ‚˜μ˜ 인자λ₯Ό λ°›μ•„ μ²˜λ¦¬ν•˜μ§€λ§Œ κ²°κ³Όλ₯Ό λ°˜ν™˜ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
Predicate<T>
boolean test(T t)
ν•˜λ‚˜μ˜ 인자λ₯Ό λ°›μ•„ boolean 값을 λ°˜ν™˜ν•©λ‹ˆλ‹€.
Supplier<T>
T get()
μΈμžκ°€ μ—†κ³  κ²°κ³Όλ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.
BinaryOperator<T>
T apply(T t1, T t2)
두 개의 λ™μΌν•œ νƒ€μž… 인자λ₯Ό λ°›μ•„ λ™μΌν•œ νƒ€μž…μ˜ κ²°κ³Όλ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.
UnaryOperator<T>
T apply(T t)
ν•˜λ‚˜μ˜ 인자λ₯Ό λ°›μ•„ 같은 νƒ€μž…μ˜ κ²°κ³Όλ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.