객체지향의 사실과 오해
라는 책에서
"추상화의 목적은 불필요한 부분을 무시함으로써 현실에 존재하는 복잡성을 극복하는 것이다."라는 표현이 나온다.
또한, 저자는 리처드 파인만의 말을 다음과 같이 인용한다.
"현상은 복잡하다. 법칙은 단순하다. 버릴 게 무엇인지 알아내라."
구현하려는 클래스의 메시지들에 집중해보자. 공통점은 메시지 발송 요청이다.
공통점
을 기준으로 묶고, 그 외 불필요한 차이점들은 잊어버리자.
좀 더 직접적인 예로,
간편결제, 카카오 결제, 토스 결제, 계좌 이체 등의 차이점을 매우 많다.
하지만, 결제
를 한다는 관점에서 보면 공통점이 많다.
유저의 계좌정보를 verify해야 할 것이며, 계좌 잔액이 구매가격보다는 많아야 결제를 완료시킬 수 있다는 점이다. (물론 공통점들은 더 있을 것이다.)
결제 방식마다 클래스를 선언하여 객체가 고립되는 "섬"이 되게 하는 것은 좋은 설계가 아니다.
공통점을 추상화를 시킨다. --> Abstract
그리고 각각의 객체는 추상화 클래스를 상속받는 방식으로 진행하여 서로 협력하는 관계로 만든다.
추상화 시도는