πŸ’» Computer Science

03. 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ° μž…λ¬Έ - 상속, 의쑴

μ• μ •μ“° 2021. 5. 10. 14:18

상속

 

상속을 ν†΅ν•œ κΈ°λŠ₯ μž¬μ‚¬μš©μ‹œ λ°œμƒν•  수 μžˆλŠ” 단점 

1. μƒμœ„ 클래슀 변경이 어렀움

 - μƒμœ„ 클래슀λ₯Ό 쑰금만 잘λͺ» 변경해도 κ·Έ ν•˜μœ„ ν΄λž˜μŠ€λ“€μ΄ λΉ„μ •μƒμ μœΌλ‘œ μž‘λ™λ  수 있음. ( 계측도λ₯Ό 따라 μ „νŒŒλ¨ )

2. μƒˆλ‘œμš΄ 쑰합이 생길 λ•Œ λ§ˆλ‹€ ν•˜μœ„ ν΄λž˜μŠ€κ°€ μ¦κ°€λœλ‹€. μ–΄λ–€ 클래슀λ₯Ό μƒμ†λ°›λŠ”μ§€λ„ 애맀

3. 상속을 μ˜€μš©ν•  수 μžˆλ‹€. 

 

이와 같은 단점 ν•΄κ²° 방법이 μžˆμ„κΉŒ?

- μ—¬λŸ¬ 객체λ₯Ό λ¬Άμ–΄μ„œ 더 λ³΅μž‘ν•œ κΈ°λŠ₯을 제곡

- 보톡 ν•„λ“œλ‘œ λ‹€λ₯Έ 객체λ₯Ό μ°Έμ‘°ν•˜λŠ” λ°©μ‹μœΌλ‘œ 쑰립, 객체λ₯Ό ν•„μš” μ‹œμ μ— 생성/ꡬ함

 

μƒμ†ν•˜κΈ°μ— μ•žμ„œ 쑰립으둜 ν’€ 수 μ—†λŠ”μ§€ κ²€ν† ν•˜κ³  μ§„μ§œ ν•˜μœ„ νƒ€μž…μΈ κ²½μš°μ—λ§Œ 상속을 μ΄μš©ν•©λ‹ˆλ‹€! (κΈ°λŠ₯ μž¬μ‚¬μš© μ‹œ 쓰지 μ•Šλ„λ‘ 주의!)

쑰건 뢄기일 경우 좔상화, 상속이 μ’‹μŠ΅λ‹ˆλ‹€. -> μ˜λ„κ°€ 잘 λ“œλŸ¬λ‚˜λŠ” 이름 μ‚¬μš©

 

 

의쑴

κΈ°λŠ₯ κ΅¬ν˜„μ„ μœ„ν•΄ λ‹€λ₯Έ ꡬ성 μš”μ†Œλ₯Ό μ‚¬μš©ν•˜λŠ” 것 예) 객체 생성, λ©”μ„œλ“œ 호좜, 데이터 μ‚¬μš©

μ˜μ‘΄μ€ 변경이 μ „νŒŒλ  κ°€λŠ₯성을 μ˜λ―Έν•œλ‹€. μ˜μ‘΄ν•˜λŠ” λŒ€μƒμ΄ λ°”λ€Œλ§Œ κΈ°λŠ₯이 λ°”λ€” κ°€λŠ₯성이 높아진닀.

 

μˆœν™˜μ˜μ‘΄ -> λ³€κ²½ 연쇄 μ „νŒŒ κ°€λŠ₯μ„± -> 클래슀, νŒ¨ν‚€μ§€ λͺ¨λ“ˆ λ“± λͺ¨λ“  μˆ˜μ€€μ—μ„œ μˆœν™˜μ˜€λ₯˜κ°€ λ°œμƒν•˜μ§€ μ•Šλ„λ‘ 해야함.

μ˜μ‘΄ν•˜λŠ” λŒ€μƒμ€ μ μ„μˆ˜λ‘ μ’‹λ‹€. 

쑰립

 - ν•œ ν΄λž˜μŠ€μ—μ„œ λ§Žμ€ κΈ°λŠ₯이 쑴재 ν•  경우 κΈ°λŠ₯λ³„λ‘œ 클래슀λ₯Ό λΆ„λ¦¬ν•˜λ©΄ 의쑴이 쀄어든닀.

   (ν•œ κΈ°λŠ₯을 μˆ˜μ •ν•  λ•Œ λ‹€λ₯Έ κΈ°λŠ₯을 μˆ˜μ •ν•˜μ§€ μ•Šμ•„λ„ λœλ‹€)

 - λͺ‡ 가지 의쑴 λŒ€μƒμ„ 단일 κΈ°λŠ₯으둜 λ¬Άμ–΄μ„œ 의쑴 λŒ€μƒμ„ 쀄일 수 μžˆλŠ”μ§€ ν™•μΈν•œλ‹€.

 

ν•˜μ§€λ§Œ 의쑴 λŒ€μƒ 객체λ₯Ό 직접 μƒμ„±ν•œλ‹€λ©΄ 생성 ν΄λž˜μŠ€κ°€ λ°”λ€Œμ–΄ μ˜μ‘΄ν•˜λŠ” μ½”λ“œλ„ 바뀐닀. 

 

κ·Έλ ‡λ‹€λ©΄ 의쑴 λŒ€μƒ 객체λ₯Ό 직접 μƒμ„±ν•˜μ§€ μ•ŠλŠ” 방법은 뭘까?

- νŒ©ν† λ¦¬, λΉŒλ”

- 의쑴 μ£Όμž…(Dependency Injection)

   - μ™ΈλΆ€μ—μ„œ 의쑴 객체λ₯Ό μ£Όμž…ν•œλ‹€. μƒμ„±μžλ‚˜ λ©”μ„œλ“œλ₯Ό μ΄μš©ν•΄μ„œ μ£Όμž….

      예) SheduleService schSvc = new SheduleService(userRepo);

- μ„œλΉ„μŠ€ λ‘œμΌ€μ΄ν„°

 

의쑴 μ£Όμž…μ΄ μ •ν™•νžˆ 뭐지?

Assembler - 쑰립기가 객체 생성, 의쑴 μ£Όμž…μ„ 처리 -> 예λ₯Ό λ“€μ–΄ μŠ€ν”„λ§ ν”„λ ˆμž„μ›Œν¬

1. 객체λ₯Ό μƒμ„±ν•˜κ³  의쑴 λŒ€μƒμ„ μ£Όμž…ν•˜λŠ” μ½”λ“œλ₯Ό μ„€μ •μœΌλ‘œ μž‘μ„±ν•œλ‹€.

2. κ·Έ μ„€μ •μ½”λ“œλ₯Ό μ΄μš©ν•˜μ—¬ applicationContext λΌλŠ” 쑰립기λ₯Ό μƒμ„±ν•œλ‹€.

3. 쑰립기λ₯Ό μ΄ˆκΈ°ν™”ν•  λ•Œ μ„€μ •νŒŒμΌμ„ μ‹€ν–‰ν•΄ 객체λ₯Ό λ§Œλ“€μ–΄ μ˜μ‘΄μ£Όμž…μ„ λ°œμƒν•œλ‹€. 

 

- μƒμœ„ νƒ€μž…μ„ μ‚¬μš©ν•  경우 의쑴 λŒ€μƒμ΄ λ°”λ€Œλ©΄ 쑰립기(μ„€μ •) 만 λ³€κ²½ν•˜λ©΄ 됨.

- μ˜μ‘΄ν•˜λŠ” 객체 없이 λŒ€μ—­ 객체λ₯Ό μ‚¬μš©ν•΄μ„œ ν…ŒμŠ€νŠΈ κ°€λŠ₯

 

 

λ°˜μ‘ν˜•