λ‚˜μ˜ λͺ¨μ–‘

014 | Java - Polymorphism, Abstraction λ³Έλ¬Έ

SEB/TIL

014 | Java - Polymorphism, Abstraction

kexon 2022. 7. 12. 20:02

πŸ’™ λ‹€ν˜•μ„±

🀍 λ‹€ν˜•μ„±(Polymorphism)

더보기
  • ν•˜λ‚˜μ˜ 객체가 μ—¬λŸ¬ κ°€μ§€ ν˜•νƒœλ₯Ό κ°€μ§ˆ 수 μžˆλŠ” λŠ₯λ ₯
  • ν•œ νƒ€μž…μ˜ μ°Έμ‘°λ³€μˆ˜λ‘œ μ—¬λŸ¬ 객체 μ°Έμ‘° κ°€λŠ₯γ…Š
  • ⇒ μƒμœ„ν΄λž˜μŠ€ νƒ€μž…μ˜ μ°Έμ‘°λ³€μˆ˜λ‘œ ν•˜μœ„ν΄λž˜μŠ€ 객체 μ°Έμ‘°

🀍 μ°Έμ‘°λ³€μˆ˜μ˜ νƒ€μž… λ³€ν™˜

더보기
  • μ‚¬μš©ν•  수 μžˆλŠ” λ©€λ²„μ˜ 개수λ₯Ό μ‘°μ ˆν•˜λŠ” 것
  • νƒ€μž… λ³€ν™˜μ„ μœ„ν•œ 쑰건
    • μ„œλ‘œ 상속 관계에 μžˆλŠ” ν΄λž˜μŠ€λ“€ μ‚¬μ΄μ—λ§Œ νƒ€μž…λ³€ν™˜ κ°€λŠ₯
    • μ—…μΊμŠ€νŒ…
      • ν•˜μœ„ 클래슀 νƒ€μž… -> μƒμœ„ 클래슀 νƒ€μž… λ³€ν™˜
      • ν˜•λ³€ν™˜ μ—°μ‚°μž(κ΄„ν˜Έ) μƒλž΅ κ°€λŠ₯(κΈ°λŠ₯이 μ€„μ–΄λ“€μ–΄μ„œ)
    • λ‹€μš΄μΊμŠ€νŒ…
      • μƒμœ„ 클래슀 νƒ€μž… -> ν•˜μœ„ 클래슀 νƒ€μž… λ³€ν™˜
      • ν˜•λ³€ν™˜ μ—°μ‚°μž(κ΄„ν˜Έ) λ°˜λ“œμ‹œ λͺ…μ‹œ

🀍 instanceof μ—°μ‚°μž

더보기
  • μΊμŠ€νŒ… κ°€λŠ₯ μ—¬λΆ€ νŒλ‹¨
    • 객체λ₯Ό μ–΄λ–€ μƒμ„±μžλ‘œ λ§Œλ“€μ—ˆλŠ”μ§€
    • 클래슀 사이 상속관계가 μ‘΄μž¬ν•˜λŠ”μ§€
  • μΊμŠ€νŒ…(μ°Έμ‘°λ³€μˆ˜μ˜ νƒ€μž… λ³€ν™˜) κ°€λŠ₯ μ—¬λΆ€λ₯Ό boolean νƒ€μž…μœΌλ‘œ 확인
    • true: κ²€μ‚¬ν•œ νƒ€μž…μœΌλ‘œ νƒ€μž… λ³€ν™˜ κ°€λŠ₯
    • false: νƒ€μž… λ³€ν™˜ λΆˆκ°€λŠ₯
  • 주둜 쑰건문에 μ‚¬μš©
μ°Έμ‘°λ³€μˆ˜ instanceof νƒ€μž…

 

πŸ’™ 좔상화

🀍 좔상화(Abstraction)

더보기
  • 좔상: 곡톡성과 λ³Έμ§ˆμ„ λͺ¨μ•„ μΆ”μΆœν•˜λŠ” 것
  • μžλ°”μ—μ„œμ˜ 좔상: 객체의 곡톡적인 속성과 κΈ°λŠ₯을 μΆ”μΆœν•˜μ—¬ μ •μ˜ν•˜λŠ” 것
  • 좔상화: 클래슀 κ°„ 곡톡적인 속성을 μ°Ύμ•„λ‚΄ μƒμœ„ 클래슀λ₯Ό λ§Œλ“€μ–΄ λ‚΄λŠ” 것
  • μž₯점
    • μ½”λ“œ 쀑볡 제거
    • 효율적인 클래슀 κ°„ 관계 μ„€μ • κ°€λŠ₯
    • μœ μ§€λ³΄μˆ˜ 용이
  • 좔상화 κ΅¬ν˜„
    • μΆ”μƒν΄λž˜μŠ€ ⇒ λ―Έμ™„μ„± 섀계도
      • μΆ”μƒλ©”μ„œλ“œλ₯Ό 포함
    • μΈν„°νŽ˜μ΄μŠ€ ⇒ λ°‘κ·Έλ¦Ό

🀍 abstract μ œμ–΄μž

더보기
  • abstract: λ―Έμ™„μ„±
    • ν΄λž˜μŠ€μ™€ λ©”μ„œλ“œλ₯Ό ν˜•μš©ν•˜λŠ” ν‚€μ›Œλ“œλ‘œ μ‚¬μš©λ˜λŠ” 기타 μ œμ–΄μž
    • abstract method: 좔상(λ―Έμ™„μ„±) λ©”μ„œλ“œ
    • abstract class: 좔상(λ―Έμ™„μ„±) 클래슀
  • μ–΄λ–€ ν΄λž˜μŠ€μ— 좔상 λ©”μ„œλ“œκ°€ ν¬ν•¨λ˜μ–΄ μžˆλŠ” 경우 ν•΄λ‹Ή ν΄λž˜μŠ€λŠ” μžλ™μœΌλ‘œ 좔상 ν΄λž˜μŠ€κ°€ 됨

🀍 μΆ”μƒν΄λž˜μŠ€

더보기
  • λ©”μ„œλ“œ λ°”λ””κ°€ μ„ μ–Έλ˜μ–΄ μžˆμ§€ μ•Šμ€ 좔상 λ©”μ„œλ“œλ₯Ό ν¬ν•¨ν•˜λŠ” 미완성섀계도
  • 객체 생성 λΆˆκ°€λŠ₯ ⇒ ꡬ쑰가 λ―Έμ™„μ„±μ΄μ–΄μ„œ
  • λ―Έμ™„μ„± 클래슀λ₯Ό λ§Œλ“œλŠ” 이유
    • 상속 κ΄€κ³„μ—μ„œ μƒˆλ‘œμš΄ 클래슀λ₯Ό μž‘μ„±ν•˜λŠ”λ° 유용
      • λ©”μ„œλ“œ λ‚΄μš©μ΄ μƒμ†λ°›λŠ” ν΄λž˜μŠ€μ— 따라 달라지기 λ•Œλ¬Έμ—⇒ 상황 변화에 μœ μ—°ν•œ λŒ€μ‘ κ°€λŠ₯
      • μƒμœ„ 클래슀 → μ„ μ–ΈλΆ€λ§Œ μž‘μ„± / κ΅¬ν˜„: μƒμ†λ°›λŠ” ν•˜μœ„ 클래슀
      • μ˜€λ²„λΌμ΄λ”©μ„ 톡해 μΆ”μƒν΄λž˜μŠ€λ‘œλΆ€ν„° 상속받은 좔상 λ©”μ„œλ“œμ˜ λ‚΄μš©μ„ κ΅¬ν˜„ν•˜μ—¬ λ©”μ„œλ“œλ₯Ό μ™„μ„±μ‹œν‚¬ 수 있고, μ™„μ„±λœ 클래슀λ₯Ό 기반으둜 객체 생성 κ°€λŠ₯

🀍 final ν‚€μ›Œλ“œ

더보기
  • final은 ν•„λ“œ, μ§€μ—­λ³€μˆ˜, 클래슀 μ•žμ— μœ„μΉ˜ κ°€λŠ₯ν•˜λ©°, μœ„μΉ˜μ— 따라 κ·Έ μ˜λ―Έκ°€ 달라짐
  • λ³€κ²½/ν™•μž₯ λΆˆκ°€

🀍 μΈν„°νŽ˜μ΄μŠ€

더보기
  • μΆ”μƒλ©”μ„œλ“œμ˜ μ§‘ν•©
  • 좔상 λ©”μ„œλ“œμ™€ μƒμˆ˜λ§Œ λ©€λ²„λ‘œ κ°€μ§ˆ 수 있기 λ•Œλ¬Έμ— 좔상화 정도가 더 λ†’μŒ
  • μΆ”μƒν΄λž˜μŠ€ ⇒ 미완성섀계도 / μΈν„°νŽ˜μ΄μŠ€ ⇒ λ°‘κ·Έλ¦Ό, 깑톡()?

μΈν„°νŽ˜μ΄μŠ€ κΈ°λ³Έ ꡬ쑰

  • ν‚€μ›Œλ“œ: interface
  • λ‚΄λΆ€μ˜ λͺ¨λ“  ν•„λ“œκ°€ public static final둜 μ •μ˜ (μƒλž΅ κ°€λŠ₯)
  • static, default λ©”μ„œλ“œ μ΄μ™Έμ˜ λͺ¨λ“  λ©”μ„œλ“œκ°€ public abstract둜 μ •μ˜ (μƒλž΅ κ°€λŠ₯)

μΈν„°νŽ˜μ΄μŠ€ κ΅¬ν˜„

  • ν‚€μ›Œλ“œ: implements
class 클래슀λͺ… implements μΈν„°νŽ˜μ΄μŠ€λͺ… {
	// μΈν„°νŽ˜μ΄μŠ€μ— μ •μ˜λœ λͺ¨λ“  μΆ”μƒλ©”μ„œλ“œ κ΅¬ν˜„
}
  • νŠΉμ • μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•œ ν΄λž˜μŠ€λŠ” ν•΄λ‹Ή μΈν„°νŽ˜μ΄μŠ€μ— μ •μ˜λœ λͺ¨λ“  좔상 λ©”μ„œλ“œλ₯Ό κ΅¬ν˜„ν•΄μ•Ό 함
  • μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•œλ‹€λŠ” 것: κ·Έ μΈν„°νŽ˜μ΄μŠ€κ°€ κ°€μ§„ λͺ¨λ“  좔상 λ©”μ„œλ“œλ“€μ„ ν•΄λ‹Ή 클래슀 λ‚΄μ—μ„œ μ˜€λ²„λΌμ΄λ”©ν•˜μ—¬ λ°”λ””λ₯Ό μ™„μ„±ν•œλ‹€λŠ” 것

μΈν„°νŽ˜μ΄μŠ€μ˜ 닀쀑 κ΅¬ν˜„

  • μΈν„°νŽ˜μ΄μŠ€λŠ” μ—¬λŸ¬ 개의 μΈν„°νŽ˜μ΄μŠ€ κ΅¬ν˜„ κ°€λŠ₯
    • but, 상속은 μΈν„°νŽ˜μ΄μŠ€λ§Œ κ°€λŠ₯, 졜고 쑰상 μ—†μŒ
    class ExampleClass implements ExampleInterface1, ExampleInterface2, ExampleInterface3 { }
    

μΈν„°νŽ˜μ΄μŠ€μ˜ μž₯점

  • μ—­ν• κ³Ό κ΅¬ν˜„μ„ λΆ„λ¦¬μ‹œμΌœ λ³΅μž‘ν•œ κ΅¬ν˜„ λ‚΄μš©/λ³€κ²½κ³Ό 상관없이 μ‚¬μš© κ°€λŠ₯

πŸ’œ μ˜€λŠ˜μ˜ 생각 쑰각λͺ¨μŒ

  • μ˜€μ „ ν•™μŠ΅μ‹œκ°„μ— 곡뢀 μ—΄μ‹¬νžˆ μ•ˆν–ˆλ˜ 것 λ°˜μ„±ν•˜μž! 이해가 μ•ˆλ˜λ‹ˆκΉŒ 계속 λ”΄μƒκ°ν•˜λŠ”κ±°λΌκ³  ν•‘κ³„λŒ€μ§€λ§μž!!!
  • λ„€νŠΈμ›Œν¬ 연결이 계속 λΆˆμ•ˆμ •ν•˜λ‹€. 같은 μ§‘ μ‚¬λŠ” λ˜‘κ°™μ€ λΈŒλžœλ“œ μ»΄ν“¨ν„°λŠ” 아무 이상 μ—†λŠ”λ° μ™œ λ‚΄κΊΌλ§Œ 그럴까... λ„ˆλ„ 객체지ν–₯λ•Œλ¬Έμ— νž˜λ“œλ‹ˆ??!😭😭
  • 라이브 μ„Έμ…˜μ—μ„œ 객체지ν–₯ 심화λ₯Ό κ³΅λΆ€ν•˜λ©΄μ„œ λΉ„μŠ·ν•œ 썰을 많이 풀거라고 ν•˜μ…¨λŠ”λ°, 그게 계속 refreshλ₯Ό ν•˜κ²Œ ν•΄μ€€λ‹€. λ‚˜μ€‘μ— λ”°λ‘œ 정리해놓은 것을 λ³Ό λ•Œ λΉ„μœ ν•΄μ£Όμ‹  것듀 보면 μž¬λ°ŒκΈ°λ„ ν•˜κ³ ~ 적어도 거뢀감은 μ—†μ–΄μ§€λŠ” 건 기뢄탓인가 🀣

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

016 | Java - Generics, Collection Framework  (2) 2022.07.15
015 | Java  (0) 2022.07.13
013 | Java - Inheritance, Encapsulation  (2) 2022.07.11
012 | Java - constructor, inner class  (0) 2022.07.08
011 | Java - class, object, field, method, static, overloading  (0) 2022.07.07
Comments