본문 바로가기

IT/개발

다형성(polymorphism)

다형성(polymorphism)은 OOP를 구현하는데 필요한 성질의 하나로써 하나의 객체로 다수의 class type, interface type으로 표현이 가능합니다.

 

 

현실을 예로들어 벽돌을 생각하면 벽돌은 아파트를 만들 때도 쓰이고, 둑을 만들 때도 쓸 수가 있고 벽돌이라는 하나의 객체이지만 그 사용성은 매우 많습니다

 

 

우리가 평소에 많이 먹는 커피 또한 종류가 다양하죠^^

 

OOP에서 다형성은 클래스를 만드는데 있어서 현실세계의 객체를 표현하는데 있어서 하나의 개념이고 방법입니다.

 

다형성을 구현함으로써 프로그램에서는 현실세계와 같은 하나의 객체를 용도에 따라 다 다르게 표현 할 수가 있으며, 객체를 정의한 기존에 존재하는 클래스와 인터페이스를 가져와서 써서 재사용을 하여 확장을 가능하게 합니다. 그러한 확장을 하였을 때 추상클래스와 인터페이스를 통하여 parametric polymorphism heterogeneous collection을 구현하여 통합적으로 클래스들에 대한 관리를 보다 쉽게 할 수 있습니다.

 

parametric polymorphism heterogeneous collection을 현실세계와 비교해 본다면 면요리 가게에는 면요리를 팝니다. 그 면요리는 라면, 국수, 짜장면 등 면요리라는 하나의 이름을 갖지만 다양하게 표현이 가능합니다. 그리고 손님이 와서 면요리 오늘 괜찮은거 주세요!” 할 때 그 면요리는 오늘 괜찮은 면요리인 국수가 될 수도 있습니다.

 

Parametric polymorphism : 메소드를 구현하는 경우 파라매터를 한가지 타입으로 받는 메소드가 있습니다. 하지만 그 한가지 타입으로 다른 다수의 인스턴스화된 객체가 접근 가능하며 그 인스턴스화된 객체에 따라 다른 행동을 나타낼 수 있습니다.

 

Heterogeneous collection : 이형집합구조로써 실제 heap메모리 상에는 다른 타입으로 인스턴스화가 되어 있지만 stack에서는 한가지타입으로 집합구조를 이루고 있습니다.

 

앞에서 설명한 Parametric polymorphism Heterogeneous collection에서의 그 한가지 타입은 upcasting이 가능한 인스턴스화된 객체만이 가능합니다.

 

 

'IT > 개발' 카테고리의 다른 글

인터페이스(interface)  (0) 2013.08.16
추상클래스(abstract class)  (0) 2013.08.16
상속(inheritance)과 확장(extend)  (0) 2013.08.15
레퍼런스(reference) 타입  (0) 2013.08.14
객체(object)  (0) 2013.08.13