리스코프 치환 원칙
을 지키는 건, 특히 개발자끼리 협력할 때 중요하다.
개발자 A
와 B
가 음악 재생 프로그램을 만든다고 하자.
먼저 MusicPlayer
라는 추상 클래스
를 만들고, MusicPlayer
클래스를 상속
받아서 다양한 장르의 플레이어 클래스도 만들어야 한다.
다양한 플레이어 클래스들은 MusicPlayer
클래스의 play
메서드를 음악 장르에 맞게 오버라이딩
해야 하는데, 부모 클래스이자 추상 클래스
인 MusicPlayer
클래스의 play
메서드는 음악 장르에 맞게 노래 가사를 문자열로 리턴한다는 행동 규약이 있다.
각각의 플레이어 클래스들은 이 행동규약에 맞게 오버라이딩
하면 되는데, 그리고 사용자가 음악 장르를 선택하면 알맞은 플레이어 인스턴스를 가져와서 play
메서드를 호출할 것이다.
만약 개발자 A
는 아래 부분을 맡기로 했고,
개발자 B
는 아래 부분을 맡기로 했다.
둘 다 동시에 만들기 시작해서 지금 작업을 마쳤는데, 코드를 실행하니까 마지막에 -1이 등장한다.
-1 이 갑자기 왜 나왔을까?
그건 RapPlayer
클래스가 리스코프 치환 원칙
을 위반했기 때문이다.
방금 말한 것처럼 play
메서드는 노래 가사를 문자열로 리턴해야 하는데, Rap Player
클래스의 play
메서드는 엉뚱하게 숫자 -1을 리턴하고 있다.
코드 실행에 에러는 안 났지만 개발자 A
는 꽤나 당황했을 것이다.
개발자 A
는 MusicPlayer
클래스의 자식 클래스들이 play
메서드가 음악 종류에 알맞은 가사를 리턴할 거라고 믿고, 위 코드들을 썻을 것이다.
개발자 B
는 이 믿음을 배신하면 안 됐던 것이다.
배신하면 이렇게 -1이 나오는 황당한 결과가 나오는 것이다.
이러한 믿음을 위반하지 않고, 부모 클래스의 행동규약을 준수하면서 자식 클래스를 만들라는 것이 리스코프 치환 원칙
이다.
개발은 혼자만 하는 게 아니라 여러 명이서 같이 할 때가 많다.
리스코프 치환 원칙
을 지키는 것은 나뿐만 아니라 함께 일하는 다른 개발자를 위해서도 중요한 셈이다.