CS/개념

오버로딩(Overloading)과 오버라이딩(Overriding)

tae-woong 2025. 10. 8. 21:32

다형성(Polymorphism)을 구현하는 방식이지만, 동작 원리와 사용 목적에서 명확한 차이가 있습니다.

 

오버로딩 (Overloading) 이란?

"이름은 같지만, 매개변수가 다른 여러 개의 메서드를 정의하는 것"

오버로딩은 하나의 클래스 내에서 같은 이름의 함수를 여러 개 가질 수 있게 해주는 기능입니다. 컴파일러는 메서드를 호출할 때 전달되는 매개변수의 개수, 타입, 순서를 보고 어떤 메서드를 호출할지 결정합니다. 즉, 메서드 시그니처(Method Signature)의 일부가 달라야 합니다.

 

핵심 특징:

  • 같은 클래스 내에서 발생합니다.
  • 메서드 이름은 동일해야 합니다.
  • 매개변수의 개수나 타입, 순서가 달라야 합니다.
  • 반환 타입(Return Type)만 다른 것은 오버로딩으로 인정되지 않습니다.
  • 컴파일 타임(Compile-time)에 어떤 메서드를 호출할지 결정됩니다. (정적 다형성)

C# 예시 코드:

class Calculator
{
    // int형 매개변수 2개를 받는 Add 메서드
    public int Add(int a, int b)
    {
        return a + b;
    }

    // double형 매개변수 2개를 받는 Add 메서드 (타입이 다름)
    public double Add(double a, double b)
    {
        return a + b;
    }

    // int형 매개변수 3개를 받는 Add 메서드 (개수가 다름)
    public int Add(int a, int b, int c)
    {
        return a + b + c;
    }
}

// 호출 예시
Calculator calc = new Calculator();
calc.Add(10, 20);       // 첫 번째 Add 호출
calc.Add(3.14, 2.5);    // 두 번째 Add 호출
calc.Add(1, 2, 3);      // 세 번째 Add 호출

 

오버라이딩 (Overriding) 이란?

"부모 클래스로부터 상속받은 메서드를 자식 클래스에서 재정의하는 것"

오버라이딩은 상속 관계에 있는 클래스 간에 발생합니다. 부모 클래스에 정의된 메서드의 기능을 자식 클래스에서 자신에게 맞게 변경하고 싶을 때 사용합니다. 이때, 재정의하려는 메서드는 부모 클래스에서 virtual 키워드로 선언되어야 하고, 자식 클래스에서는 override 키워드를 사용해야 합니다.

 

핵심 특징:

  • 상속 관계에 있는 클래스 간에 발생합니다.
  • 메서드 이름, 매개변수, 반환 타입이 모두 동일해야 합니다. (완전히 같은 시그니처)
  • 부모 클래스의 메서드는 virtual (재정의 가능)로, 자식 클래스의 메서드는 override (재정의 함)로 명시해야 합니다. (C++, C# 기준)
  • 런타임(Run-time)에 어떤 메서드를 호출할지 결정됩니다. (동적 다형성)

C# 예시 코드:

class Animal
{
    // 자식 클래스에서 재정의할 수 있도록 virtual 키워드 사용
    public virtual void Speak()
    {
        Console.WriteLine("동물이 소리를 낸다.");
    }
}

class Dog : Animal // Animal 클래스를 상속받는 Dog 클래스
{
    // 부모의 Speak 메서드를 재정의
    public override void Speak()
    {
        Console.WriteLine("멍멍!");
    }
}

// 호출 예시
Animal myPet = new Dog(); // 부모 타입으로 자식 객체를 참조
myPet.Speak();            // 출력 결과: "멍멍!" (런타임에 Dog의 Speak가 호출됨)

 

오버로딩 vs 오버라이딩 비교표
항목 오버로딩 (Overloading)
오버라이딩 (Overriding)
정의 같은 이름, 다른 매개변수의 메서드를 여러 개 정의
상속받은 부모 메서드를 재정의
범위 같은 클래스 내
상속 관계의 부모-자식 클래스 간
메서드 시그니처 다름 (매개변수 타입, 개수, 순서)
완전히 동일 (이름, 매개변수, 반환 타입)
핵심 키워드 없음
virtual, override (C#, C++)
바인딩 시점 컴파일 타임 (정적 바인딩)
런타임 (동적 바인딩)
목적 이름 하나로 다양한 매개변수를 처리 (편의성)
기능 확장 및 수정 (다형성 구현)

'CS > 개념' 카테고리의 다른 글

OOP (Object-Oriented Programming)  (0) 2025.10.07