본문 바로가기
TIL

오버로딩과 오버라이딩

by vvin39 2025. 4. 18.

내일배움캠프 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 잊지 말기
    → 메서드 구조는 그대로, 내용만 바꿈

 

 

최근댓글

최근글

skin by © 2024 ttuttak