λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
Programming/Java

27 Functional Interface (feat. Lambda)

by Dowon Kang 2024. 1. 21.

μžλ°”μ—μ„œ ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ€ μ£Όλ‘œ Java 8μ—μ„œ μΆ”κ°€λœ λžŒλ‹€ ν‘œν˜„식 λ° μŠ€νŠΈλ¦Ό APIλ₯Ό ν™œμš©ν•˜μ—¬ κ΅¬ν˜„λ©λ‹ˆλ‹€. Java 8λΆ€ν„° ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ° κ°œλ…μ΄ λ„μž…λ˜λ©΄μ„œ μ½”λ“œλ₯Ό λ” κ°„κ²°ν•˜κ²Œ μž‘μ„±ν•˜κ³ , λ³‘λ ¬ μ²˜λ¦¬λ₯Ό μ‰½κ²Œ μˆ˜ν–‰ν•  μˆ˜ μžˆκ²Œ λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

 

 

λžŒλ‹€ ν‘œν˜„μ‹μ€ 읡λͺ… ν•¨μˆ˜λ₯Ό μƒμ„±ν•˜λŠ” κ°„κ²°ν•œ 문법을 μ œκ³΅ν•©λ‹ˆλ‹€. μ΄λŠ” ν•¨μˆ˜ν˜• μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•  λ•Œ μœ μš©ν•˜κ²Œ μ‚¬μš©λ©λ‹ˆλ‹€. ν•¨μˆ˜ν˜• μΈν„°νŽ˜μ΄μŠ€λŠ” ν•˜λ‚˜μ˜ 좔상 λ©”μ„œλ“œλ₯Ό 가진 μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ˜λ―Έν•˜λ©°, λžŒλ‹€ ν‘œν˜„μ‹μœΌλ‘œ ν•΄λ‹Ή λ©”μ„œλ“œλ₯Ό κ°„λ‹¨ν•˜κ²Œ κ΅¬ν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μ½”λ“œ μ˜ˆμ‹œ 1

μ½”λ“œ μ˜ˆμ‹œ 2

λžŒλ‹€μ‹μ€ λ©”μ„œλ“œμ˜ 이름과 λ°˜ν™˜νƒ€μž…μ„ μ œκ±°ν•˜κΈ°μ— 읡λͺ… ν•¨μˆ˜λΌ ν•  수 μžˆμ§€λ§Œ 더 μ •ν™•ν•˜κ²ŒλŠ” 읡λͺ… κ°μ²΄μž…λ‹ˆλ‹€. κ·Έλ ‡λ‹€λ©΄ 객체λ₯Ό λ‹€λ£¨κΈ°μœ„ν•œ μ°Έμ‘°λ³€μˆ˜κ°€ ν•„μš”ν•˜μ£ ? μœ„μ— λžŒλ‹€μ‹μ΄ μ—λŸ¬λ₯Ό λ‚˜νƒ€λ‚΄λŠ” μ΄μœ λŠ” λžŒλ‹€μ‹(읡λͺ… 객체)λ₯Ό 닀루기 μœ„ν•œ μ°Έμ‘° λ³€μˆ˜κ°€ μ„€μ •λ˜μ–΄ μžˆμ§€ μ•ŠκΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€. μ—¬κΈ°μ„œ ν•¨μˆ˜ν˜• μΈν„°νŽ˜μ΄μŠ€ κ°œλ…μ΄ λ“±μž₯ν•©λ‹ˆλ‹€.

 


 

 

ν•¨μˆ˜ν˜• μΈν„°νŽ˜μ΄μŠ€λŠ” λ‹¨μΌ μΆ”상 λ©”μ„œλ“œ(SAM, Single Abstract Method)λ₯Ό κ°€μ§€λ©°, @FunctionalInterface μ–΄λ…Έν…Œμ΄μ…˜μ΄ λΆ™μ–΄μžˆλŠ” μΈν„°νŽ˜μ΄μŠ€λ₯Ό λ§ν•©λ‹ˆλ‹€. μ˜ˆλ₯Ό λ“€λ©΄ Runnable, Callable, Comparator λ“±μ΄ μžˆμŠ΅λ‹ˆλ‹€.

 

 

ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ˜ μ΄λŸ¬ν•œ κ°œλ…λ“€μ€ μ½”λ“œλ₯Ό κ°„κ²°ν•˜κ²Œ λ§Œλ“€μ–΄μ£Όκ³ , λ³‘λ ¬ μ²˜λ¦¬μ™€ κ°™μ€ μ„±λŠ₯ ν–₯상을 λ„λͺ¨ν•©λ‹ˆλ‹€. Javaμ—μ„œλŠ” ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ„ κΈ°μ‘΄ μ½”λ“œμ™€ μ‘°ν•©ν•˜μ—¬ μ‚¬μš©ν•  μˆ˜ μžˆμœΌλ©°, Java 8 μ΄ν›„ λ²„μ „μ—μ„œλŠ” μ΄λŸ¬ν•œ κ°œλ…μ΄ λ”μš± ν™•μž₯되고 ν–₯μƒλ˜μ—ˆμŠ΅λ‹ˆλ‹€.

 


 

ν•¨μˆ˜μ™€ λ©”μ„œλ“œμ˜ 차이

  • κ·Όλ³΅μ μœΌλ‘œλŠ” λ™μΌν•˜μ§€λ§Œ ν•¨μˆ˜λŠ” 일반적인 μš©μ–΄μ΄κ³  λ©”μ„œλ“œλŠ” 객체지ν–₯κ°œλ…μ˜ 용이
  • ν•¨μˆ˜λŠ” ν΄λž˜μŠ€μ— 독립적, λ©”μ„œλ“œλŠ” ν΄λž˜μŠ€μ— 쒅속적

 

 


A functional interface is an interface that contains only one abstract method. They can have only one functionality to exhibit. From Java 8 onwards, lambda expressions can be used to represent the instance of a functional interface. A functional interface can have any number of default methods.

 

'Programming > Java' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

28 Stream  (0) 2024.01.21
26 Thread  (1) 2024.01.21
25 Generics  (1) 2024.01.21
24 Enum  (0) 2024.01.21
23 Annotation  (1) 2024.01.21

λŒ“κΈ€