유지보수하기 쉽고, 확장이 쉬운 소프트웨어를 만드는 원리.
하나의 객체 = 하나의 책임. 캡슐화의 중요성.
메소드의 갯수 ≠ 책임의 갯수
클래스를 변경하는 이유는 단 한가지여야 한다
소프트웨어의 구성요소는 확장에는 열려있고, 변경에는 닫혀 있어야 한다
요구사항의 변경이나 추가사항이 발생했을 때, 기존 구성요소는 수정이 일어나지 말고, 쉽게 확장해서 재사용할 수 있어야 한다.
자식 클래스는 부모 클래스에서 가능한 행위를 수행해야 하며, 객제 지향 프로그래밍에서는 부모 클래스의 인스턴스 대신 자식 클래스의 인스턴스를 사용해도 문제가 없다
💡 조직도, 계층도를 염두해두지 말고 **분류도**로 생각해서 자식과 부모 객체를 만들어야 한다.한 클래스는 자신이 사용하지 않는 인터페이스는 구현하지 말아야 한다는 원칙
💡 - 단일 책임 원칙(SRP)과 인터페이스 분할 원칙(ISP)은 같은 문제에 대한 두가지 해결책이다. - 상위 클래스는 풍성할수록 좋고, 인터페이스는 작을 수록 좋다(적은게 아니라)의존관계를 맺을 때, 변화하기 쉬운 것보다는 변화하기 어려운 것에 의존해야 한다
변화하기 쉬운 것 : 구체화 된 클래스
변화하기 어려운 것 : 추상클래스나 인터페이스
참고글
https://www.nextree.co.kr/p6960/
https://velog.io/@juhwan9408/객체-지향-설계-5원칙-SOLID