다형성 (컴퓨터 과학)

프로그램 언어다형성(多形性, polymorphism; 폴리모피즘)은 그 프로그래밍 언어의 자료형 체계의 성질을 나타내는 것으로, 프로그램 언어의 각 요소들(상수, 변수, , 오브젝트, 함수, 메소드 등)이 다양한 자료형(type)에 속하는 것이 허가되는 성질을 가리킨다. 반댓말은 단형성(monomorphism)으로, 프로그램 언어의 각 요소가 한가지 형태만 가지는 성질을 가리킨다.

예시 편집

단형성 체계를 가진 프로그램 언어에서는 함수는 각각 한가지 의미로 식별되는 이름과 결합되어 있어 다른 동작을 구현하기 위해서는 다른 이름을 써야 한다.

예를 들어 어떤 값을 문자열 형식으로 변환하는 단순한 경우를 생각해보자. 다형성 형태 체계를 가지지 못한 언어에서는, 다음과 같이 개별 함수로 되어 있을 것이다.

//숫자를 문자열로 바꾸는 경우
string = StringFromNumber(number);

//날짜를 문자열로 바꾸는 경우
string = StringFromDate(date);

한편 다형성 체계를 가진 언어에서는, StringValue와 같은 범용 메소드 이름을 정의하여 형태에 따라 각각 적절한 변환 방식을 정의해둠으로써 객체의 종류와 상관없는 추상도가 높은 변환 형식을 구현할 수 있다.

//숫자를 문자열로 바꾸는 경우
string = number.StringValue();

//날짜를 문자열로 바꾸는 경우
string = date.StringValue();

물론 StringValue 메소드의 정의는 형태별로 따로 수행되어야 하기 때문에 전체적으로 코드의 분량이 감소하는 것은 아니다(다만 상속에 의한 재사용은 있을 수 있다). 또 무엇이 '올바른 동작'인지는 객체의 설계에 따라 달라질 수 있으므로, 다형성을 잘 다루려면 체계 전체를 파악하는 뛰어난 설계 능력이 요구된다.

같이 보기 편집