μ§€μŒμŒ 2022. 2. 21. 23:22

if-else 문제점

- λ³€κ²½, ν™•μž₯이 될 수둝 μ½”λ“œκ°€ λ³΅μž‘ν•΄μ§„λ‹€.

- μ½”λ“œλ₯Ό μˆ˜μ •ν•˜κ±°λ‚˜ μˆ˜μ •ν•  μœ„μΉ˜λ₯Ό μ°ΎλŠ”λ° 점점 μ˜€λž˜κ±Έλ¦°λ‹€.

- μ‹€μˆ˜λ‘œ μΆ”κ°€ν•˜μ§€μ•Šκ³  λˆ„λ½ν•˜λŠ” 뢀뢄이 생길 κ°€λŠ₯성이 μžˆλ‹€.

즉, μœ μ§€λ³΄μˆ˜κ°€ 점점 μ–΄λ €μ›Œμ§„λ‹€.

 

OCP 개방 폐쇄 원칙

μ†Œν”„νŠΈμ›¨μ–΄μ˜ ꡬ성 μš”μ†Œ(μ»΄ν¬λ„ŒνŠΈ, 클래슀, λͺ¨λ“ˆ, ν•¨μˆ˜)λŠ”

ν™•μž₯에 λŒ€ν•΄μ„œλŠ” κ°œλ°©λ˜μ–΄μ•Όν•˜μ§€λ§Œ, 변경에 λŒ€ν•΄μ„œλŠ” νμ‡„λ˜μ–΄μ•Ό ν•œλ‹€.

기쑴의 μ½”λ“œλ₯Ό λ³€κ²½ν•˜μ§€ μ•ŠμœΌλ©΄μ„œ κΈ°λŠ₯을 μΆ”κ°€ν•  수 μžˆλ„λ‘ 섀계가 λ˜μ–΄μ•Όν•œλ‹€

 

점점 κΈ°λŠ₯을 ν™•μž₯ν•΄ λ‚˜κ°ˆ λ•Œ, 기쑴의 μ½”λ“œλ₯Ό 계속 λ³€κ²½ν•΄μ•Όν•œλ‹€λ©΄ κΈ°λŠ₯의 μΆ”κ°€κ°€ 점점 νž˜λ“€μ–΄μ§€κΈ° λ•Œλ¬Έμ΄λ‹€.  

κΈ°λŠ₯이 μΆ”κ°€, λ³€κ²½λ˜μ–΄λ„ κΈ°μ‘΄ μ½”λ“œλŠ” λ³€κ²½λ˜μ§€ μ•ŠλŠ”λ‹€. (ν™•μž₯이 쉽닀)

 

OCP 적용 방법

1. 상속을 μ΄μš©ν•œ 방법 - ν…œν”Œλ¦Ώ λ©”μ†Œλ“œ νŒ¨ν„΄

κΉ¨μ§€κΈ° μ‰¬μš΄ μƒμœ„ 클래슀 문제

 

 

2. μ»΄ν¬μ§€μ…˜μ„ μ΄μš©ν•œ 방법 - μ „λž΅ νŒ¨ν„΄

μƒμ†λ³΄λ‹€λŠ” μ»΄ν¬μ§€μ…˜μ„ μΆ”μ²œ

1) λ³€κ²½(ν™•μž₯)될 것과 λ³€ν•˜μ§€ μ•Šμ„ 것을 ꡬ뢄 

λ³€κ²½λ˜λŠ” 뢀뢄을 μΈν„°νŽ˜μ΄μŠ€λ‘œ μΆ”μΆœ

2) 이 두 λͺ¨λ“ˆμ΄ λ§Œλ‚˜λŠ” 지점에 μΈν„°νŽ˜μ΄μŠ€ μ •μ˜

μΈν„°νŽ˜μ΄μŠ€μ— μ˜μ‘΄ν•˜λ„λ‘ μž‘μ„±(κΈ°λŠ₯ 변경을 μœ„ν•΄ μ½”λ“œλ₯Ό μˆ˜μ •ν•΄μ•Όν•˜κΈ° λ•Œλ¬Έμ—)

3) κ΅¬ν˜„μ— μ˜μ‘΄ν•˜κΈ°λ³΄λ‹€ μ •μ˜ν•œ μΈν„°νŽ˜μ΄μŠ€μ— μ˜μ‘΄ν•˜λ„λ‘ μ½”λ“œλ₯Ό μž‘μ„±

 

μžκΈ°κ°€ 직접 new μƒμ„±μžλ‘œ μΈμŠ€ν„΄μŠ€λ₯Ό μƒμ„±ν•˜μ§€ μ•Šκ³ , μ™ΈλΆ€μ—μ„œ μΈμŠ€ν„΄μŠ€λ₯Ό λ°›λŠ” 것을 μ˜μ‘΄μ„± μ£Όμž…(Dependency Injection, DI)이라고 ν•œλ‹€.

 

Dependency Injection μ˜μ‘΄μ„± μ£Όμž…
μ†Œν”„νŠΈμ›¨μ–΄ κ°œλ°œμ—μ„œ μ˜μ‘΄μ„± μ£Όμž…μ€ 객체가 μ˜μ‘΄ν•˜λŠ” λ‹€λ₯Έ 객체λ₯Ό λ°›λŠ” 것이닀. 
μ˜μ‘΄μ„± μ£Όμž…μ˜ μ˜λ„λŠ” 객체의 생성과 μ‚¬μš©μ˜ 관심을 λΆ„λ¦¬ν•˜λŠ” 것이닀. → 가독성과 μ½”λ“œ μž¬μ‚¬μš©μ„ λ†’μ—¬μ€€λ‹€.

μ†Œν”„νŠΈμ›¨μ–΄ κ°œλ°œμ—μ„œ μ˜μ‘΄μ„± μ£Όμž…μ€ 객체가 μ˜μ‘΄ν•˜λŠ” λ‹€λ₯Έ 객체λ₯Ό λ°›λŠ” 것이닀. 
μ˜μ‘΄μ„± μ£Όμž…μ˜ μ˜λ„λŠ” 객체의 생성과 μ‚¬μš©μ˜ 관심을 λΆ„λ¦¬ν•˜λŠ” 것이닀. → 가독성과 μ½”λ“œ μž¬μ‚¬μš©μ„ λ†’μ—¬μ€€λ‹€.

μ˜μ‘΄μ„± μ£Όμž…μ˜ 적용 μœ ν˜•
- μƒμ„±μž μ£Όμž… : ν•„μš”ν•œ μ˜μ‘΄μ„±μ„ λͺ¨λ‘ ν¬ν•¨ν•˜λŠ” 클래슀의 μƒμ„±μžλ₯Ό λ§Œλ“€κ³ , κ·Έ μƒμ„±μžλ₯Ό 톡해 μ˜μ‘΄μ„± μ£Όμž…
- setterλ₯Ό ν†΅ν•œ μ£Όμž… : μ˜μ‘΄μ„±μ„ μž…λ ₯λ°›λŠ” setter λ©”μ†Œλ“œλ₯Ό λ§Œλ“€κ³  이λ₯Ό 톡해 μ˜μ‘΄μ„± μ£Όμž…
- μΈν„°νŽ˜μ΄μŠ€λ₯Ό ν†΅ν•œ μ£Όμž… : μ˜μ‘΄μ„±μ„ μ£Όμž…ν•˜λŠ” ν•¨μˆ˜λ₯Ό ν¬ν•¨ν•œ μΈν„°νŽ˜μ΄μŠ€λ₯Ό μž‘μ„±ν•˜κ³  이 μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•˜λ„λ‘ ν•¨μœΌλ‘œμ¨ μ‹€ν–‰ μ‹œμ— μ˜μ‘΄μ„± μ£Όμž…

 

μœ„ν‚€λ°±κ³Ό μ˜μ‘΄μ„± μ£Όμž…

 

OCPλ₯Ό μ€€μˆ˜ν•˜κΈ° μœ„ν•œ λ””μžμΈ νŒ¨ν„΄

μ „λž΅νŒ¨ν„΄

μ „λž΅νŒ¨ν„΄μ΄λž€ 기쑴의 μ½”λ“œ 변경없이 ν–‰μœ„λ₯Ό 자유둭게 λ°”κΏ€ 수 있게 ν•΄μ£ΌλŠ” OCPλ₯Ό μ€€μˆ˜ν•œ λ””μžμΈ νŒ¨ν„΄ 

 

λ””μžμΈ νŒ¨ν„΄μ˜ 꽃

μ „λž΅μ„ μ‰½κ²Œ λ°”κΏ€ 수 μžˆλ„λ‘ ν•΄μ£ΌλŠ” λ””μžμΈ νŒ¨ν„΄

ν–‰μœ„λ₯Ό 클래슀둜 μΊ‘μŠν™”ν•΄ λ™μ μœΌλ‘œ ν–‰μœ„λ₯Ό 자유둭게 λ°”κΏ€ 수 있게 ν•΄μ£ΌλŠ” νŒ¨ν„΄

μƒˆλ‘œμš΄ κΈ°λŠ₯의 μΆ”κ°€κ°€ 기쑴의 μ½”λ“œμ— 영ν–₯을 λ―ΈμΉ˜μ§€ λͺ»ν•˜κ²Œ ν•˜λ―€λ‘œ OCPλ₯Ό 만쑱

 

 

참고자료

 

OCP(Open Closed Principle)μ΄λž€?

 

nesoy.github.io