Search

AI3 - 13일차 μ˜€μ „

λΉ λ₯Έ μš”μ•½ 이 νšŒμ˜λŠ” κ³ κΈ‰ Java ν”„λ‘œκ·Έλž˜λ° κ°œλ…, 특히 μ œλ„€λ¦­μŠ€, μ™€μΌλ“œμΉ΄λ“œ 및 ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ— μ΄ˆμ μ„ λ§žμΆ”μ—ˆμŠ΅λ‹ˆλ‹€. 토둠은 λžŒλ‹€ ν‘œν˜„μ‹, λ©”μ„œλ“œ μ°Έμ‘° 및 ν•¨μˆ˜ν˜• μΈν„°νŽ˜μ΄μŠ€λ₯Ό λ‹€λ£¨μ—ˆμœΌλ©° Javaμ—μ„œ ꡬ문, μ‚¬μš© 및 μ‹€μ œ μ‘μš© ν”„λ‘œκ·Έλž¨μ„ μ„€λͺ…ν–ˆμŠ΅λ‹ˆλ‹€. λ°œν‘œμžλ“€μ€ λ˜ν•œ 읡λͺ… ν•¨μˆ˜λ₯Ό νƒμƒ‰ν•˜μ—¬ λ©”μ„œλ“œλ₯Ό λ§€κ°œλ³€μˆ˜λ‘œ μ „λ‹¬ν•˜κ³  λ©”μ„œλ“œμ—μ„œ ν•¨μˆ˜λ₯Ό λ°˜ν™˜ν•˜λŠ” 방법을 λ³΄μ—¬μ£Όμ—ˆμœΌλ©°, κ΅¬ν˜„ 쀑 λ°œμƒν•œ λ¬Έμ œμ™€ 였λ₯˜λ„ ν•΄κ²°ν–ˆμŠ΅λ‹ˆλ‹€.
λ‹€μŒ 단계 μ€‘μš”λ„μ— 따라 μˆœμœ„λ₯Ό λ§€κΉλ‹ˆλ‹€. μ§€μ •λœ μ‚¬λžŒκ³Ό ν•¨κ»˜ λ²ˆν˜Έκ°€ 맀겨진 μž‘μ—… ν•­λͺ©μœΌλ‘œ ν¬λ§·ν•©λ‹ˆλ‹€. μš”μ²­ν•œ μ •ν™•ν•œ ν˜•μ‹μœΌλ‘œ μ œμ‹œν•˜μ‹­μ‹œμ˜€. 일단 μ½˜ν…μΈ λ₯Ό μ œκ³΅ν•˜μ‹œλ©΄, 사양에 따라 μ²˜λ¦¬ν•˜κ² μŠ΅λ‹ˆλ‹€.
μš”μ•½ Java Generics 및 Wildcards에 λŒ€ν•΄ μ„€λͺ…ν•©λ‹ˆλ‹€. 이 토둠은 Java μ œλ„€λ¦­κ³Ό μ™€μΌλ“œμΉ΄λ“œμ— 쀑점을 λ‘‘λ‹ˆλ‹€. κ°•μ‚¬λŠ” μ§ˆλ¬Έν‘œ 기호둜 ν‘œν˜„λ˜λŠ” μ œλ„€λ¦­ μ™€μΌλ“œμΉ΄λ“œκ°€ μ–΄λ–»κ²Œ ν˜•μ‹ μ‚¬μš©μ— 더 λ§Žμ€ μœ μ—°μ„±μ„ ν—ˆμš©ν•˜λŠ”μ§€ μ„€λͺ…ν•©λ‹ˆλ‹€. μ™€μΌλ“œμΉ΄λ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ μ—¬λŸ¬ μœ ν˜•μ„ μˆ˜μš©ν•˜λŠ” λ©”μ„œλ“œμ™€ 클래슀λ₯Ό λ§Œλ“€ 수 μžˆλŠ” 방법과 'extends' 및 'super' ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ μ΄λŸ¬ν•œ μœ ν˜•μ— μƒν•œμ„ κ³Ό ν•˜ν•œμ„ μ„ μ„€μ •ν•˜λŠ” 방법을 λ³΄μ—¬μ€λ‹ˆλ‹€. κ°•μ‚¬λŠ” λ˜ν•œ μ™€μΌλ“œμΉ΄λ“œλ₯Ό Collection Framework와 μ‚¬μš©μž μ •μ˜ ν΄λž˜μŠ€μ—μ„œ μ‚¬μš©ν•˜λŠ” 것을 ν¬ν•¨ν•˜μ—¬ μ‹€μ œμ— μ μš©ν•˜λŠ” 방법에 λŒ€ν•œ 예제λ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€.

ν”„λ‘œκ·Έλž˜λ° κ°œλ…μ— λŒ€ν•œ 뢈일치된 ν† λ‘ 

이 토둠은 λͺ…ν™•ν•œ 초점 없이 λ‹€μ–‘ν•œ 주제λ₯Ό λ‹€λ£Ήλ‹ˆλ‹€. μ™€μΌλ“œμΉ΄λ“œμ™€ ν•¨μˆ˜μ™€ 같은 ν”„λ‘œκ·Έλž˜λ° κ°œλ…μ„ 닀루며, BoxWildCard에 λŒ€ν•΄ μ–ΈκΈ‰ν•˜κ³  μ„ΈνŠΈ κ°„ μš”μ†Œλ₯Ό λΉ„κ΅ν•©λ‹ˆλ‹€. SM μ—”ν„°ν…ŒμΈλ¨ΌνŠΈμ™€ FXλΌλŠ” 걸그룹에 λŒ€ν•œ κ°„λž΅ν•œ 언급도 μžˆμŠ΅λ‹ˆλ‹€. λŒ€ν™”λŠ” λΆ„λ¦¬λ˜μ–΄ 있으며 μΌκ΄€λœ μ˜μ‚¬ κ²°μ •μ΄λ‚˜ 행동 ν•­λͺ©μ΄ λΆ€μ‘±ν•©λ‹ˆλ‹€.

Java의 κΈ°λŠ₯ ν”„λ‘œκ·Έλž˜λ° κ°œμš”

νšŒμ˜μ—μ„œ AlohaλŠ” ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ˜ κ°œλ…κ³Ό Javaμ—μ„œμ˜ μ‘μš©μ— λŒ€ν•΄ λ…Όμ˜ν–ˆμŠ΅λ‹ˆλ‹€. κ·ΈλŠ” ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ΄ 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ°κ³Ό 달리 ν•¨μˆ˜λ₯Ό μ€‘μ‹¬μœΌλ‘œ 이루어진닀고 μ„€λͺ…ν–ˆμŠ΅λ‹ˆλ‹€. κ·ΈλŠ” 읡λͺ… ν•¨μˆ˜λ₯Ό 더 κ°„κ²°ν•˜κ²Œ μ •μ˜ν•˜λŠ” 기술인 lambda ν•¨μˆ˜μ˜ κ°œλ…μ„ μ†Œκ°œν–ˆμŠ΅λ‹ˆλ‹€. AlohaλŠ” λ˜ν•œ "Function" νŒ¨ν‚€μ§€μ™€ "Functional Interface" 클래슀λ₯Ό μ‚¬μš©ν•˜μ—¬ Javaμ—μ„œ ν•¨μˆ˜ ν”„λ‘œκ·Έλž˜λ°μ„ μ§€μ›ν•˜λŠ” 방법에 λŒ€ν•΄ μ„€λͺ…ν–ˆμŠ΅λ‹ˆλ‹€. κ·ΈλŠ” ν•¨μˆ˜ ν”„λ‘œκ·Έλž˜λ°μ΄ κ°μ²΄λ‚˜ λ©”μ„œλ“œκ°€ μ•„λ‹ˆλΌ, ν•¨μˆ˜λ₯Ό μ •μ˜ν•˜κ³  데이터에 μ μš©ν•˜μ—¬ μ›ν•˜λŠ” κ²°κ³Όλ₯Ό μ–»λŠ” 것이라고 κ°•μ‘°ν–ˆμŠ΅λ‹ˆλ‹€.

Java Lambda ν‘œν˜„μ‹ 및 λ©”μ„œλ“œ μ°Έμ‘°

λ°œν‘œμžλŠ” Javaμ—μ„œ λžŒλ‹€ ν‘œν˜„μ‹κ³Ό λ©”μ„œλ“œ 참쑰의 ꡬ문과 μ‚¬μš©λ²•μ„ μ„€λͺ…ν•©λ‹ˆλ‹€. 단일 및 닀쀑 맀개 λ³€μˆ˜λ‘œ λžŒλ‹€ ν‘œν˜„μ‹μ„ μž‘μ„±ν•˜λŠ” 방법, νŠΉμ • 경우 κ΄„ν˜Έλ₯Ό μƒλž΅ν•˜κ³  λ°˜ν™˜ λ¬Έμž₯을 μ‚¬μš©ν•˜λŠ” 방법, 그리고 μƒμ„±μžμ™€ κΈ°μ‘΄ λ©”μ„œλ“œμ— λŒ€ν•œ λ©”μ„œλ“œ μ°Έμ‘°λ₯Ό μ‚¬μš©ν•˜λŠ” 방법을 λ‹€λ£Ήλ‹ˆλ‹€. λ°œν‘œμžλŠ” λ˜ν•œ Supplier 및 Functionκ³Ό 같은 κΈ°λŠ₯ μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ‚¬μš©ν•˜λŠ” 방법을 보여주고 μƒμ„±μž μ°Έμ‘°λ₯Ό μ‚¬μš©ν•˜μ—¬ 객체λ₯Ό λ§Œλ“œλŠ” 예제λ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€.

Java ν•¨μˆ˜ μΈν„°νŽ˜μ΄μŠ€μ™€ Lambda

이 νŠΈλžœμŠ€ν¬λ¦½νŠΈλŠ” Java의 ν•¨μˆ˜ μΈν„°νŽ˜μ΄μŠ€μ™€ λžŒλ‹€ ν‘œν˜„μ‹μ— λŒ€ν•΄ μ„€λͺ…ν•©λ‹ˆλ‹€. ν•¨μˆ˜ μΈν„°νŽ˜μ΄μŠ€λŠ” @FunctionalInterface둜 주석할 수 μžˆλŠ” 단일 좔상 λ©”μ„œλ“œλ₯Ό 가진 μΈν„°νŽ˜μ΄μŠ€μž„μ„ μ„€λͺ…ν•©λ‹ˆλ‹€. λ°œν‘œμžλŠ” λžŒλ‹€ ν‘œν˜„μ‹μ„ λ§Œλ“€κ³  μ‚¬μš©ν•˜λŠ” 방법을 보여 μ£Όλ©° λ©”μ„œλ“œ μ°Έμ‘°λ₯Ό ν¬ν•¨ν•˜μ—¬ 이λ₯Ό λ‹¨μˆœν™”ν•˜λŠ” λ‹€μ–‘ν•œ 방법을 λ³΄μ—¬μ€λ‹ˆλ‹€. λ˜ν•œ μƒμ„±μž 참쑰와 Java Stream API의 κΈ°λ³Έ 사항을 λ‹€λ£Ήλ‹ˆλ‹€. ν† λ‘ μ—λŠ” java.util.function νŒ¨ν‚€μ§€μ—μ„œ μ œκ³΅ν•˜λŠ” κΈ°λŠ₯ μΈν„°νŽ˜μ΄μŠ€, 예λ₯Ό λ“€μ–΄ Supplierλ₯Ό μ‚¬μš©ν•˜λŠ” 방법에 λŒ€ν•œ μ˜ˆμ‹œκ°€ ν¬ν•¨λ©λ‹ˆλ‹€. μ—°μ‚¬λŠ” λžŒλ‹€ ν‘œν˜„μ‹ ꡬ문을 μ΄ν•΄ν•˜κ³  Java ν”„λ‘œκ·Έλž˜λ°μ—μ„œ ν•¨μˆ˜ μΈν„°νŽ˜μ΄μŠ€λ₯Ό 효과적으둜 μ‚¬μš©ν•˜λŠ” 방법을 κ°•μ‘°ν•©λ‹ˆλ‹€.

λ©”μ„œλ“œ 및 μΈν„°νŽ˜μ΄μŠ€ κ΅¬ν˜„μ„ νƒμƒ‰ν•©λ‹ˆλ‹€.

Explore methods and interfaces implementation νšŒμ˜μ—μ„œ ALOHAλŠ” λ‹€μ–‘ν•œ λ©”μ„œλ“œμ™€ μΈν„°νŽ˜μ΄μŠ€μ˜ ꡬ성 및 κ΅¬ν˜„μ— λŒ€ν•΄ λ…Όμ˜ν–ˆμŠ΅λ‹ˆλ‹€. 그듀은 μ œλ„€λ¦­ μ‚¬μš©κ³Ό λ°˜ν™˜ μœ ν˜• 처리λ₯Ό ν¬ν•¨ν•˜μ—¬ μ΄λŸ¬ν•œ λ©”μ„œλ“œλ₯Ό μ •μ˜ν•˜κ³  μ‚¬μš©ν•˜λŠ” λ‹€μ–‘ν•œ μ ‘κ·Ό 방식을 νƒκ΅¬ν–ˆμŠ΅λ‹ˆλ‹€. ALOHAλŠ” λ˜ν•œ λ§€κ°œλ³€μˆ˜λ‚˜ λ°˜ν™˜ μœ ν˜•μ΄ μ—†λŠ” λ©”μ„œλ“œμ™€ 같은 λ‹€μ–‘ν•œ μ‹œλ‚˜λ¦¬μ˜€λ₯Ό μ²˜λ¦¬ν•˜λŠ” 방법을 λ³΄μ—¬μ£Όμ—ˆμŠ΅λ‹ˆλ‹€. 그듀은 μ΄λŸ¬ν•œ λ©”μ„œλ“œμ™€ μΈν„°νŽ˜μ΄μŠ€μ˜ μ‹€μ œ μ μš©μ— λŒ€ν•΄ λ…Όμ˜ν•˜λ©° 결둠을 λ‚΄λ ΈμŠ΅λ‹ˆλ‹€.

κ°’μ˜ ν•© 계산 ν•¨μˆ˜

νšŒμ˜μ—μ„œ ALOHAλŠ” xλΆ€ν„° yκΉŒμ§€μ˜ κ°’λ“€μ˜ 합을 κ³„μ‚°ν•˜λŠ” ν•¨μˆ˜ κ΅¬ν˜„μ— λŒ€ν•΄ λ…Όμ˜ν–ˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ λ©”μ„œλ“œλ₯Ό λ‹€λ₯Έ λ©”μ„œλ“œλ‘œ μ „λ‹¬ν•˜κ³  읡λͺ… ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜λŠ” κ°œλ…λ„ νƒκ΅¬ν–ˆμŠ΅λ‹ˆλ‹€. ALOHAλŠ” 두 숫자의 더 큰 값을 μ°ΎλŠ” ν•¨μˆ˜λ₯Ό λ§Œλ“œλŠ” 방법과 이 ν•¨μˆ˜λ₯Ό λ‹€λ₯Έ λ©”μ„œλ“œλ‘œ μ „λ‹¬ν•˜λŠ” 방법을 λ³΄μ—¬μ£Όμ—ˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ μΈν„°νŽ˜μ΄μŠ€ μ‚¬μš©κ³Ό ν•¨μˆ˜ 전달에 λŒ€ν•΄ λ…Όμ˜ν–ˆμŠ΅λ‹ˆλ‹€. λŒ€ν™”λŠ” ALOHAκ°€ μ½”λ“œ ꡬ쑰와 호좜 μ‹œ ν•¨μˆ˜ μ‹€ν–‰ 방식을 μ„€λͺ…ν•˜λ©΄μ„œ λλ‚¬μŠ΅λ‹ˆλ‹€.

Java ν”„λ‘œκ·Έλž˜λ°μ˜ 읡λͺ… ν•¨μˆ˜

νšŒμ˜μ—μ„œ ALOHAλŠ” Java ν”„λ‘œκ·Έλž˜λ°μ—μ„œ 읡λͺ… ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜λŠ” 방법에 λŒ€ν•΄ λ…Όμ˜ν–ˆμŠ΅λ‹ˆλ‹€. λ©”μ„œλ“œλ₯Ό λ§€κ°œλ³€μˆ˜λ‘œ μ „λ‹¬ν•˜κ³  λ©”μ„œλ“œλ‘œλΆ€ν„° ν•¨μˆ˜λ₯Ό λ°˜ν™˜ν•˜λŠ” 방법을 μ‚΄νŽ΄λ³΄μ•˜μŠ΅λ‹ˆλ‹€. ALOHAλŠ” λ˜ν•œ κ°„κ²°ν•œ μ½”λ“œλ₯Ό μž‘μ„±ν•˜λŠ” 데 κΈ°λŠ₯ μΈν„°νŽ˜μ΄μŠ€μ™€ μ œλ„€λ¦­μ„ μ‚¬μš©ν•˜λŠ” 방법을 μ‹œμ—°ν–ˆμŠ΅λ‹ˆλ‹€. νŒ€μ€ λͺ‡ 가지 였λ₯˜μ™€ 어렀움에 μ§λ©΄ν–ˆμ§€λ§Œ, ν•΄κ²°ν•˜μ—¬ 읡λͺ… ν•¨μˆ˜μ— λŒ€ν•œ 이해λ₯Ό 높일 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€. λŒ€ν™”λŠ” Java ν”„λ‘œκ·Έλž˜λ°μ—μ„œ 읡λͺ… ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜λŠ” 이점에 λŒ€ν•œ ν† λ‘ μœΌλ‘œ λλ‚¬μŠ΅λ‹ˆλ‹€.