Home > CS > 2024 > πŸ’Ύ [CS] SOLID 원칙.

πŸ’Ύ [CS] SOLID 원칙.
CS

πŸ’Ύ [CS] SOLID 원칙.

SOLID 원칙은 객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ—μ„œ μœ μ§€λ³΄μˆ˜μ„±κ³Ό ν™•μž₯성이 쒋은 μ†Œν”„νŠΈμ›¨μ–΄ 섀계λ₯Ό μœ„ν•΄ μ œμ•ˆλœ 5가지 μ€‘μš”ν•œ 섀계 μ›μΉ™μž…λ‹ˆλ‹€.

이 원칙듀을 λ”°λ₯΄λ©΄ μ½”λ“œκ°€ 더 κ΅¬μ‘°ν™”λ˜κ³ , κ΄€λ¦¬ν•˜κΈ° μ‰¬μ›Œμ§€λ©°, μœ μ—°ν•˜κ²Œ 변화에 λŒ€μ²˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

SOLID 원칙은 λ‹€μŒκ³Ό 같은 5가지 μ›μΉ™μ˜ 첫 κΈ€μžλ₯Ό λ”΄ μ•½μ–΄ μž…λ‹ˆλ‹€.

1️⃣ 단일 μ±…μž„ 원칙(SRP: Single Responsibility Principle)

  • μ •μ˜
    • ν΄λž˜μŠ€λŠ” 단 ν•˜λ‚˜μ˜ μ±…μž„λ§Œ κ°€μ Έμ•Ό ν•˜λ©°, ν•˜λ‚˜μ˜ κΈ°λŠ₯만 λ‹΄λ‹Ήν•΄μ•Ό ν•©λ‹ˆλ‹€.
  • μ„€λͺ…
    • 클래슀λ₯Ό λ³€κ²½ν•  μ΄μœ κ°€ ν•˜λ‚˜λΏμ΄μ–΄μ•Ό ν•œλ‹€λŠ” μ˜λ―Έμž…λ‹ˆλ‹€.
    • 즉, ν΄λž˜μŠ€κ°€ ν•œ 가지 역할에 μ§‘μ€‘ν•˜κ³  κ·Έ μ—­ν• κ³Ό κ΄€λ ¨λœ μ±…μž„λ§Œμ„ κ°€μ Έμ•Ό ν•©λ‹ˆλ‹€.
    • μ΄λ ‡κ²Œ ν΄λž˜μŠ€κ°€ λͺ…ν™•ν•˜κ³  μ΄ν•΄ν•˜κΈ° μ‰¬μ›Œμ§€λ©°, μ½”λ“œ μˆ˜μ •μ΄ ν•„μš”ν•  λ•Œ 영ν–₯을 λ°›λŠ” λ²”μœ„κ°€ μž‘μ•„μ§‘λ‹ˆλ‹€.
  • μ˜ˆμ‹œ
    • κ²Œμ‹œκΈ€μ„ κ΄€λ¦¬ν•˜λŠ” ν΄λž˜μŠ€κ°€ κ²Œμ‹œκΈ€ μ €μž₯, μˆ˜μ •, μ‚­μ œ λ“± μ—¬λŸ¬ 가지 역할을 λ§‘λŠ” λŒ€μ‹ , 각 역할을 λ³„λ„μ˜ 클래슀둜 λ‚˜λˆ„λŠ” λ°©μ‹μž…λ‹ˆλ‹€.

2️⃣ 개방-폐쇄 원칙(OCP: Open/Close Principle)

  • μ •μ˜
    • ν΄λž˜μŠ€λŠ” ν™•μž₯에 λŒ€ν•΄μ„œλŠ” μ—΄λ € μžˆμ–΄μ•Ό ν•˜κ³ , μˆ˜μ •μ— λŒ€ν•΄μ„œλŠ” λ‹«ν˜€ μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€.
  • μ„€λͺ…
    • μƒˆλ‘œμš΄ κΈ°λŠ₯을 μΆ”κ°€ν•  λ•Œ 기쑴의 μ½”λ“œλŠ” λ³€κ²½ν•˜μ§€ μ•Šκ³ λ„ μ‹œμŠ€ν…œμ„ ν™•μž₯ν•  수 μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€.
    • 이λ₯Ό μœ„ν•΄ μƒμ†μ΄λ‚˜ μΈν„°νŽ˜μ΄μŠ€λ₯Ό ν™œμš©ν•΄ κΈ°μ‘΄ 클래슀의 κΈ°λŠ₯을 ν™•μž₯ν•˜λŠ” 방식이 ꢌμž₯λ©λ‹ˆλ‹€.
  • μ˜ˆμ‹œ
    • μƒˆλ‘œμš΄ κΈ°λŠ₯이 ν•„μš”ν•  λ•Œ κΈ°μ‘΄ μ½”λ“œλ₯Ό μˆ˜μ •ν•˜μ§€ μ•Šκ³ , ν•΄λ‹Ή κΈ°λŠ₯을 μƒμ†λ°›κ±°λ‚˜ μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•˜λŠ” λ°©μ‹μœΌλ‘œ μΆ”κ°€ν•˜λŠ” 것이 개방-폐쇄 원칙에 λ§žλŠ” μ„€κ³„μž…λ‹ˆλ‹€.

3️⃣ λ¦¬μŠ€μ½”ν”„ μΉ˜ν™˜ 원칙(LSP: Liskov Substitution Principle)

  • μ •μ˜
    • μ„œλΈŒνƒ€μž…(ν•˜μœ„ 클래슀)은 μ–Έμ œλ‚˜ μžμ‹ μ˜ 기반 νƒ€μž…(μƒμœ„ 클래슀)으둜 ꡐ체할 수 μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€.
  • μ„€λͺ…
    • ν•˜μœ„ ν΄λž˜μŠ€λŠ” μƒμœ„ 클래슀의 κ·œμ•½μ„ μ€€μˆ˜ν•΄μ•Ό ν•˜λ©°, μƒμœ„ 클래슀λ₯Ό μ‚¬μš©ν•˜λŠ” μ½”λ“œκ°€ ν•˜μœ„ 클래슀둜 λŒ€μ²΄λ˜λ”λΌλ„ μ •μƒμ μœΌλ‘œ λ™μž‘ν•΄μ•Ό ν•©λ‹ˆλ‹€.
    • μ΄λŠ” λ‹€ν˜•μ„±(polymorphism) κ°œλ…μ„ λ”°λ₯΄λŠ” 객체지ν–₯ μ„€κ³„μ˜ μ€‘μš”ν•œ μ›μΉ™μž…λ‹ˆλ‹€.
  • μ˜ˆμ‹œ
    • λ§Œμ•½ Animalμ΄λΌλŠ” μƒμœ„ ν΄λž˜μŠ€κ°€ 있고, Bird와 FishλΌλŠ” ν•˜μœ„ ν΄λž˜μŠ€κ°€ μžˆλ‹€λ©΄, Bird와 FishλŠ” Animal νƒ€μž…μœΌλ‘œ λŒ€μ²΄λ˜μ–΄λ„ λ¬Έμ œκ°€ μ—†μ–΄μ•Ό ν•©λ‹ˆλ‹€.

4️⃣ μΈν„°νŽ˜μ΄μŠ€ 뢄리 원칙(ISP: Interface Segregation Principle)

  • μ •μ˜
    • ν΄λΌμ΄μ–ΈνŠΈλŠ” μžμ‹ μ΄ μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” λ©”μ„œλ“œμ— μ˜μ‘΄ν•˜μ§€ μ•Šμ•„μ•Ό ν•©λ‹ˆλ‹€.
  • μ„€λͺ…
    • ν•˜λ‚˜μ˜ 큰 μΈν„°νŽ˜μ΄μŠ€λ³΄λ‹€ μ—¬λŸ¬ 개의 μž‘μ€ μΈν„°νŽ˜μ΄μŠ€λ‘œ λΆ„λ¦¬ν•˜λŠ” 것이 더 λ°”λžŒμ§ν•©λ‹ˆλ‹€.
    • μ΄λ ‡κ²Œ ν•˜λ©΄ ν΄λΌμ΄μ–ΈνŠΈλŠ” μžμ‹ μ΄ ν•„μš”λ‘œ ν•˜λŠ” κΈ°λŠ₯만 μ„ νƒμ μœΌλ‘œ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
    • 큰 μΈν„°νŽ˜μ΄μŠ€λŠ” μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” λ©”μ„œλ“œκΉŒμ§€ κ΅¬ν˜„ν•΄μ•Ό ν•˜λ―€λ‘œ μœ μ§€λ³΄μˆ˜κ°€ μ–΄λ €μ›Œμ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€.
  • μ˜ˆμ‹œ
    • λ‹€μ–‘ν•œ μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ” Workable μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ—¬λŸ¬ 개 μž‘μ€ μΈν„°νŽ˜μ΄μŠ€(Runnale, Flyable, Swimmable)둜 λΆ„λ¦¬ν•˜μ—¬ ν•„μš”ν•œ κΈ°λŠ₯만 κ΅¬ν˜„ν•˜λ„λ‘ ν•˜λŠ” 것이 μΈν„°νŽ˜μ΄μŠ€ 뢄리 원칙에 λ§žλŠ” μ„€κ³„μž…λ‹ˆλ‹€.

5️⃣ μ˜μ‘΄μ„± μ—­μ „ 원칙(DIP: Dependaency Inversion Principle)

  • μ •μ˜
    • κ³ μˆ˜μ€€ λͺ¨λ“ˆμ€ μ €μˆ˜μ€€ λͺ¨λ“ˆμ— μ˜μ‘΄ν•΄μ„œλŠ” μ•ˆ 되고, λ‘˜ λ‹€ μΆ”μƒν™”λœ 것에 μ˜μ‘΄ν•΄μ•Ό ν•©λ‹ˆλ‹€.
  • μ„€λͺ…
    • κ³ μˆ˜μ€€ λͺ¨λ“ˆ(λΉ„μ¦ˆλ‹ˆμŠ€ 둜직)은 μ €μˆ˜μ€€ λͺ¨λ“ˆ(μ„ΈλΆ€ κ΅¬ν˜„)κ³Ό μ§μ ‘μ μœΌλ‘œ μ—°κ²°λ˜μ§€ μ•Šκ³ , μΆ”μƒν™”λœ μΈν„°νŽ˜μ΄μŠ€λ₯Ό 톡해 μ„œλ‘œ μƒν˜Έμž‘μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€.
    • 이λ₯Ό 톡해 변화에 μœ μ—°ν•˜κ²Œ λŒ€μ²˜ν•  수 있으며, μ½”λ“œκ°€ 더 ν™•μž₯ κ°€λŠ₯ν•΄μ§‘λ‹ˆλ‹€.
    • λ˜ν•œ, μ½”λ“œμ˜ μž¬μ‚¬μš©μ„±λ„ λ†’μ•„μ§‘λ‹ˆλ‹€.
  • μ˜ˆμ‹œ
    • μ„œλΉ„μŠ€ 계측이 μ €μž₯μ†Œ 계측에 μ˜μ‘΄ν•˜μ§€ μ•Šκ³ , μ €μž₯μ†Œ 계측을 μΆ”μƒν™”ν•œ μΈν„°νŽ˜μ΄μŠ€μ— μ˜μ‘΄ν•˜λ„λ‘ μ„€κ³„ν•˜λŠ” 방식이 μ˜μ‘΄μ„± μ—­μ „ 원칙에 ν•΄λ‹Ήν•©λ‹ˆλ‹€.
    • 이λ₯Ό 톡해 μ €μž₯μ†Œ κ³„μΈ΅μ˜ κ΅¬ν˜„μ²΄λ₯Ό κ΅μ²΄ν•˜λ”λΌλ„ μ„œλΉ„μŠ€ κ³„μΈ΅μ—λŠ” 영ν–₯을 주지 μ•Šκ²Œ λ©λ‹ˆλ‹€.

6️⃣ SOLID μ›μΉ™μ˜ μ€‘μš”μ„±

SOLID 원칙은 μœ μ—°ν•˜κ³  μœ μ§€λ³΄μˆ˜ν•˜κΈ° μ‰¬μš΄ μ‹œμŠ€ν…œμ„ λ§Œλ“€κΈ° μœ„ν•œ κΈ°λ³Έ κ°€μ΄λ“œ 라인을 μ œκ³΅ν•©λ‹ˆλ‹€.
이 원칙듀을 λ”°λ¦„μœΌλ‘œμ¨ μ†Œν”„νŠΈμ›¨μ–΄λŠ” λ‹€μŒκ³Ό 같은 이점을 μ–»μŠ΅λ‹ˆλ‹€.

1. 변화에 μœ μ—°ν•¨.

  • μƒˆλ‘œμš΄ μš”κ΅¬ μ‚¬ν•­μ΄λ‚˜ κΈ°λŠ₯이 μΆ”κ°€λ˜λ”λΌλ„ κΈ°μ‘΄ μ½”λ“œλ₯Ό μ΅œμ†Œν•œμœΌλ‘œ μˆ˜μ •ν•˜κ±°λ‚˜ μ „ν˜€ μˆ˜μ •ν•˜μ§€ μ•Šκ³ λ„ μ‹œμŠ€ν…œμ„ ν™•μž₯ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

2. ν…ŒμŠ€νŠΈ μš©μ΄μ„±.

  • μ½”λ“œμ˜ λͺ¨λ“ˆν™”κ°€ 잘 이루어지면 ν…ŒμŠ€νŠΈ μ½”λ“œ μž‘μ„±μ΄ 더 μ‰¬μ›Œμ§€κ³ , κ°œλ³„μ μΈ μœ λ‹› ν…Œμ΄μŠ€κ°€ κ°€λŠ₯ν•΄μ§‘λ‹ˆλ‹€.

3. μ½”λ“œ μž¬μ‚¬μš©μ„±.

  • SOLID 원칙에 따라 μž‘μ„±λœ μ½”λ“œλŠ” μž¬μ‚¬μš© κ°€λŠ₯성이 λ†’μŠ΅λ‹ˆλ‹€.

4. ν˜‘μ—… μš©μ΄μ„±.

  • μ—¬λŸ¬ κ°œλ°œμžκ°€ ν˜‘μ—…ν•  λ•Œ μ„œλ‘œμ˜ μ½”λ“œλ₯Ό μ΄ν•΄ν•˜κ³  ν™•μž₯ν•˜κΈ°κ°€ 더 μ‰¬μ›Œμ§‘λ‹ˆλ‹€.

이 원칙듀은 객체지ν–₯ μ„€κ³„μ˜ λͺ¨λ²” 사둀λ₯Ό μ œμ‹œν•˜λ©°, μ½”λ“œλ₯Ό 더 효율적으둜 κ΄€λ¦¬ν•˜κ³  ν™•μž₯ν•˜λŠ” 데 큰 도움을 μ€λ‹ˆλ‹€.