Language/Java

β˜• ν•¨μˆ˜ λ””μŠ€ν¬λ¦½ν„°(Function Descriptor) λž€?

인파_ 2023. 3. 29. 13:39

Function Descriptor

ν•¨μˆ˜ λ””μŠ€ν¬λ¦½ν„°

보톡 μžλ°”μ˜ λžŒλ‹€ ν‘œν˜„μ‹(Lambda Expression)의 μ‚¬μš© μš©λ„λ₯Ό λ‘κ°€μ§€λ‘œ μ •μ˜ν•˜λŠ”λ°, ν•˜λ‚˜λŠ” λžŒλ‹€ ν•¨μˆ˜λ‘œμ„œμ˜ μš©λ„ 그리고 λ‹€λ₯Έ ν•˜λ‚˜λŠ” ν•¨μˆ˜ν˜• μΈν„°νŽ˜μ΄μŠ€μ˜ 좔상 λ©”μ„œλ“œμ˜ 역할을 μ„€λͺ…해놓은 μ‹œκ·Έλ‹ˆμ²˜λ‘œμ„œ 쓰인닀.

그쀑 ν•¨μˆ˜ λ””μŠ€ν¬λ¦½ν„°(Function Descriptor)λŠ” 단어 κ·ΈλŒ€λ‘œ ν•¨μˆ˜κ°€ μ–΄λ–€ μž…λ ₯값을 λ°›κ³  μ–΄λ–€ λ°˜ν™˜κ°’μ„ μ£ΌλŠ”μ§€μ— λŒ€ν•œ μ„€λͺ…을 λžŒλ‹€ ν‘œν˜„μ‹ λ¬Έλ²•μœΌλ‘œ ν‘œν˜„ν•œ 것을 μ˜λ―Έν•œλ‹€κ³  보면 λœλ‹€.

예λ₯Όλ“€μ–΄, () -> void λŠ” νŒŒλΌλ―Έν„° λ¦¬μŠ€νŠΈκ°€ μ—†μœΌλ©° voidλ₯Ό λ°˜ν™˜ν•˜λŠ” ν•¨μˆ˜λ₯Ό μ˜λ―Έν•˜λŠ” λ””μŠ€ν¬λ¦½ν„°λ©°, (int, int) -> double λŠ” λ‘κ°œμ˜ intλ₯Ό νŒŒλΌλ―Έν„°λ‘œ λ°›μ•„ doubleν˜• 자료λ₯Ό λ°˜ν™˜ν•˜λŠ” ν•¨μˆ˜λ₯Ό μ„€λͺ…ν•œλ‹€κ³  보면 λœλ‹€.

이처럼 ν•¨μˆ˜ λ””μŠ€ν¬λ¦½ν„°λŠ” 주둜 java.util.function νŒ¨ν‚€μ§€μ˜ ν•¨μˆ˜ν˜• μΈν„°νŽ˜μ΄μŠ€λ₯Ό λžŒλ‹€μ‹μœΌλ‘œ μ‚¬μš©ν• λ•Œ μ–΄λ–€ 역할을 ν•˜λŠ” ν•¨μˆ˜μΈμ§€ κ°„λž΅ν•˜κ²Œ λ³΄μ—¬μ£ΌλŠ” μ‹œκ·Έλ„ˆμ²˜μ΄λ‹€.

νƒ€μž…μŠ€ν¬λ¦½νŠΈ μ§„μ˜μ—μ„œλŠ” μ•„μ˜ˆ ν•¨μˆ˜ 자체 νƒ€μž…μ„ λžŒλ‹€μ‹(ν™”μ‚΄ν‘œ ν•¨μˆ˜)둜 ν‘œν˜„ν•˜λŠ”λ° 이것도 ν•¨μˆ˜ λ””μŠ€ν¬λ¦½ν„° 일쒅이라고 봐도 λ¬΄λ°©ν•˜λ‹€.
ν•¨μˆ˜ν˜• μΈν„°νŽ˜μ΄μŠ€ ν•¨μˆ˜ λ””μŠ€ν¬λ¦½ν„° (좔상 λ©”μ„œλ“œκ°€ μ–΄λ–€ 역할을 ν•˜λŠ”μ§€ κ°„λž΅ν•˜κ²Œ μ„€λͺ…)
Predicate T -> boolean
Consumer T -> void
Function<T,R> T -> R
Supplier ( ) -> T
BiPredicate<L, R> (L, R) -> boolean
BiConsumer<L, R> (T, U) -> void
BiFunction<T,U,R> (T, U) -> R
Runnable () -> void