SOLID란?
객체지향 언어를 사용하면서 프로그램을 설계할 때 기본이 되는 5가지 원칙을 말한다.
원칙에는 아래 5가지가 있다.
- SRP(Single Responsibility Principle), 단일 책임 원칙
- OCP(Open Closed Principle), 개방-폐쇄 원칙
- LSP(Liskov Substitution Principle), 리스코프 치환 법칙
- ISP(Interface Segregation Principle), 인터페이스 분리 원칙
- DIP(Dependency Inversion Principle), 의존성 역전 법칙
5가지 원칙의 앞 글자를 따서 SOLID 원칙이라고 부른다.
SRP, 단일 책임 원칙
하나의 클래스는 단 하나의 책임만을 가진다. 즉, 단 하나의 기능만을 가지는 것을 의미하며 해당 기능이 변경될 때에만 클래스가 변경될 수 있다는 뜻이다.
클래스를 변경해야하는 이유는 오직 하나, 클래스가 가지는 기능이 수정되어야 할 때를 의미한다.
하나의 기능을 수행하는 클래스는 재사용성이 높아지고, 객체간 결합도가 최소가 된다.
OCP, 개방 폐쇄 원칙
모순된 단어의 결합같아 보이지만 그 뜻은 확장성에 대한 개방과 변화에 대한 폐쇄를 말한다.
이 원칙이 지켜지기 위해서는 확정과 변화의 의미가 엄격하게 구분되어야한다. 코드의 재사용성을 높이기위함인데 변경될 것과 변하지 않을 것을 구분하는 것이 중요하다.
수정이 되지 않을 부분은 상위 클래스나 인터페이스로, 수정이 될 부분은 하위 클래스로 관리한다.
LSP, 리스코프 치환 법칙
자식 클래스는 언제나 자신의 부모 클래스로 교체될 수 있다는 원칙이다.
자식 클래스가 어떻게 구현이 되었든 부모 클래스를 알면 사용이 가능하여야한다.
ISP, 인터페이스 분리 원칙
하나의 일반적인 인터페이스보다는, 여러 개의 구체적인 인터페이스를 구현해서 사용해야 한다는 원칙이다.
자신이 사용하지 않는 매서드에 의존하지 않아야하며, 필요한 인터페이스에만 의존해야 한다.
인터페이스에서의 단일 책임 원칙이라고도 볼 수 있다.
DIP, 의존 역전 원칙
상위 클래스가 하위 클래스에 의존하는 것을 말하는데, 하위 클래스의 변경이 상위 클래스에 영향을 미치도록하여 의미상 관계를 역전 시키는 것이다.
실제로 상위-하위 관계가 변경되지는 않지만 상위-하위 관계를 최대한 유연하게 설계하기 위함이다.
개념이 쉽지만 적용이 힘든 원칙들과 개념 자체가 이해하기 힘든 원칙들이 존재하여 이해하기 쉽지 않은 원칙들이지만 의미를 계속해서 생각하면서 코드에 반영하고자 노력한다면 실력이 향상될 것이라고 생각하여 간단한 개념을 정리해 보았다.