정의

목적 및 특징

단일 책임 원칙 (SRP: Single Responsibility Principle)

1개의 클래스에 하나의 역할만 가져야한다.

설계중인 프로그래밍에 클래스가 여러가지 역할을 가지고 있다면 검토 후, 불필요한 필드나 메소드를 제거해야한다.

개방 폐쇄 원칙 (OCP: Open Closed Principle)

자신의 확장에는 열려있고 주변의 변화에 대해서는 닫혀있어야한다.

제공되는 기능은 확장할 수 있지만(오픈), 수정에 영향을 받지 않는(폐쇄성)임을 고려한다.

미래에 어떤 확장과 수정된 방식(메소드 내용 변경 등)을 해도 사용자 측은 그 수정에 대해 영향을 받지 않아야 한다.

→ 객체를 생성하고, 연관관계를 맺어주는 별도의 조립, 설정자가 필요하다.

상위클래스 또는 인터페이스를 중간에 둠으로써,

자신은 변화에 대해서는 폐쇄적이지만, 인터페이스는 외부의 변화에 대해서 확장을 개방해줄 수 있다.

리스코프 치환원칙 (LSP: Liskov Substitution Principle)

서브타입은 언제나 자신의 기반(상위) 타입으로 교체할 수 있어야한다.

자신의 상위 타입(인터페이스)의 규약을 다 지켜야한다는 점이다.

예를들어, 자동차 인터페이스의 엑셀을 앞으로 가라는 기능이다.

하지만 이 기능을 하위클래스에서 뒤로 가게 구현하면 LSP가 위반된다.

엑셀 기능은 느리더라도 반드시 앞으로 가야한다.

상위는 하위를 포괄하는 일반적 개념을 가지고 있어야 한다.

포유류 - 인간의 개념에서 인간은 언제나 포유류에 속하는 것을 떠올리면 된다.