Computer Science/Design Pattern

[Design Pattern] SOLID

dbssk 2023. 9. 14. 08:48

Design Smells

소프트웨어 디자인에서 나타나는 부정적인 특징 또는 증상을 가리키는 개념이다. 

  • Rigidity(경직성)
    • 소프트웨어 시스템이 변경하기 어렵다는 것을 나타낸다.
    • 경직성이 높으면 비교적 간단한 변경 사항에도 큰 작업량이 필요할 수 있다.

  • Fragility(취약성)
    • 시스템의 한 부분을 수정할 때 관련이 없는 다른 부분에 예상치 못한 영향을 미치는 경우를 가리킨다.
    • 이로 인해 수정한 코드 이외에도 다른 부분을 검증해야 하므로 코드의 신뢰성이 떨어진다.
    • 취약성이 높은 코드는 유지보수가 매우 어려워진다.

  • Immobility(부동성)
    • 코드의 재사용이 어렵다는 것을 의미한다.
    • 코드를 분리하여 다른 곳에서 재사용하려고 할 때 어려움이 발생한다. 이로 인해 비슷한 기능을 가진 모듈을 반복해서 구현해야 할 수 있으며 코드 중복이 발생할 수 있다.

  • Viscosity(점착성)
    • 개발 환경이 느리거나 비효율적인 경우를 가리킨다.
    • 개발자가 올바른 방향으로 코드를 작성하기 어렵고, 비효율적인 방식으로 작업해야 하는 상황을 나타낸다.

 

SOLID

Design Smells를 해결하기 위한 다섯 가지 원칙이다.

[출처] https://velog.io/@haero_kim/SOLID-%EC%9B%90%EC%B9%99-%EC%96%B4%EB%A0%B5%EC%A7%80-%EC%95%8A%EB%8B%A4

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

  • 클래스나 모듈이 하나의 책임만 가져야 한다.
  • 클래스는 수정을 위한 단 하나의 이유를 가져야 한다.
  • SRP를 준수하면 코드의 변경이 한 책임을 가진 클래스에 집중되므로 코드 변경에 따른 영향을 최소화할 수 있다.

 

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

  • 기존의 코드를 변경하지 않고 새로운 기능을 추가하거나 수정할 수 있도록 설계해야 한다.

 

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

  • 자식 클래스는 부모 클래스에서 가능한 행위를 수행할 수 있어야 한다.

 

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

  • 사용하지 않는 메서드에 의존하지 말아야 한다.
  • 여러 개의 구체적인 인터페이스가 낫다는 원칙과 관련이 있다.

 

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

  • 의존 관계를 맺을 때 변화하기 쉬운 것보다는 변화하기 어려운 것에 의존해야 한다.
  • 추상 클래스나 인터페이스를 사용하여 구체적인 클래스에 대한 의존성을 줄이는 것과 관련이 있다.
  • 이 원칙을 준수하면 코드가 유연해지고 변경에 대한 저항력이 높아진다.

 

 

 

 

[참] https://gyoogle.dev/blog/design-pattern/SOLID.html