본문 바로가기
프로그래밍/c#

c#_42 클래스 Virtual과 Override 가상 메소드(함수) 1

by 지나팩 2021. 9. 18.

가상 함수에 대해서 알아보도록 하겠습니다. 클래스 내의 멤버 메소드에 virtual 키워드를 명시하면 그 메소는 상속을 받은 자식 함수에서 재정의를 할 수 있게 됩니다. 

위 예제에서 보듯 Test 클래스를 상속 받은 Child 클래스에서 TestFunc()라는 메소드를 재정의하고 있습니다. 이렇게 하는 이유는 메소드를 통한 기본 기능과 결과는 똑같을 수 있지만 그 과정은 각 개체들마다 다를 수 있기 때문입니다. 예를 들어 밥을 먹는 행위를 하는 메소드가 있다면 누군가는 오른손으로 먹지만 누군가는 왼손으로 먹을수도 있고 포크나 젓가락 등 먹는 행위는 같지만 그 과정은 다 다를 수 있습니다.

위 예제를 보시면 character 클래스에 Attack이라는 메소드가 있고 이를 가상 함수로 만들었습니다. 그리고 character 클래스를 Knight클래스와 Archer 클래스가 각각 상속을 받았고 각 클래스에 Attack메소드를 재정의 하고 있습니다. 이처럼 같은 공격이라는 행위라도 Knight는 검을 Archer는 활을 이용하여 공격합니다. 

재정의를 하고 싶지 않다면 메소드 자체를 구현하지 않으면 됩니다. 그러면 부모의 메소드가 호출이 됩니다.

이후에 알아보게 될 abstract 추상화 메소드 처럼 무조건 재정의를 할 필욘 없습니다. 재정의가 필요할 경우 override키워드를 통해서 재정의를 하고, 아니면 new 키워드를 통해 부모의 메소드를 아예 숨길수도 있습니다.

base 키워드를 통해서 부모의 메소드 또한 호출할 수 있습니다.

'프로그래밍 > c#' 카테고리의 다른 글

c#_44 추상화 클래스, 메소드 abstract  (0) 2021.09.29
c#_43 제너릭 Generics 타입 <T>  (0) 2021.09.19
c# 네임스페이스 Namespace  (0) 2021.09.15
c#_null 조건 연산자들  (0) 2021.09.13
c#_null ?? 널?  (0) 2021.09.11

댓글