[Dev] SOLID 원칙
in Dev
SOLID 원칙
OOP 5가지 설계 원칙
단일 책임 원칙(SRP, Single Responsibility Principle)
- 클래스가 단 하나의 책임을 져야함
- 다시 말하면, 클래스는 단 하나의 일만 한다는 것
- 클래스는 작을수록 유지보수에 좋음
개방/폐쇄 원칙(OCP, Open/Close Principle)
- 클래스 디자인 시, 유지 보수가 쉽도록 로직을 캡슐화하여 확장에는 개방되고 수정에는 폐쇄되도록 함
- 새로운 요구 사항이나 도메인 변화에 잘 적응하도록, 기존 코드는 유지하고 새로운 것만 추가
리스코프 치환 원칙(LSP)
- S가 T의 하위 타입이라면(S가 T를 상속), 프로그램을 변경하지 않고 T 타입의 객체를 S 타입의 객체로 치환이 가능해야 함
- 대표적인 예가 직사각형-정사각형 문제
- 정사각형 클래스는 직사각형 클래스를 상속하면 안됨(가로 세로 수정 시 직사각형과 달리 정사각형은 가로 세로가 같아야 하기 때문)
인터페이스 분리 원칙(ISP, Interface Segregation Principle)
- 많은 일을 하는 인터페이스보다는 적은 일을 하는 인터페이스가 좋음
- 다중 메서드를 가진 인터페이스가 있다면, 더 적은 수의 메서드(가능하면 하나)를 가진 여러 개의 인터페이스로 분할하는 것이 좋음
의존성 역전 원칙(DIP, Dependency Inversion Principle)
- 고수준 모듈은 저수준 모듈의 구현에 의존하면 안됨
- 저수준 모듈이 고수준 모듈에서 정의한 추상 타입에 의존해야 함
- 자신보다 변하기 쉬운 것에 의존하면 안되는 것을 뜻함
- 대표적인 예제로 자동차와 스노우 타이어 이야기가 있음
- 자동차에 스노우 타이어를 끼우게 되면, 자동차(고수준)가 스노우 타이어(저수준)에 의존하는 상황이 생김
- 날씨가 변하면, 더이상 스노우 타이어가 필요없어지므로 일반 타이어로 바꿔야하는데 이러면 자동차의 코드도 연쇄적으로 영향을 미침
- 따라서 자동차 쪽을 수정할게 아니라, 스노우 타이어 쪽에서 추상화(타이어라는 고수준 모듈)를 이용하여 문제를 고쳐야 함
- 바로 이 부분에서 의존성이 역전됨(자동차->스노우타이어 에서 스노우타이어->자동차 로)