virtual과 override 키워드를 사용하지 않았을 때의 결과로 옳은 것은?
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();
정답: 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# 과목의 모든 문제를 순차적으로 풀어보세요. 진행상황이 자동으로 저장되어 언제든지 이어서 학습할 수 있습니다.