관리 메뉴

안까먹을라고 쓰는 블로그

SOLID 원칙이란? 본문

Language

SOLID 원칙이란?

YawnsDuzin 2025. 4. 8. 16:11

 

반응형

아래의 내용은 Perplexity에서 아래의 프롬프트로 문의하여 조회한 내용입니다.

SOLID 원칙이 뭔지 알려줘

 

 


 

SOLID 원칙은 객체 지향 프로그래밍(OOP)에서 소프트웨어 설계를 더 유연하고 유지보수하기 쉽게 만들기 위한 다섯 가지 핵심 원칙을 나타냅니다. 이 원칙들은 로버트 C. 마틴(Uncle Bob)에 의해 소개되었으며, 각각의 약자는 다음을 의미합니다:

1. 단일 책임 원칙 (Single Responsibility Principle, SRP)

  • 정의: 클래스는 단 하나의 책임만 가져야 하며, 변경 사유도 하나여야 합니다.
  • 목적: 각 클래스가 하나의 역할만 수행하도록 설계하여 코드의 응집도를 높이고, 유지보수를 용이하게 합니다.
  • 예시
class UserManager {
    public void CreateUser(string name) { /* 사용자 생성 로직 */ }
}

class Logger {
    public void Log(string message) { /* 로그 출력 로직 */ }
}

2. 개방-폐쇄 원칙 (Open/Closed Principle, OCP)

  • 정의: 소프트웨어 구성 요소는 확장에는 열려 있어야 하고, 수정에는 닫혀 있어야 합니다.
  • 목적: 기존 코드를 수정하지 않고도 새로운 기능을 추가할 수 있도록 설계합니다.
  • 예시
interface PaymentMethod {
    void Pay(decimal amount);
}

class CreditCardPayment : PaymentMethod {
    public void Pay(decimal amount) { /* 신용카드 결제 로직 */ }
}

class PayPalPayment : PaymentMethod {
    public void Pay(decimal amount) { /* PayPal 결제 로직 */ }
}

3. 리스코프 치환 원칙 (Liskov Substitution Principle, LSP)

  • 정의: 하위 클래스는 상위 클래스의 기능을 대체할 수 있어야 하며, 프로그램의 동작에 영향을 주지 않아야 합니다.
  • 목적: 상속 관계에서 일관성을 유지하고, 다형성을 올바르게 활용합니다.
  • 예시
class Bird {
    public virtual void Fly() { /* 새가 날다 */ }
}

class Sparrow : Bird { /* 참새도 날 수 있음 */ }

class Penguin : Bird {
    public override void Fly() { throw new NotSupportedException(); } // LSP 위반
}

4. 인터페이스 분리 원칙 (Interface Segregation Principle, ISP)

  • 정의: 클라이언트는 자신이 사용하지 않는 메서드에 의존하지 않아야 합니다.
  • 목적: 인터페이스를 작고 구체적으로 나눠 불필요한 의존성을 줄입니다.
  • 예시
interface IPrinter {
    void Print();
}

interface IScanner {
    void Scan();
}

class MultiFunctionPrinter : IPrinter, IScanner {
    public void Print() { /* 출력 로직 */ }
    public void Scan() { /* 스캔 로직 */ }
}

class SimplePrinter : IPrinter {
    public void Print() { /* 출력 로직 */ }
}

5. 의존 역전 원칙 (Dependency Inversion Principle, DIP)

  • 정의: 고수준 모듈은 저수준 모듈에 의존해서는 안 되며, 둘 다 추상화에 의존해야 합니다.
  • 목적: 구체적인 구현이 아닌 추상화에 의존하도록 설계하여 유연성을 높입니다.
  • 예시
interface IMessageSender {
    void SendMessage(string message);
}

class EmailSender : IMessageSender {
    public void SendMessage(string message) { /* 이메일 전송 로직 */ }
}

class NotificationService {
    private readonly IMessageSender _messageSender;

    public NotificationService(IMessageSender messageSender) {
        _messageSender = messageSender;
    }

    public void Notify(string message) {
        _messageSender.SendMessage(message);
    }
}

// 사용
var emailSender = new EmailSender();
var notificationService = new NotificationService(emailSender);

SOLID 원칙의 장점

  1. 코드 재사용성 증가
  2. 유지보수 비용 감소
  3. 확장성과 유연성 향상
  4. 결합도 감소 및 응집도 증가

SOLID 원칙을 잘 이해하고 적용하면 더 나은 소프트웨어 설계를 실현할 수 있습니다.

 

끝~

 

반응형

'Language' 카테고리의 다른 글

[C#] 디자인 패턴  (0) 2025.03.24
개발 프리 준비  (0) 2022.03.13
개발 프리 관련  (0) 2022.03.11
[Tip] 프로그램 소스코드를 공개하는 사이트 모음집  (0) 2022.03.07
FLEXGRID 참고자료  (0) 2022.03.02
Comments