DevDino

[Unity 기술면접] 메서드 Override와 Overload 본문

Unity/기술면접

[Unity 기술면접] 메서드 Override와 Overload

데브다이노 2025. 12. 22. 09:18

"Override와 Overload의 차이는 무엇인가요?"

메서드 Override와 Overload

Override (오버라이드)

- 개념: 부모 클래스의 virtual(또는 abstract)메서드를 자식 클래스에서 재정의하여 사용하는 기능입니다.


- 특징: 프로그램이 실행되는 런타임 환경에서 실제 할당된 객체의 타입에 따라 어떤 메서드가 실행될지 결정됩니다(동적 바인딩).


- 조건: 부모 메서드와 이름, 반환 타입, 매개변수가 모두 동일해야 하며, 자식 클래스에서는 override 키워드를 명시해야 합니다.(부모의 기존 로직이 필요할 경우 base.메서드이름()으로 호출할 수 있습니다.


- 의의: 객체지향의 핵심인 다형성을 구현합니다. 같은 타입(부모)으로 변수를 선언해도, 실제 생성된 객체(자식)에 따라 다른 동작을 수행하게 합니다.

class Character {
    public virtual void Attack() { Debug.Log("기본 공격"); }
}

class Player : Character {
    public override void Attack() { Debug.Log("플레이어 공격"); }
}
// 다형성 예시
Character c = new Player();
c.Attack(); //  플레이어 공격

 

Overload (오버로드)

 

- 개념: 같은 이름의 메서드를 매개변수의 형태만 다르게 하여 여러 개 정의하는 기능입니다.


- 특징: 코드를 컴파일하는 시점에 매개변수를 분석하여 어떤 메서드를 호출할지 미리 결정합니다(정적 바인딩).


- 조건: 메서드 이름은 반드시 같아야 하며, 매개변수의 개수, 타입, 순서 중 하나 이상이 달라야 합니다. (단, 반환 타입만 다르게 하는 것은 불가능합니다.


- 의의: 비슷한 기능을 수행하지만 전달받는 데이터의 형태가 다양할 때 유연하게 대응하기 위해 사용합니다.

void Attack() { }
void Attack(int damage) { }
void Attack(string target, int damage) { }

 

주의점
오버로드를 과도하게 사용하면 비슷한 이름의 메서드가 너무 많아져 유지보수 시 어떤 버전이 호출되는지 혼동을 줄 수 있습니다.
C# 환경에서는 오버로드 대신 선택적 매개변수(Optional Parameters)를 활용하면, 메서드의 개수를 늘리지 않고도 깔끔하게 다양한 호출 방식을 지원할 수 있습니다.

public void Attack(int damage = 10, string target = "Enemy") {}

Override와 Overload의 차이

가장 큰 차이는 '상속 여부'와 '결정 시점'입니다.

Override는 상속 관계에서 부모의 메서드를 자식 클래스에서 재정의하는 것으로 런타임(Runtime)에 호출될 메서드가 결정됩니다.

Overload는 같은 클래스 내에서 이름이 같은 메서드를 여러 개 정의하는 것으로 컴파일 타임(Compile-time)에 결정됩니다.