단일책임의 원리 SRP
Single Responsibility Principle
어떤 클래스를 변경해야 하는 이유는 오지 하나뿐이어야함
결합된 책임을 분리해서 별도의 클래스로 만들어야함
개방폐쇄의 원리 OCP
Open Close Principle
확장에 대해 열려 있지만 변경에 대해 닫혀 있어야 함
추가는 쉽게하고 수정은 다른곳에 영향을 미치지 않게
리스코프 교체의 원리 LSP
- 슈퍼클래스를 서브클래스가 대체할 수 있어야함
- 상속을 사용할 때 슈퍼클래스를 대체하기 위함이 아니라 단순히 상속받기 위해 사용하지 말 것
- 단순히 상속이 필요한 경우는 composition을 사용하자
의존관계 역전의 원리 DIP
- 낮은수준 : 구체적인 것이 높은수준 : 추상적인 것 에 의존해야함
- 높은 수준층 (클라이언트)에 인터페이스를 만들고 낮은 수준층에서 이를 구현하도록 해야 한다
인터페이스 격리의 원리 ISP
- 클라이언트는 자신이 사용하지 않는 메소드에 의존하면 안됨
- 다른 여러 클라이언트를 위한 기능을 하나의 인터페이스나 메소드에 넣어 비대하게 만들면 안됨
디메테르의 법칙
- 주어진 프로그램에서 모듈 사이의 결합 최소화
- 클래스 내에서 변경이 발생했을 때 클래스 범위 안에서 해결이 가능해야함
- 클래스 내부 메소드, 메소드에 전달된 파라미터 객체의 메소드, 클래스에서 만든 객체의 메소드, 내부 객체의 메소드 등 내부 범위에서 해결 가능한 메소드를 호출해야 함
- 외부 범위의 것을 호출하면 변경 영향이 커짐
