다루는 내용
- 다형성
- 재정의
- 무효화
이번에는 OOP의 세 기둥중에 세번째 기둥이라 할 수 있는 다형성에 대해 살펴보기로 하자.
다형성은 형식에 대한 부분과 행위에 대한 부분으로 나눌 수가 있다.
먼저, 형식에 대한 다형성은 기반 클래스 형식의 변수 혹은 기반 클래스 형식을 원소로 하는 컬렉션과 배열에서 기반 클래스 형식을 통한 접근을 하는 것을 말한다.
또한, 행위에 대한 다형성은 기반 클래스에서 정의한 행위를 파생 클래스에서 재정의를 함으로써 기반 클래스 형식의 변수로 접근을 하더라도 실제 인스턴스의 형식에 맞는 행위를 할 수 있도록 하는 것을 말한다. (여기서 행위를 메소드로 생각해도 무리가 없다.)
이를 위해 기반 클래스에서는 virtual 키워드를 통해 특정 행위의 경우 파생 클래스에서 재정의 될 수 있다는 것을 명시하고 파생 클래스에서는 override 키워드를 통해 기반 클래스의 가상 메소드를 재정의 할 수 있다.
Look & Feel & Think 먼저 Musicaian이라는 기반 클래스처럼 virtual 키워드를 사용해서 Play라는 메소드는 파생 클래스를 통해 재정의 가능함을 명시를 한다.
파생 클래스에서는 재정의 할 메소드에 override 키워드를 통해 재 정의할 수 있다.
파생 클래스에서는 재정의를 하더라도 base를 사용해서 기반 클래스의 메소드를 사용할 수 있다.
파생 클래스에서 반드시 재정의를 해야 하는 것은 아니다.
다음의 예는 base 클래스 형식을 원소로 하는 배열을 통해 파생 클래스 형식의 인스턴스를 관리하고 사용하는 예를 보여주고 있다. Look & Feel이 가능하리라 믿고 설명을 생략한다.
|
경우에 따라서는 기반 클래스에 virtual 키워드를 사용하지 않은 메소드를 파생 클래스에서 new 키워드를 통해 무효화를 시킬 수 있다. 이럴 경우에는 인스턴스에 따른 메소드가 동작하는 것이 아니라 변수 형식에 따른 메소드가 동작한다.
Look & Feel & Think 다음에서는 기반 클래스인 Musician 클래스에는 virtual이 명시되지 않은 Greeting이라는 메소드를 정의를 하였다. 그리고 파생 클래스인 Drumber 클래스에서는 new 키워드를 사용하여 Greeting이라는 메소드를 정의를 하였다.
이를 사용하는 예로써 기반 클래스 형식의 변수 m에 파생 클래스 인스턴스를 생성해서 메소드를 호출을 할 때와 파생 클래스 형식의 변수 d에 파생 클래스 인스턴스를 생성해서 메소드를 호출하는 예이다. 결과를 보고 Look & Feel & Think하라.
|
이 외에도 기반 클래스의 virtual 메소드를 파생 클래스에서 sealed override를 명시함으로써 더 이상 파생이 되지 못하도록 봉인시킬 수도 있다. 또한, 이렇게 봉인된 메소드를 new를 통해 무효화도 가능하다.
이 모든 것이 MSDN을 기반으로 작성한 것이니 자세한 사항이나 정확한 기술은 MSDN을 참고하실 수 있을 것이다.
'언어 자료구조 알고리즘 > C# 언어 문법' 카테고리의 다른 글
17. 인터페이스(Interface) (0) | 2009.08.19 |
---|---|
15. 상속 (0) | 2009.08.19 |
14.정적 클래스 및 정적 멤버 (0) | 2009.08.19 |
13.메소드 (0) | 2009.08.19 |
12. 속성(Property) (0) | 2009.08.19 |
11.Class (0) | 2009.08.19 |
10.Casting (0) | 2009.08.19 |
9.String (0) | 2009.08.19 |
8. Object (0) | 2009.08.19 |
7. 배열 (0) | 2009.08.19 |