다형성 (Polymorphism)

2021. 6. 17. 22:24
728x90

클래스는 상속 관계에 있으므로 참조 변환이 가능하다.

  • "Upcasting" : 상위를 참조하여 하위 class를 통해 구현하기 (구현은 대입 연산자 '='을 사용)
  • "Downcasting" : 하위를 참조
    ex) A test = (A) objB;  //B의 객체를 A의 참조변수로 사용

이건 박싱/언박싱과 다른 개념이다!

  • 박싱 : 값 형식을 object형으로 변환
  • 언박싱 : object형을 기존 값 형식으로 변환
  • 반드시 cast를 사용하여 데이터형을 명시해야함
 

박싱/언박싱

[ 박싱 ] 박싱 (boxing) : data type을 최상위 object형으로 변환하여 힙 메모리에 저장. → 힙(heap) 메모리 = 임시로 사용하는 메모리 int m = 123; object obj = m; // int형 변수를 obj형으로 변환 m = 456; /..

webit22.tistory.com

 

다형성(Polymorphism) : 다양한 형태.

 [ 일반적인 형태 ] 

  • 상위 class에서 하위 class를 호출
class A {

    public virtual void Print(){
    	...
    } //하위 class에서 재정의할거면 외부에서 접근 가능한 public으로 선언해야함

}

class B : A { //A를 재정의
    
    public override void Print(){
    	...
    }

}

class Program {
    
    ...
    
    A test = new B(); //A를 참조하여 상위에서 하위를 호출 (상위 class를 타고 내려가면서 하위 class에 접근)
    
    test.Print();

}



 [ type + cast 형태 ] 

class A {

    
    public virtual void Print(){
    	...
    } //하위 class에서 재정의할거면 외부에서 접근 가능한 public으로 선언해야함

}

class B : A { //A를 재정의
    
    public override void Print(){
    	...
    }

}

class Program {
    
    static void Main(string[] args){
    	
        A test1 = new B(); //A를 참조하여 B의 객체 생성
		
        test1.Print(); //B의 Print() 메서드 실행
        //cast형을 이용한 참조
        
        B test2 = new B(); //B 객체 생성
        
        A test3 = (A)test2; //B의 객체를 A의 참조변수로 사용. 여기서 (A) 는 명시적 형변환을 의미함. (A) 생략 가능
        
        test3.Print(); //B의 Print() 메서드 실행
    
    }
    //A를 참조하여 상위에서 하위를 호출 (상위 class를 타고 내려가면서 하위 class에 접근)
    
}
728x90

'C# > C# 문법' 카테고리의 다른 글

인덱서 (Indexer)  (0) 2021.06.17
속성(Property)  (0) 2021.06.17
오버라이드(Override), 오버로드 (Overload)  (0) 2021.06.17
상속(Inheritance), 추상클래스(Abstract Class)  (0) 2021.06.17
파일 입출력  (0) 2021.06.15

BELATED ARTICLES

more