다형성 – 2.다형성의 예

객체지향 프로그래밍에서의 각 객체는 스스로 주어진 독립적인 역할을 수행하도록 하는 것이 매우 중요하기 때문에, 동일한 메시지(함수 호출)에 대해 독립적인 각 객체가 서로 다르게 반응할 수 있어야 합니다.

아래의 예에서 보면, 어떤 도형이 되었든지 해당 도형의 면적을 구하라는 메시지(calcArea() 함수 호출)는 동일합니다. 단지 도형에 따라 면적을 계산하는 방식에 차이가 있기 때문에 해당 객체에 메시지(calcArea() 함수 호출)를 보냈을 때 해당 객체에 따라 서로 다른 결과를 가져오는 것입니다.

위에서 각 도형의 면적을 구하기 위한 전달한 동일한 메시지(calcArea() 함수 호출)에 대하여 객체마다 다르게 반응하는 것을 볼 수 있습니다. 이와 같이 객체지향 프로그래밍에서의 다형성(polymophism)이란 동일한 이름으로 호출되는 함수를 다양하게 구현할 수 있도록 하는 클래스의 기능입니다. 다형성을 통해 함수에서 제공되는 특정 구현 내용에 관계없이 동일한 함수(calcArea())를 호출할 수 있습니다. 다른 말로 다형성이란 하나의 프로그램에 동일한 이름을 가진 함수가 여러 개 존재할 수 있다는 것을 나타냅니다.

부모 클래스인 Shape와 다른 도형의 클래스를 변경하지 않고도 다른 어떤 도형이든 면적을 계산하는 동일한 메시지인 calcArea() 함수를 작성할 수 있습니다.

새로운 도형 Triangle 클래스를 추가하여 새로운 방식으로 각 도형 객체에 대하여 동일한 메시지를 전달하여 어떻게 반응하는지 살펴보겠습니다. 부모 클래스인 Shape 클래스와 Circle, Rectangle 클래스의 코드는 위의 예제와 동일합니다.

또 다른 다형성 실험을 위해 부모 클래스 Shape에 dispArea 함수를 추가하고 각 도형 객체에서 이 함수를 호출하는 예를 살펴보겠습니다.

각 도형 객체에서 부모 클래스인 Shape 클래스의 dispArea 함수를 호출하기 위한 코드는 아래와 같이 작성할 수 있습니다.

답글 남기기