virtual 키워드 없이 override가 가능한가?

정의적으로 보았을 때

불가능하다. 만드신 이름을 말할 수 없는 분이 말씀하시길

오버라이드 : 파생 클래스에서 기반 클래스의 가상 함수와 같은 이름, 같은 인자 목록을 가진 함수를 정의 하는 것으로 기반 클래스가 정의한 인터페이스를 통해 함수를 호출 가능하게 하는 것.

이리 말씀하시었으니..

가상 함수

말 그대로 virtual 키워드를 쓰지 않은 애들은 탈락이 아닌가? 하지만 자식 클래스에서 정의해 가려지게 만들면 같다고 잘못 생각할 수 있다.

기반 클래스가 정의한 인터페이스

같은 형태로 자식 클래스에서 정의하는 것도 오버라이딩이라고 설명하는 사람들 역시 dynamic dispatch를 보인다고 이건 hiding이라고 한다. 단순히 그러는 것은 정의와 맞지 않다. 순수히 영어 단어적 의미로 사용하려고 했다면 그 사람은 프로그래밍 언어가 아니라 영문학을 하고 있는 것이다.

 

결론

virtual이 없으면 override할 수 없다. 일부 비슷한 양상을 보이도록 한다 해도 그것은 정의된 override의 의미와 일치하지 않는다.

Leave a Reply