다형성

위키원
218.146.11.216 (토론)님의 2020년 8월 5일 (수) 17:46 판
이동: 둘러보기, 검색

다형성(OOP, 多形性, Polymorphism)이란 프로그래밍 언어의 자료형 체계의 성질을 나타내는 것으로 프로그램 언어의 각 요소들 (상수, 변수, 식, 오브젝트, 함수, 메소드 등) 다양한 자료형(type)에 속하는 성질을 보여준다.[1] 또한 상속을 통해 기능을 확장시키고너 변경하는 것을 가능하다. 자바에서 다형성을 부모 클래스 타입의 참조 변수로 자식 클래스 타입의 인스턴스를 참조할 수 있도록 하여 구현하며, 다형성은 상속, 추상화와 더불어 객체 지향 프로그래밍을 구성하는 중요한 특징 중 하나다.[2] 반댓말은 단형성(monomorphism)으로, 프로그램 언어의 각 요소가 한가지 형태만 가지는 성질을 가리킨다.

개요

다형성이란 같은 자료형에 여러 가지 객체를 대입하여 다양한 결과를 얻어내는 성질을 의미한다.[3]

특징

  • 부모클래스 타입의 참조변수로 자식클래스의 인스턴스 참조 가능. 부모클래스 타입의 참조변수로 자식 클래스에 잇는 멤버들에 접근 가능하다. (부모클래스에서 상속받은 멤버만 접근 가능. 자식클래스에서 만들어진 멤버들은 접근 불가.)[4]
  • 자식타입의 참조변수로 부모타입의 인스턴스로 참조 불가하다.[5]
  • 반드시 상속관계가 이뤄져야한다.[6]
  • 상속과 인터페이스를 통해 이루어진다.
  • 인터페이스가 상속보다 다형성에 더욱 유연함을 제공한다.

활용

단형성 체계를 가진 프로그램 언어에서는 함수는 각각 한가지 의미로 식별되는 이름과 결합되어 있어 다른 동작을 구현하기 위해서는 다른 이름을 써야 한다. 예를 들어 어떤 값을 문자열 형식으로 변환하는 단순한 경우를 생각해보자. 단형성 형태 체계를 가지지 못한 언어에서는,개별 함수로 되어 있을 것이다.[7]

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

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

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

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


참고 자료

같이 보기

각주

  1. , 위키백과, 〈다형성(컴퓨터 과학)〉, 《위키백과》, 2020-04-24
  2. , TCP School, 〈다형성의 개념〉, 《코딩의 시작, TCP School》
  3. , JOKER, 〈(JAVA/자바) 다형성(polymorphism)의 개념/의미/예제〉, 《JOKER's ROOM》2017-04-10
  4. , 윤연식, 〈다형성〉, 《윤연식》2008-0-13
  5. , 윤연식, 〈다형성〉, 《윤연식》2008-0-13
  6. , 윤연식, 〈다형성〉, 《윤연식》2008-0-13
  7. , 위키백과, 〈다형성(컴퓨터 과학)〉, 《위키백과》, 2020-04-24
  8. , 위키백과, 〈다형성(컴퓨터 과학)〉, 《위키백과》, 2020-04-24
  9. , 위키백과, 〈다형성(컴퓨터 과학)〉, 《위키백과》, 2020-04-24