약자 | 원칙 | 설명 |
---|---|---|
S | 단일 책임 원칙 (SRP, Single responsibility principle) | 한 클래스는 하나의 책임만 가져야 한다. |
O | 개방-폐쇄 원칙 (OCP, Open/closed principle) | 소프트웨어 요소는 확장에는 열려 있으나 변경에는 닫혀 있어야 한다. |
L | 리스코프 치환 원칙 (LSP, Liskov substitution principle) | 프로그램의 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 한다. |
I | 인터페이스 분리 원칙 (ISP, Interface segregation principle) | 특정 클라이언트를 위한 인터페이스 여러 개가 범용 인터페이스 하나보다 낫다. |
D | 의존관계 역전 원칙 (DIP, Dependency inversion principle) | 프로그래머는 추상화에 의존해야지, 구체화에 의존하면 안된다. 의존성 주입은 이 원칙을 따르는 방법 중 하나이다. |
LSP의 설명이 난해하여, 추가로 설명하자면 상속받아서 구현을 했을 때, 메소드명으로 추측할 수 있는 동작을 해야한다는 것이다. 추측할 수 없는, 약속되지 않은 동작을 한다면, 상위 타입으로 치환이 안되는 것은 당연하다.
자동차 클래스를 상속받아 break()
메소드를 구현했는데, 속도가 증가하면 안된다는 것이다. 기존 자동차 클래스가 있는 코드에 오히려 속도가 증가해버리는 break()
메소드를 가진 하위 타입의 클래스를 넣으면 정상 동작하지 않을 것은 명백하다.