회원가입

4. [리스코프치환원칙] 리스코프 치환 원칙의 중요성

NULL 2021-10-18

리스코프 치환 원칙을 지키는 건, 특히 개발자끼리 협력할 때 중요하다.

 

개발자 AB음악 재생 프로그램을 만든다고 하자.

 

먼저 MusicPlayer 라는 추상 클래스를 만들고, MusicPlayer 클래스를 상속 받아서 다양한 장르의 플레이어 클래스도 만들어야 한다.

다양한 플레이어 클래스들은 MusicPlayer 클래스의 play 메서드를 음악 장르에 맞게 오버라이딩 해야 하는데, 부모 클래스이자 추상 클래스MusicPlayer 클래스의 play 메서드는 음악 장르에 맞게 노래 가사를 문자열로 리턴한다는 행동 규약이 있다.

 

각각의 플레이어 클래스들은 이 행동규약에 맞게 오버라이딩 하면 되는데, 그리고 사용자가 음악 장르를 선택하면 알맞은 플레이어 인스턴스를 가져와서 play 메서드를 호출할 것이다.

 

만약 개발자 A 는 아래 부분을 맡기로 했고,

 

개발자 B 는 아래 부분을 맡기로 했다.

 

둘 다 동시에 만들기 시작해서 지금 작업을 마쳤는데, 코드를 실행하니까 마지막에 -1이 등장한다.

-1 이 갑자기 왜 나왔을까?

 

그건 RapPlayer 클래스가 리스코프 치환 원칙을 위반했기 때문이다.

방금 말한 것처럼 play 메서드는 노래 가사를 문자열로 리턴해야 하는데, Rap Player 클래스의 play 메서드는 엉뚱하게 숫자 -1을 리턴하고 있다.

 

코드 실행에 에러는 안 났지만 개발자 A 는 꽤나 당황했을 것이다.

개발자 AMusicPlayer 클래스의 자식 클래스들이 play 메서드가 음악 종류에 알맞은 가사를 리턴할 거라고 믿고, 위 코드들을 썻을 것이다.

개발자 B 는 이 믿음을 배신하면 안 됐던 것이다.

배신하면 이렇게 -1이 나오는 황당한 결과가 나오는 것이다.

 

이러한 믿음을 위반하지 않고, 부모 클래스의 행동규약을 준수하면서 자식 클래스를 만들라는 것이 리스코프 치환 원칙이다.

 

개발은 혼자만 하는 게 아니라 여러 명이서 같이 할 때가 많다.

리스코프 치환 원칙지키는 것은 나뿐만 아니라 함께 일하는 다른 개발자를 위해서도 중요한 셈이다.

0 0