[디자인 패턴] 5가지 기본 원칙
1.단일책임원칙
(SRP:Single Responsibility Principle)
하나의 클래스는 하나의 책임, 기능만을 가져야한다는 것이다.
뭉치지 말고 기능별로 잘 쪼개놓고 연결하자.
2.개방폐쇄원칙
(OCP:Open Closed Principle)
클래스는 확장에 대해서는 열려있어야 하고, 수정에 대해서는 닫혀있어야 한다는 것이다.
말은 복잡한데 실상은 별거없다.
가령 클래스 B가 클래스 A를 상속받을 경우, A는 B에 대해서 개방되어있지만, A의 코드나 로직이 수정되진 않는다.
3.리스코프 치환 원칙
(LSP:Liskov Substitution Principle)
리스코프란 양반이 처음 주장했다.
서브타입은 그 슈퍼타입으로 치환 가능해야한단 것이다.
만약 슈퍼클래스 A를 받아서 처리하는 함수가, B를 받을때 오류가 생기거나 한다면. 이건 리스코프 원칙을 위반한것이다.
그냥 서브타입이 슈퍼타입의 메서드 등을 폐쇄하거나 엉망으로 만들어서 오버라이딩하지만 않으면 된다.
4.의존성 역전 원칙
(DIP:Dependency Inversion Principle)
고수준 모듈은 저수준 모듈에 의존적이면 안된다.
고수준 모듈은 저수준 모듈들을 포함하는 상위모듈을 말한다. 소유관계로 포함시키거나 뭐 그렇게.
이걸 잘 지키려면 저수준 모듈의 인터페이스를 정의해서 고수준모듈이 인터페이스를 갖고 처리하도록 하면 된다.
5.인터페이스 분리 원칙
(ISP:Interface Segregation Principle)
인터페이스에 너무 많은 행동을 구겨넣지 말고 분리하란 말이다.
예를 들어 인터페이스 I에 a,b,c 라는 행동이 있는데 내가 새로 구현할 클래스엔 c가 필요없다.
이러면 이 원칙을 위반한거다.
이럴땐 C를 별개의 인터페이스로 쪼개면 된다.
참조
클린 소프트웨어, 로버트 마틴
https://www.google.com/amp/wonwoo.ml/index.php/post/1675/amp
https://www.google.com/amp/wonwoo.ml/index.php/post/1717/amp