SOLID는 다섯 가지 원칙에 대한 약자이다.
단일 책임 원칙 Single Responsiblity Principle (SRP)
한 클래스 하나의 책임(기능).
한 클래스에 여러 가지 기능들이 쏠리게 되면 내부 코드를 수정할 때 다른 코드들도 함께 영향을 받을 확률이 높아진다. 즉, 결합도가 올라가게 되어 유지보수가 어려워진다.
그렇기 때문에 책임 단위로 캡슐화시켜 코드의 응집도는 높이고 결합도는 낮추어야한다.
개방-폐쇄 원칙 Open Closed Principle (OCP)
수정에는 닫혀있고, 확장에는 열려있고.
이를 위해서는 어떤 부분이 바뀌는(update) 부분인지를 먼저 찾아야한다.
바뀌는 부분은 따로 뽑아서 캡슐화시킨다. 그렇게 하면 시스템의 유연성이 높아져, 해당 코드를 수정 혹은 확장하더라도 다른 코드에는 영향을 주지 않는다.
그러기 위해서는 바뀌는 부분과 그렇지 않은 부분을 분리해야할 필요가 있다.
리스코프 치환 원칙 Liskov Substitution Principle (LSP)
자식 클래스는 언제나 부모 클래스에 치환될 수 있어야한다.
(부모 클래스가 들어갈 자리에 자식 클래스를 넣어도 잘 작동되어야한다)
인터페이스 분리 원칙 Interface Segregation Principle (ISP)
자신이 사용하지 않는 인터페이스는 구현하지 마라. 하나의 일반적인 인터페이스보다는 여러 개의 구체적인 인터페이스가 낫다.
예를 들어, 핸드폰에 대한 프로그램을 만들고자할 때
1) 핸드폰 interface → 카메라, 문자, 일정기능 → ... 이런 방식 보다는
2) 카메라 interface → ...
문자 interface → ...
일정기능 interface → ...
이런 식으로 서로 독립적으로 두어도 될 기능들은 하나의 인터페이스로 묶기보다는 분리하는 것이 더 적절하다.
의존 역전 원칙 Dependency Inversion Principle (DIP)
거의 변화가 없는 것에 의존하라.
구체적인 클래스보다는 인터페이스나 추상 클래스에 의존한 형태가 코드의 결합도를 낮추기 때문에 더 안정적이다.
'디자인 패턴' 카테고리의 다른 글
[디자인 패턴] 빌더 패턴(Builder Pattern) (0) | 2020.11.14 |
---|