virtual과 override 키워드를 사용하지 않았을 때의 결과로 옳은 것은?

과목: C#

문제 번호: 2657

hard
virtual과 override 키워드를 사용하지 않았을 때의 결과로 옳은 것은?
class Animal
{
    public void Sound()  // virtual 없음
    {
        Console.WriteLine("Animal");
    }
}

class Dog : Animal
{
    public void Sound()  // override 없음
    {
        Console.WriteLine("Dog");
    }
}

// 실행 코드
Animal myDog = new Dog();
myDog.Sound();
A. "Dog" 출력
B. "Animal" 출력
C. 컴파일 오류 발생
D. "Animal Dog" 출력

정답: B



virtual-override 없이는 다형성이 작동하지 않아 참조 타입(Animal)의 메서드가 호출됩니다.

메서드 숨김(Method Hiding) 현상:
⦁ virtual-override 없음 → 다형성 미작동
⦁ 자식 메서드가 부모 메서드를 "숨김"
⦁ 컴파일러 경고 발생 (오류는 아님)

실행 방식 비교:

다형성 있음 (virtual-override):
Animal myDog = new Dog();
myDog.Sound();  // Dog의 Sound() 실행

다형성 없음:
Animal myDog = new Dog();
myDog.Sound();  // Animal의 Sound() 실행

Dog myDog2 = new Dog();
myDog2.Sound();  // Dog의 Sound() 실행

해결 방법:
1. virtual-override 사용 (권장)
2. new 키워드로 의도적 숨김 명시
public new void Sound() { }

핵심 교훈:
⦁ 다형성을 원한다면 반드시 virtual-override 사용
⦁ 없으면 참조 타입 기준으로 메서드 결정

💡 학습 팁

이 문제를 포함한 C# 과목의 모든 문제를 순차적으로 풀어보세요. 진행상황이 자동으로 저장되어 언제든지 이어서 학습할 수 있습니다.