[Java] OCP와 DIP

OCP, DIP

객체지ν–₯ 섀계 5λŒ€ 원칙(SOLID) 쀑 OCP와 DIP에 λŒ€ν•΄ μ•Œμ•„λ³΄μž.

OCP(Open Closed Principle) : 개방 폐쇄 원칙

OCP -> 개방 폐쇄 원칙을 ν•œ λ§ˆλ””λ‘œ μ •μ˜ν•˜λ©΄ ν™•μž₯μ—λŠ” κ°œλ°©λ˜μ–΄ μžˆμ–΄μ•Ό ν•˜κ³  λ³€κ²½μ—λŠ” νμ‡„λ˜μ–΄ μžˆμ–΄μ•Ό ν•œλ‹€.λΌλŠ” 원칙이닀.
λͺ¨μˆœμ μœΌλ‘œ λ“€λ¦¬λŠ” λ§μ΄μ§€λ§Œ μ°¨κ·Όμ°¨κ·Ό μ•Œμ•„λ³΄μž.
ν•Έλ“œν°μ˜ μ‚¬μš©μžκ°€ 있고, μ‚¬μš©μžλŠ” 아이폰에 μ˜μ‘΄ν•œλ‹€κ³  μƒκ°ν•΄λ³΄μž.
그러면 μ‚¬μš©μžμ™€ μ•„μ΄ν°μ˜ 의쑴 κ΄€κ³„λŠ” λ‹€μŒκ³Ό 같이 λœλ‹€.

1

μœ„μ™€ 같은 μƒν™©μ—μ„œ μ‚¬μš©μžμ˜ ν•Έλ“œν°μ΄ μ•ˆλ“œλ‘œμ΄λ“œν°μœΌλ‘œ 바뀐닀고 ν•΄λ³΄μž
그러면 μ‚¬μš©μžλŠ” μ•„μ΄ν°μ—μ„œ μ•ˆλ“œλ‘œμ΄λ“œν°μ— λŒ€ν•œ μ‚¬μš©λ²•μ„ λ‹€μ‹œ λ°°μ›Œμ•Ό ν•œλ‹€.
μ• μ΄ˆμ— μ‚¬μš©μžμ—κ²Œ 아이폰과 μ•ˆλ“œλ‘œμ΄λ“œν°μ— λŒ€ν•œ κ³΅ν†΅μ˜ κ°€μ΄λ“œλΌμΈμ΄ 주어지고, 아이폰과 μ•ˆλ“œλ‘œμ΄λ“œν°μ΄ κ·Έ κ°€μ΄λ“œμ— 맞게 μ œμž‘λ˜λ©΄ μ–΄λ–»κ²Œ 될까?
μ‚¬μš©μžκ°€ μ•„μ΄ν°μ—μ„œ λ‹€λ₯Έ κΈ°μ’…μœΌλ‘œ 바꿔도 μ‚¬μš©λ²•μ„ λ‹€μ‹œ 읡힐 ν•„μš”λŠ” μ—†λ‹€.
λ˜ν•œ, 아이폰과 μ•ˆλ“œλ‘œμ΄λ“œν°μ΄ μ•„λ‹Œ λ‹€λ₯Έ νšŒμ‚¬μ˜ 폰도 κ°€μ΄λ“œλΌμΈμ— 맞게 μ œμž‘λœλ‹€λ©΄ μ‚¬μš©μžλŠ” μ‚¬μš©λ²•μ„ λ‹€μ‹œ λ°°μš°μ§€ μ•Šμ•„λ„ μžμ—°μŠ€λŸ½κ²Œ μ‚¬μš©ν•  수 μžˆλ‹€.

2

객체지ν–₯도 이와 κ°™λ‹€.
λ³€κ²½ κ°€λŠ₯성이 μžˆλŠ” 객체λ₯Ό ν΄λΌμ΄μ–ΈνŠΈ μž…μž₯μ—μ„œ κ΅¬ν˜„μ²΄κ°€ μ˜μ‘΄ν•˜λŠ” 게 ν•˜λŠ” λ°©μ‹λ³΄λ‹€λŠ”, μΈν„°νŽ˜μ΄μŠ€λ₯Ό λ§Œλ“€μ–΄μ„œ μ˜μ‘΄ν•˜κ²Œ ν•˜κ³ , κ·Έ μΈν„°νŽ˜μ΄μŠ€λ₯Ό ν™•μž₯ν•΄μ„œ κ΅¬ν˜„μ²΄λ₯Ό λ§Œλ“œλŠ” 방식을 μ‚¬μš©ν•΄μ•Ό ν•œλ‹€.
ν΄λΌμ΄μ–ΈνŠΈκ°€ λ˜λŠ” 객체 μž…μž₯에선 μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ˜μ‘΄ν•˜λ―€λ‘œ, κ΅¬ν˜„μ²΄κ°€ λ°”λ€Œμ–΄λ„ μ½”λ“œλ₯Ό λ”°λ‘œ λ°”κΏ€ ν•„μš”κ°€ μ—†λ‹€. μ΄λ ‡κ²Œ λ³€κ²½ν•  ν•„μš”κ°€ μ—†λŠ” 점을 λ³€κ²½μ—λŠ” νμ‡„λ˜μ–΄ μžˆλ‹€λΌκ³  ν•œλ‹€.
λ˜ν•œ, μƒˆλ‘œμš΄ ν•Έλ“œν°μ΄ μΆ”κ°€λ˜μ–΄λ„ κ°€μ΄λ“œλΌμΈμ„ 지킀면 μ‚¬μš©μžκ°€ μ‚¬μš©λ²•μ„ λ‹€μ‹œ 읡힐 ν•„μš” 없듯이, μΈν„°νŽ˜μ΄μŠ€λ₯Ό ν™•μž₯ν•˜λŠ” κ΅¬ν˜„μ²΄λ₯Ό 무수히 λ§Œλ“€λ”λΌλ„, ν΄λΌμ΄μ–ΈνŠΈ μž…μž₯μ—μ„œλŠ” 변경에 λ‹«ν˜€μžˆλ‹€.
μ΄λŸ¬ν•œ 상황을 ν™•μž₯μ—λŠ” κ°œλ°©λ˜μ–΄ μžˆλ‹€.라고 ν•œλ‹€.
μœ„ 두 사항을 μ€€μˆ˜ν•˜λ©΄μ„œ 객체지ν–₯ 섀계λ₯Ό ν•˜λŠ” 원칙이 OCP(Open Closed Principle) : 개방 폐쇄 원칙이닀.

DIP(Dependency Inversion Principle) : 의쑴 μ—­μ „ 원칙

DIP -> 의쑴 μ—­μ „ 원칙을 ν•œ λ§ˆλ””λ‘œ μ •μ˜ν•˜λ©΄ μƒμœ„ ν΄λž˜μŠ€λŠ” ν•˜μœ„ ν΄λž˜μŠ€μ— μ˜μ‘΄ν•˜λ©΄ μ•ˆλœλ‹€.λΌλŠ” 원칙이닀.
더 ν’€μ–΄μ“°λ©΄ 자주 λ³€ν•˜κ³ , ꡬ체적인 것에 μ˜μ‘΄ν•˜λ©΄ μ•ˆ 되고, 자주 λ³€ν•˜μ§€ μ•Šκ³  좔상적이고 자주 λ³€ν•˜μ§€ μ•ŠλŠ” 것에 μ˜μ‘΄ν•΄μ•Ό λœλ‹€λŠ” 원칙이닀.
DIPλŠ” μœ„μ˜ OCPλ₯Ό μ΄ν•΄ν–ˆλ‹€λ©΄ μˆ˜μ›”ν•˜κ²Œ 생각할 수 μžˆλ‹€.
μœ„μ˜ μ˜ˆμ œμ—μ„œ μ‚¬μš©μžκ°€ 아이폰, μ•ˆλ“œλ‘œμ΄λ“œν°κ³Ό 같이 ꡬ체적이고 자주 λ³€ν•˜λŠ” 것에 μ˜μ‘΄ν•˜λŠ” 것이 μ•„λ‹Œ, κ°€μ΄λ“œλΌμΈμ— μ˜μ‘΄ν–ˆλ‹€.
객체지ν–₯μ—μ„œλ„ ν΄λΌμ΄μ–ΈνŠΈκ°€ μΈν„°νŽ˜μ΄μŠ€μ— μ˜μ‘΄ν•˜λ©΄ μΈν„°νŽ˜μ΄μŠ€ μ•„λž˜μ˜ κ΅¬ν˜„μ²΄κ°€ 변해도 μœ μ§€ λ³΄μˆ˜μ— 쒋은 객체지ν–₯적 μ„€κ³„μ˜ 효과λ₯Ό λˆ„λ¦΄ 수 μžˆλ‹€.
μœ„μ˜ 효율적인 μœ μ§€ 보수λ₯Ό μœ„ν•΄ 객체지ν–₯에선 λ‹€ν˜•μ„±μ„ ν™œμš©ν•΄μ„œ OCP와 DIPλ₯Ό 염두에 두고 μ„€κ³„ν•˜λŠ” 것이 μ€‘μš”ν•˜λ‹€.