(2023.02.02) 객체지향 설계 원칙(S O L I D)
요약
단일 책임의 원칙(Single Responsibility Principle)
개방 폐쇄 원칙(Open Close Principle)
리스코프 치환 원칙(Liskov Substitution Principle)
인터페이스 분리의 원칙(Interface Segregation Principle)
의존성 역전의 원칙(Dependency Inversion Principle)
1. 단일 책임의 원칙 (Single Responsibility Principle)
- 하나의 클래스는 하나의 목적을 위해 생성됨.
- 클래스가 제공하는 모든 서비스는 하나의 책임을 수행하는 데 집중되어 있어야 함.
( A라는 캐릭터를 조작하기 위해 만들어진 클래스는 다른 캐릭터를 사용하면 안됨)
2. 개방 폐쇄 원칙 (Open Close Principle)
- SW의 구성요소(컴포넌트, 클래스, 모듈, 함수)는 확장에는 열려있고, 변경에는 닫혀있어야 한다.
- 특정 목적을 위해 만들어진 클래스는, 내부 코드를 변경하는 데는 닫혀있어야 하고, 기능을 확장할 수 있어야 한다.
(A라는 캐릭터를 조작하기 위해 만들어진 클래스는 기존 캐릭터를 수정하지 않고 기능을 새로 만들어야 한다.)
3, 리스코프 치환 원칙(Liskov Substitution Principle)
- 서브 타입(상속받은 하위 클래스)은 어디서나 자신의 기반 타입(상위 클래스)으로 교체할 수 있어야 한다.
(B라는 클래스에 A라는 클래스를 상속시켰을때, A의 부모 클래스인 C 클래스를 가져와도 에러가 발생하지 않아야 한다.)
4. 인터페이스 분리의 원칙(Interface Segregation Principle)
- 한 클래스는 자신이 사용하지 않는 인터페이스는 구현하지 말아야 한다는 원칙
- Client가 사용하지 않는 안터페이스 때문에 영향을 받아선 안된다.
(하나의 일반적 인터페이스보단 여러개의 구체적 인터페이스가 낫다!)
5. 의존성 역전의 원칙(Dependency Inversion Principle)
- 실제 사용 관계는 바뀌지 않음
- 추상을 매개로 메시지를 주고받음 ==> 관계를 최대한 느슨하게 만든다.
- 클래스 간 관계를 맺을 때, 변화가 쉬운 것보단 변화가 적은 것에 관계를 맺는 것이 좋음.
(자주 바뀌는 클래스에 의존 관계를 형성할 경우, 해당 클래스에 변화가 발생했을 때 다른 의존 클래스들에도 변화가 필요할 수 있음)