ByteDance 면접 때, interviewer가 내게 다형성이 무엇인지 물었다.
당황한 나의 대답은 "부모 클래스를 가지는 자식 클래스 각각에서 메써드의 구현을 다르게 할 수 있다" 였다. 당황해서 다형성에 대한 설명은 할 수 없었고 다형성이 표현된 방식을 설명한 것이었다.
조영호님의 "객체지향의 사실과 오해(150p.)"에는 다형성에 대한 부분이 나온다.
이 책에서의 표현을 사용하면 다형성이란
1. 객체지향의 핵심 개념
2. 서로 다른 유형의 객체가 동일한 메시지에 대해 서로 다르게 반응하는 것을 의미
3. 서로 다른 타입에 속하는 객체들이 동일한 메시지를 수신할 경우 서로 다른 메써드를 이용해 메시지를 처리할 수 있는 메커니즘
이라고 설명되어있다.
잘 이해가 가지 않지만 조금 아래쪽을 보면
1. 메시지는 '무엇'이 실행될지는 명시하지만 '어떻게'실행할 것인지는 전적으로 수신자가 결정할 수 있다.
2. 다형성을 하나의 메시지와 하나 이상의 메서드 사이의 관계로 볼 수 있다.
라는 부분에서 조금 더 관계적인 의미를 파악할 수 있다.
하나의 메시지와 하나 이상의 메서드 사이의 관계
이어서 보다 철학적인 관점이 소개된다.
다형성은 역할, 책임, 협력과 깊은 관련이 있다. 서로 다른 객체들이 다형성을 만족시킨다는 것은 객체들이 동일한 책임을 공유한다는 것을 의미한다.
기본적으로 다형성은 동일한 역할을 수행할 수 있는 객체들 사이의 대체 가능성을 의미한다.
조용호님의 "객체지향의 사실과 오해(150p.)"에서 이어진다.
다형성은 객체들의 대체 가능성을 이용해 설계를 유연하고 재사용 가능하게 만든다.
다형성을 사용하면 송신자가 수신자의 종류를 모르더라도 메시지를 전송할 수 있다. 즉, 다형성은 수신자의 종류를 캡슐화한다.
객체지향 패러다임이 강력한 이유는 다형성을 이용해 협력을 유연하게 만들 수 있기 때문이라는 점을 기억하라.