객체지향의 5대 원칙으로 확장, 유지보수가 쉬운 소프트웨어를 만들 수 있다 .
1. Single Responsibility Principle (SRP, 단일책임원칙)
- 소프트웨어의 부품 (클래스, 함수 등)은 단하나의 책임만 가져야한다
- 응집도는 높고 결합도는 낮은 객체를 만들기위함
- 하나의 책임만들 부여하여 다른 객체간의 결합도를 낮추도록 책임 분리
2. Open-Closed Principle (OCP, 개방-폐쇄 원칙)
- 기존코드를 변경하지 않고 기능 수정 추가 가능하도록 설계해야 한다
- 자주 변경되는 부분은 수정사항에 영향을 받지 않도록 설계
- ex) 인터페이스 사용
3. Liskov Substitution Principle (리스코프 치환 원칙)
- 부모클래스와 자식클래스 사이의 행위에는 일관성이 있어야한다는 원칙
- 부모클래스의 인스턴스 대신 자식클래스의 인스턴스를 사용해도 문제가 없어야한다
- 일반화관계 (IS-A) 성립해야한다
- 좋은예시 ) [출처] - https://dev-momo.tistory.com/entry/SOLID-원칙(1) 도형은 둘레를 가지고 있다.(3) 도형은 각을 가지고 있다.(1) 사각형은 둘레를 가지고 있다.(3) 사각형은 각을 가지고 있다.여기서 원(Circle) 이라는 도형에 대해 생각해보자. 원 클래스 역시 도형 클래스의 상속을 받는다고 가정하자. 앞에서 언급한 (1) ~ (3)의 도형 단어 대신 원을 대입해보자.(2) 원은 넓이를 가지고 있다.문장을 읽어보면 (3)번 문장이 어색하다는 것을 알 수 있다. 따라서 도형 클래스는 LSP을 만족하지 않은 설계라 할 수 있다. 따라서 (3)문장에 대해서는 일반화 관계가 성립하도록 수정되어야 한다.
- (3) 원은 각을 가지고 있다.
- (1) 원은 둘레를 가지고 있다.
- (1) ~ (3) 모두 딱히 이상한 부분이 보이지 않는다. 따라서 도형과 사각형 사이에는 일관성이 있다고 할 수 있다.
- (2) 사각형은 넓이를 가지고 있다.
- 일반화 관계(일관성인지 확인하는 방법은 단어를 교체해 보면 알 수 있다. (1) ~ (3)의 도형이란 단어 대신 사각형을 넣어보자.
- (2) 도형은 넓이를 가지고 있다.
- 이해를 돕기위해 도형을 예시를 들어보자. 도형 클래스와 사각형 클래스가 있고, 사각형 클래스는 도형 클래스의 상속을 받는다고 가정하자.
4. Dependency Inversion Principle (의존 역전 원칙)
- 의존관계를 맺을때 변화하기 쉬운것보다 변화하기 어려운것에 의존해야한다는 원칙 (구현체보다 인터페이스에 의존)
- DIP를 만족하면 ‘DI(의존성 주입)’ 을 통해 설계가능
5. Interface Segregation Principle (인터페이스 분리 원칙)
- 한클래스는 자신이 사용하는 인터페이스만 구현해야한다 → 자신이 사용하지 않는 기능에는 영향을 받지 말아야한다
- 하나의 범용적인 인터페이스 보다는 여러개의 구체적인 인터페이스가 낫다 .
참고 및 출처)