언어 자료구조 알고리즘/Escort C++

[C++] 하향 캐스팅

언제나휴일 2016. 4. 15. 14:26
반응형

6.3 하향 캐스팅

 

 다형성은 캡슐화와 상속을 보다 효과적이고 현실 세계에 근접하게 표현할 수 있게 해주는 매력적인 특징입니다. 하지만 기반 클래스 형식 포인터 변수로 파생된 개체를 관리하는 것은 치명적인 단점을 가져오게 합니다. 만약, 기반 클래스 형식에서는 약속할 필요가 없는 메서드가 파생 클래스 형식에 있을 경우 해당 메서드의 접근 수준을 public으로 제공하여도 접근하지 못하게 됩니다. 이러한 약점을 보완하기 위해 많은 OOP언어에서는 런 타임에 파생 개체 형식으로 캐스팅하는 방법을 제공하고 있으며 이를 하향 캐스팅이라 합니다.

 

 C++언어에서는 dynamic_cast를 통해 하향 캐스팅을 제공하고 있습니다. dynamic_cast를 사용하면 관리되는 실 개체의 형식이 캐스팅이 가능하지 않다면 0을 반환하고 맞다면 유효한 변환을 해 줍니다.

 

Musician *players[2];

players[0] = new Pianist();

players[1] = new Drummer();

 

for(int i = 0; i<2; i++)

{

         players[i]->Play();

}

 

Pianist *pianist=0;

 

for(int i = 0; i<2; i++)

{

         pianist = dynamic_cast<Pianist *>(players[i]);

         if(pianist != 0)

         {

                      pianist->Tuning();

         }

}

 예를 들어, 음악가 중에 피아니스트는 튜닝을 하고 드러머는 튜닝을 하지 않는다고 가정합시다. 그리고, 이들은 이 외에 많은 부분에 공통점이 있어 이들의 공통점들을 일반화하여 기반 클래스 음악가를 정의하기로 합시다. 이러한 음악가들을 구성하고 있는 오케스트라에서 공연을 할 때 피아니스트들은 튜닝을 먼저 하고 이 작업이 끝나고 나서 다 같이 연주한다고 한다면 다형성을 통해 일반화된 기능을 사용하고 하향 캐스팅을 통해 피아니스트의 튜닝과 같은 파생 클래스 형식에만 있는 기능을 사용할 수 있을 것입니다.


6장 

(모든 동영상 강의는 무료입니다.)

반응형