CS/Spring

좋은 객체 지향 설계의 5가지 원칙 (SOLID)

leah-only 2025. 5. 26. 15:52

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

  • 한 클래스는 단 하나의 변경 이유만 가져야 한다. 
  • 예시
    • ReportPrinter 클래스가 보고서 생성 + 출력까지 다 하면 SRP 위반
      • 생성은 ReportGenerator, 출력은 ReportPrinter로 분리 

 

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

  • 확장에는 열려있고, 변경에는 닫혀 있어야 한다. 
  • 기존 코드를 건드리지 않고, 기능을 확장할 수 있어야 한다. 
  • 이를 위해 다형성과 추상화(인터페이스)를 활용 
  • 예시
    • 다형성을 사용했더라도 client 코드에서 직접 구현체를 생성한다면 OCP 위반
      • 해결 방법 : 스프링의 DI로 객체 조립 책임을 외부로 분리 

 

LSP, 리스코프 치환 원칙 (Liskov substitution principle)

  • 하위 타입은 상위 타입의 행위를 대체할 수 있다. 
  • 하위 클래스가 상위 클래스의 인터페이스 규약을 깨면 안됨
  • 예시
    • Rectangle을 상속한 Square가 setWidth와 setHeight에서 이상한 동작을 하면 LSP 위반
      • 상속 구조가 적절하지 않다는 신호

 

ISP, 인터페이스 분리 원칙 (Interface segregation principle)

  • 특정 클라이언트를 위한 인터페이스 여러 개가 범용 인터페이스 하나보다 낫다.
  • 즉, 필요한 인터페이스를 분리해서 사용하라는 것. 
  • 클라이언트가 사용하지 않는 기능에 의존하지 않도록 해야 함. 
  • 인터페이스 명확, 대체 가능성 높아진다.
  • 예시
    • Machine 인터페이스에 print(), fax(), scan() 이 함께 있으면, 프린터만 쓰는 클래스도 fax에 의존하게 됨으로 분리가 필요 

 

DIP, 의존 관계 역전 원칙 (Dependency inversion principle)

  • 추상화에 의존해야지, 구체화에 의존하면 안된다.
  • 구현 클래스에 의존하지 말고, 인터페이스에 의존하라는 뜻
  • 즉 역할에 의존해야 한다! 역할(인터페이스)에 의존해야 유연하게 구현체를 변경할 수 있다.

'CS > Spring' 카테고리의 다른 글

Front Controller & DispatcherServlet  (0) 2025.05.26
Spring vs Spring Boot  (0) 2025.05.26
@Autowired  (0) 2025.05.26
Filter vs Interceptor  (0) 2025.05.22
Spring Bean Scope  (0) 2025.05.12