본문 바로가기

Sorry Architecture

Polymorphism

지난 번에 은닉화(Encapsulatioin)에 대해 이야기 했다.[각주:1] 인터페이스가 가지는 특징 중 가장 큰 것이 바로 상대를 배려하는 은닉화라고 말했다. 객체기반프로그래밍(Object Oriented Programming)이 가지는 유지보수의 유연함은 바로 이 특징에서 나온다는 이야기를 했다. 그렇다면 그 개념을 확장해서 다형성(Polymorphism)에 대해 생각해 보자.
 
무엇인가를 요청했을 때 실제로 어떻게 동작하는 지 간섭하지 않는 것이 은닉화의 특징이라고 했다. 그렇다면 요청을 받는 쪽에서 어떻게 실행 할 지 스스로 결정할 수 있으며 그 방법은 매우 다양하게 나타날 수 있다. 예를 들어 아이스크림 2개를 구매해 달라고 부탁했다고 생각해보자. 아이스크림 가격을 지불하고 작업 수행을 요청하면 요청을 받은 쪽에서는 편의점을 가든 대형마트를 가든 스스로 판단해서 일을 수행한다. 작업의 방식을 일하는 쪽에서 결정하는 것이다. 이러한 상황을 객체로 대입해 보면 다음과 같이 설명할 수 있다. 인터페이스를 통해 입력 변수(Parameter)로 아이스크림 값과 개수를 넘겨주면 출력 값으로 (Return Value) 아이스크림을 얻는 객체가 있을 수 있는데, 대형마트에서 구매하는 객체와 편의점에서 구매하는 객체가 있을 수 있다. 부르는 쪽에서는 둘 중 원하는 객체를 불러서 아이스크림 구매를 시키면 된다. 이것이 은닉화를 보장함으로써 얻을 수 있는 다형성이다.
 
다형성의 좋은 점을 생각해보자. 누구는 편의점에 사오고 누구는 대형마트에서 사온다. 어느 쪽이 효율적인지 판단해보고 결정해서 사용하면 된다. 만약 대형마트가 문을 닫은 시간이라면 편의점 쪽으로 변경해서 처리하면 된다. 이 과정에서 구현방식을 바꾸는 것은 어렵지 않다. 둘 다 같은 인터페이스를 사용하기 때문에 언제든지 쉽게 바꿀 수 있다. 다형성은 이렇게 같은 요구사항에 대해서 다양한 해석과 구현을 가능하게 한다. 그리고 그 다양한 해석과 구현을 원하는 때에 쉽게 바꿀 수 있는 유연함을 제공한다. 물론 이 모든 다형성의 장점들은 인터페이스와 은닉화가 기본적으로 받쳐주어야 얻을 수 있다.


'Sorry Architecture' 카테고리의 다른 글

Version Control System  (0) 2019.03.28
Security as Code  (0) 2019.03.03
Terraform  (0) 2019.02.21
Immutable Infrastructure  (0) 2019.02.21
CI/CD Pipeline  (0) 2019.02.21