리스코프 치환원칙은 '달러' 혹은 '금'의 기능과 비슷하다.
세계 어디를 가더라도 거래될 수 있는 달러의
강력한 기능은 '치환'이다.
물리적 한계가 있다는 점이 다를 뿐
금 역시 달러처럼 사용할 수 있다.
(금본위제와 같은 경제분야는 생략)
│리스코프 치환 원칙『Liscov Substitution Principle』
소프트웨어 설계 역시 달러처럼
치환능력이 중요하다.
국제화폐거래소 설계가 아래와 같다고 가정해보자.
국제화폐 거래소 Class는 각국의 화폐를 가지고 온 뒤,
환율조작국 의심검사를 한다.
그런데 국제화폐 거래소가 성공해서(?)
여러 곳에 가맹점으로 설치되었다고 가정해보자.
다행스럽게도 화폐거래소1, 2는 같은 알고리즘의
'환율조작국 의심검사'를 실행한다고 선언했다.
하지만 이 시스템은 아래 국가들에 의해
곧 취약해지기 시작한다.
화폐거래소3, 4에서는
'K-환율조작국 의심검사', 'J-환율조작국 의심검사'를
각각 실행한다고 선언했다.
그 결과, 국제화폐 거래소는 화폐거래소1, 2와 달리 3, 4에서는
'환율조작국 의심검사'명령어를 실행할 수 없게 되었다.
이는, 효율성의 심각한 결함을 초래할 수 있으며,
모든 국가에서 각자 기능을 만들어 다르게 실행한다면
대혼란이 발생하게 된다.
리스코프 치환이 필요한 순간이다.
│해결책
해결책은 상속하는 클래스에 있다.
달러(추상 클래스)가 모든 화폐의 기준이 되며,
모든 화폐는 달러의 기준을 상속받아야만 한다.
그러므로 달러라는 추상클래스에
'환율조작국 의심검사'기능을 추가한다면,
이를 상속받는 모든 화폐는 자체적으로 '환율조작국 의심검사'기능을 갖는다.
화폐거래소1, 2, 3, 4는 자체적으로 환율조작 기능을 제작할 필요없이
달러의 '환율조작 의심검사'기능을 실행하면 된다.(리스코프 치환)
소프트웨어적으로 표현하자면,
달러는 인터페이스이자 외부변경에 보호받는다.
즉, 모든 화폐 클래스는 달러 클래스에 의존할 수밖에 없다.
For 효율성.
'코드 스터디' 카테고리의 다른 글
소프트웨어 설계5원칙 『의존성역전 DIP』 (0) | 2020.12.04 |
---|---|
소프트웨어 설계4원칙 『인터페이스 분리 ISP』 (0) | 2020.12.02 |
소프트웨어 설계2원칙 『개방폐쇄 OCP』 (0) | 2020.11.27 |
소프트웨어 설계1원칙 SOLID『단일책임원칙::SRP』 (0) | 2020.11.26 |
웹 개발을 시작하기전에 생각해야 할 것들 (0) | 2020.11.23 |
댓글