내일배움캠프 10일차 TIL
❓ 왜 둘이 헷갈릴까?
둘 다 메서드 이름은 같은데
"뭔가 다르게 동작하는 걸 가능하게" 만들어줘서 비슷해 보이지만 완전 다름!
오버로딩은 "이름은 같지만 매개변수 다르게 여러 개 만들기"
오버라이딩은 "부모가 만든 기능을 내 입맛대로 바꾸기"
📌 오버로딩 (Overloading)
같은 이름의 메서드 여러 개 정의 가능
→ 매개변수의 타입, 개수, 순서가 달라야 함
void Attack() {
Debug.Log("기본 공격!");
}
void Attack(int power) {
Debug.Log($"{power} 데미지 공격!");
}
void Attack(string skillName, int power) {
Debug.Log($"{skillName} 스킬로 {power} 데미지!");
}
메서드가 하는 일은 비슷한데, 입력이 다르면 그에 맞게 동작하도록 해주는 개념이야.
컴파일 타임에 결정됨 (정적 바인딩)
📌 오버라이딩 (Overriding)
부모 클래스에서 정의한 메서드를 자식 클래스에서 재정의
→ virtual, override 키워드 사용
class Enemy {
public virtual void Die() {
Debug.Log("적이 사망했습니다.");
}
}
class Boss : Enemy {
public override void Die() {
Debug.Log("보스가 폭발하며 사망했습니다!");
}
}
부모가 만들어 둔 기본 동작을 자식 클래스가 필요에 따라 바꿔주는 기능
런타임에 결정됨 (동적 바인딩)
오버로딩 vs 오버라이딩
| 항목 | 오버로딩 (Overloading) | 오버라이딩 (Overriding) |
| 정의 위치 | 같은 클래스 안 | 부모 → 자식 클래스 간 |
| 메서드 이름 | 같음 | 같음 |
| 매개변수 | 다름 (개수, 타입, 순서 등) | 동일해야 함 |
| 반환 타입 | 다를 수 있음 | 같거나 호환 가능해야 함 |
| 키워드 | 없음 | virtual, override |
| 실행 시점 | 정적 바인딩 (컴파일 시) | 동적 바인딩 (실행 중 결정됨) |
| 목적 | 같은 이름으로 여러 방식 처리 | 부모 기능을 재정의 |
💡 느낀 점
- 처음엔 "이름 같고 메서드 비슷하게 쓰이네?" 하고 넘겼는데, 이번에 완전 다르게 쓰이는 거라는 걸 확실히 알게 됐다.
오버로딩은 하나의 기능을 다양한 방식으로 처리하고,
오버라이딩은 기존 기능을 내 상황에 맞게 바꾸는 것! - 이제 메서드를 만들 때 같은 이름으로 여러 개 만들지? → 오버로딩
부모가 준 기능 수정해? → 오버라이딩 하고 바로 구분할 수 있을 것 같다
.
❗ 기억하고 싶은 포인트
- 오버로딩은 “편의성 확장”, 오버라이딩은 “동작 커스터마이징”
- 오버로딩: 이름은 같지만 입력값이 다르면 OK
→ 기능 비슷한 메서드 여러 개 만들 때 유용
→ 매개변수만 다르게! - 오버라이딩: 부모의 동작을 자식이 바꿀 때
→ virtual + override 잊지 말기
→ 메서드 구조는 그대로, 내용만 바꿈

'TIL' 카테고리의 다른 글
| Git 브랜치 전환 & 충돌 해결 (0) | 2025.04.22 |
|---|---|
| TextRPG 팀 프로젝트 기획 & 협업 환경 세팅 (0) | 2025.04.21 |
| 이름 입력 흐름 제어.. (2) | 2025.04.17 |
| 델리게이트(Delegate)와 이벤트(Event) (0) | 2025.04.16 |
| 인터페이스 vs 추상 클래스 (0) | 2025.04.15 |