SOLID 원칙 중 리스코프 치환 원칙에 대해 설명한다. 사실 리스코프 치환 원칙은 매우 느슨한 설계 원칙이기 때문에 정상적인 상황에서 우리가 작성하는 코드는 이 설계 원칙을 위반하지 않는다. 따라서 이 원칙은 이해도 쉽고 실제로 적용하는 것도 쉽다.
리스코프 치환 원칙은 1996년에 MIT 바바라 리스코프 교수에 의해 제안된 원칙이다.
리스코프는 이 원리에 대해 만약 S가 T의 하위 유형인 경우 T유형의 객체는 프로그램을 중단하지 않고도 S 객체로 대체될 수 있다고 설명한다.
로버트 마틴은 “기본 클래스에서 참조 포인터를 사용하는 함수는 특별히 인지하지 않고도 파생 클래스의 객체를 사용할 수 있어야 한다”라고 설명한다.
두 설명을 조합하여 다음과 같이 정의할 수 있다.
하위 유형 또는 파생 클래스의 객체는 프로그램 내에서 상위 클래스가 나타나는 모든 상황에서 대체 가능하며, 프로그램이 원래 가지는 논리적인 동작이 변경되지 않으며 정확성도 유지된다.
[코드 예제]
리스코프 치환 원칙은 객체지향 특성인 다형성을 단순하게 이용한 것이 아닐까 하는 의구심이 들 수 있다.
만약 그렇다면 다형성과 리스코프 치환 원칙은 같은 것이라고 봐도 되는 것일까?
앞의 예제 코드를 이용하여 살펴 보자. 그 전에 SecurityTranspoter 클래스에서 sendRequest()메서드를 약간 수정할 필요가 있다.
수정 전에는 appId 속성이나 appToken 속성이 설정되지 않았다면 보안 검증을 하지 않았지만, 수정한 코드에서는 appId 속성이나 appToken 속성이 설정되지 않으면 예외가 발생한다.