[TIL] 2024-12-18_OCP원칙

YuriΒ·2024λ…„ 12μ›” 18일

TIL

λͺ©λ‘ 보기
10/59
post-thumbnail

1. OCP(Open-Closed Principle) 원칙

쒋은 객체 μ§€ν–₯ 섀계 원칙 쀑 ν•˜λ‚˜

  • Open for extension: μƒˆλ‘œμš΄ κΈ°λŠ₯의 μΆ”κ°€λ‚˜ 변경사항이 생겼을 λ•Œ, κΈ°μ‘΄ μ½”λ“œλŠ” ν™•μž₯ν•  수 μžˆμ–΄μ•Ό ν•œλ‹€.
  • Closed for modification: 기쑴의 μ½”λ“œλŠ” μˆ˜μ •λ˜μ§€ μ•Šμ•„μ•Ό ν•œλ‹€.

β‡’ 기쑴의 μ½”λ“œ(ν΄λΌμ΄μ–ΈνŠΈ) μˆ˜μ • 없이 μƒˆλ‘œμš΄ κΈ°λŠ₯을 μΆ”κ°€ν•  수 μžˆλ‹€λŠ” 의미

⭐ OCP원칙과 객체 μ§€ν–₯ μ–Έμ–΄μ˜ 관계

OCP원칙을 λ”°λ₯΄μ§€ μ•ŠλŠ”λ‹€κ³  ν•΄μ„œ 객체 μ§€ν–₯ μ–Έμ–΄λ₯Ό κ΅¬ν˜„μ΄ λΆˆκ°€λŠ₯ν•œ 것은 μ•„λ‹ˆμ§€λ§Œ 이 원칙을 λ¬΄μ‹œν•˜κ³  ν”„λ‘œκ·Έλž˜λ°μ„ ν•œλ‹€λ©΄, 객체 μ§€ν–₯ ν”„λ‘œκ·Έλž˜λ°μ˜ κ°€μž₯ 큰 μž₯점인 μœ μ—°μ„±, μž¬μ‚¬μš©μ„±, μœ μ§€λ³΄μˆ˜μ„± 등을 κ²°μ½” 얻을 수 μ—†λ‹€. λ”°λΌμ„œ 객체 μ§€ν–₯ ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄μ—μ„œ OCP원칙은 λ°˜λ“œμ‹œ μ§€μΌœμ•Όν•  기본적인 원칙이닀.

✨ 객체 μ§€ν–₯ νŠΉμ§• (좔상화, λ‹€ν˜•μ„±) κ³Ό OCP 원칙

  • 좔상화λ₯Ό ν†΅ν•œ OCP 원칙
    객체 μ§€ν–₯ ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄μ—μ„œλŠ” κ³ μ •λ˜κΈ°λŠ” 해도 μ œν•œλ˜μ§€λŠ” μ•Šμ€, κ°€λŠ₯ν•œ λ™μž‘μ˜ λ¬ΆμŒμ„ ν‘œν˜„ν•˜λŠ” 좔상화가 κ°€λŠ₯ν•˜λ‹€. λͺ¨λ“ˆμ€ 좔상화λ₯Ό μ‘°μž‘ν•  수 μžˆλ‹€. 이런 λͺ¨λ“ˆμ€ κ³ μ •λœ 좔상화에 μ˜μ‘΄ν•˜κΈ° λ•Œλ¬Έμ— μˆ˜μ •μ— λ‹«ν˜€ μžˆμ„ 수 있고, λ°˜λŒ€λ‘œ μΆ”μƒν™”μ˜ μƒˆ νŒŒμƒ 클래슀λ₯Ό λ§Œλ“œλŠ” 것을 톡해 ν™•μž₯도 κ°€λŠ₯ν•˜λ‹€.

  • λ‹€ν˜•μ„±μ˜ 본질
    - μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•œ 객체 μΈμŠ€ν„΄μŠ€λ₯Ό μ‹€ν–‰ μ‹œμ μ— μœ μ—°ν•˜κ²Œ λ³€κ²½ν•  수 μžˆλ‹€.
    - λ‹€ν˜•μ„±μ˜ λ³Έμ§ˆμ„ μ΄ν•΄ν•˜λ €λ©΄ ν˜‘λ ₯μ΄λΌλŠ” 객체 μ‚¬μ΄μ˜ κ΄€κ³„μ—μ„œ μ‹œμž‘ν•΄μ•Ό 함
    - ν΄λΌμ΄μ–ΈνŠΈλ₯Ό λ³€κ²½ν•˜μ§€ μ•Šκ³ , μ„œλ²„μ˜ κ΅¬ν˜„ κΈ°λŠ₯을 μœ μ—°ν•˜κ²Œ λ³€κ²½ν•  수 μžˆλ‹€.

2. μ „λž΅ νŒ¨ν„΄(Strategy Pattern)

μ „λž΅ νŒ¨ν„΄μ€ μ‹€ν–‰(λŸ°νƒ€μž„) 쀑에 μ•Œκ³ λ¦¬μ¦˜μ„ 선택할 수 있게 ν•˜λŠ” ν–‰μœ„ μ†Œν”„νŠΈμ›¨μ–΄ λ””μžμΈ νŒ¨ν„΄

  • νŠΉμ •ν•œ κ³„μ—΄μ˜ μ•Œκ³ λ¦¬μ¦˜λ“€μ„ μ •μ˜
  • 각 μ•Œκ³ λ¦¬μ¦˜μ„ μΊ‘μŠν™”
  • 이 μ•Œκ³ λ¦¬μ¦˜λ“€μ„ ν•΄λ‹Ή 계열 μ•ˆμ—μ„œ μƒν˜Έ ꡐ체가 κ°€λŠ₯ν•˜κ²Œ λ§Œλ“ λ‹€.

μ „λž΅μ€ μ•Œκ³ λ¦¬μ¦˜μ„ μ‚¬μš©ν•˜λŠ” ν΄λΌμ΄μ–ΈνŠΈμ™€λŠ” λ…λ¦½μ μœΌλ‘œ λ‹€μ–‘ν•˜κ²Œ λ§Œλ“ λ‹€. μ „λž΅μ€ μœ μ—°ν•˜κ³  μž¬μ‚¬μš© κ°€λŠ₯ν•œ 객체 μ§€ν–₯ μ†Œν”„νŠΈμ›¨μ–΄λ₯Ό μ–΄λ–»κ²Œ μ„€κ³„ν•˜λŠ”μ§€ κΈ°μˆ ν•˜κΈ° μœ„ν•΄ λ””μžμΈ νŒ¨ν„΄μ˜ κ°œλ…μ„ λ³΄κΈ‰μ‹œν‚¨ λ””μžμΈ νŒ¨ν„΄μ΄λΌλŠ” 영ν–₯λ ₯ μžˆλŠ” 책에 ν¬ν•¨λœ νŒ¨ν„΄λ“€ κ°€μš΄λ° ν•˜λ‚˜μ΄λ‹€.

UML 클래슀 및 μ‹œν€€μŠ€ λ‹€μ΄μ–΄κ·Έλž¨

profile
μ•ˆλ…•ν•˜μ„Έμš” :)

0개의 λŒ“κΈ€