프로그래밍을 공부하다 보면 꼭 듣게 되는 조언이 있다.“구현 상속은 피하라. 인터페이스 상속과 조합(Composition)을 써라.”처음에는 이런 말들이 좀 어렵게 느껴졌다.“그냥 상속하면 되지, 왜 피하라고 하지?”그래도 공부를 하다 보니 이런 조언들이 단지 문법 얘기가 아니라, 설계 철학과 유지보수의 관점에서 나온다는 걸 알게 됐다.그런데, 요즘 언리얼 엔진을 배우면서 약간 혼란스러웠다.언리얼에서는 구현 상속을 너무 당연하게 쓰고 있었기 때문이다.AActor, UObject, UComponent 등 거의 모든 핵심 기능들이 상속을 전제로 만들어져 있다.게다가 Tick(), BeginPlay() 같은 오버라이드도 기본처럼 쓰인다.그래서 어느 순간 이런 의문이 생겼다.“도대체 왜 일반 C++에서는 구현 ..