| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 | 31 |
- 스타일 지침
- 기술면접
- event bus
- 게임 디자인 패턴
- 테이블 데이터
- 개발
- Dependency Injection
- 추상 팩토리 패턴
- MVP 패턴
- New Input System
- 의존성 주입
- 프로젝트 생성
- 콘솔 앱
- Visual Studio Installer
- 이벤트 버스
- 데이터 형식
- 유니티
- Canvas Scaler
- C#
- unity
- 오브젝트 풀
- Abstract Factory Pattern
- 구글 스프레드 시트
- Unity 기술면접
- Di
- 구글플레이콘솔
- 상태 패턴
- Render Mode
- github desktop
- Object Pool
- Today
- Total
DevDino
[Unity 기술면접] 메서드 Override와 Overload 본문
"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)에 결정됩니다.
'Unity > 기술면접' 카테고리의 다른 글
| [Unity 기술면접] interface vs abstract class (0) | 2025.12.26 |
|---|---|
| [Unity 기술면접] UGUI vs UI Toolkit (0) | 2025.12.24 |
| [Unity 기술면접] Draw Call 관리 (1) | 2025.12.18 |
| [Unity 기술면접] Prefab과 Scene 관리 (0) | 2025.12.17 |
| [Unity 기술면접] GameObject와 Component의 관계 (0) | 2025.12.15 |