더북(TheBook)

리스코프 치환 원칙

“뭐, 뭣이라고? ” 겁먹지 마시라!

바바라 리스코프(Barbara Liskov)가 ‘자료 추상화와 계층화(Data Abstraction and Hierarchy, SIGPLAN Notices 23, 5 [ May, 1988])’에서 천명한 리스코프 치환 원칙을 자바스크립트에서 흔한 표현으로 바꾸면 다음과 같다.

어떤 타입에서 파생된 타입의 객체가 있다면 이 타입을 사용하는 코드는 변경하지 말아야 한다.

다시 말해, 한 객체를 다른 객체에서 파생하더라도 그 기본 로직이 변경되어서는 안 된다는 뜻이다.

여러분이 작성 중인 함수가 기반 클래스로 하는 일과 서브 클래스로 하는 일이 다르다면 이 원칙을 어긴 셈이다.

서로 파생 관계가 없는 타입 간에는 적용되지 않는다. 예컨대 자바스크립트에서는 어떤 함수의 인자가 숫자일 때, 문자열일 때, 아예 인자가 없는 undefined 타입일 때를 각각 분기 처리하는 것이 대개 좋은 습관이다. 앞서 살펴보았듯이 자바스크립트는 함수 오버로딩이라는 객체 지향 개념으로 이를 실천한다.

덕 타이핑 역시 파생과는 조금 다르지만, 이 원칙과 잘 들어맞는다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.