ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 2024.03.06 - 오버라이딩(Overriding), 가상 함수(virtual)
    C# 2024. 3. 6. 16:15
    • 오버라이딩(Overriding)

    오버라이딩(Overrriding)은 부모 클래스에서 정의된 메서드를 자식 클래스에서 재정의 하는 것을 의미한다.

    부모 클래스에서 상속 받은 메서드를 재정의 하지 않으면, 자식 클래스의 메서드는 부모 클래스의 메서드를 가리킨다.

     

     

    다음은 자식 클래스에서 부모 클래스의 메서드를 재정의 한 것이다.

     

    다만, 이렇게 함수를 재정의 하는 것은 실제로 메서드 오버라이딩이 발생하지 않는 경우가 있다.

     

     

    다음 예제를 살펴보자.

     

     이 코드는 Child 클래스의 인스턴스를 Parent 클래스의 변수에 할당하고 있다. (업캐스팅이 일어난다.) 변수 c는 Parent 타입이지만, 실제로는 Child 클래스의 인스턴스를 참조하고 있다. 그러나 c를 통해 Print를 참조할 때 메서드 오버라이딩이 발생하지 않았다.(Child 클래스의 Print()가 사용되지 않았다.) 변수 c는 Parent 타입이기 때문에 Print를 호출하면 Parent 클래스의 Print()가 호출된다. c를 통해 Child의 Print()를 호출하려면 virtual과 override 키워드를 사용해서 메서드 오버라이딩을 해야한다.

     

     

    • 가상 함수(virtual)와 오버라이드(override)

     가상 함수는 virtual 키워드를 사용하여 만든 함수이다. virtual 키워드를 사용해서 부모 클래스에 가상 함수를 만들면, 자식 클래스에서 해당 함수를 재정의 할 수있도록 허락한다는 의미를 가진다. 자식 클래스에서 가상 함수를 재정의하려면, override 키워드를 사용해야 한다.

     

     

    이번에도 Child 인스턴스를 참조한 Parent 타입 변수 c를 만들어서 Print()를 호출했다. Parent 클래스의 Print()가 호출되는 것은 똑같으나, Parent의 Print()는 가상함수이기 때문에 Parent의 Print()가 호출되면 오버라이딩 된 Child의 Print()가 동작한다. 

     

     

    'C#' 카테고리의 다른 글

    2024.03.06 - 업캐스팅(Upcasting)  (0) 2024.03.06
    2024.03.06 - 추상화(Abstract)  (0) 2024.03.06
    2024.03.05 - 상속(inheritance), 접근 제한자  (0) 2024.03.06
    2024.03.05 - 프로퍼티(Property)  (0) 2024.03.05
    2024.03.05 - static 변수  (0) 2024.03.05
Designed by Tistory.