[Java] 오버로딩(Overloading) vs 오버라이딩(Overriding)

seonwoo·2026년 1월 31일

Java

목록 보기
12/12

1. 메서드 시그니처란?

메서드 시그니처(Method Signature)란
메서드를 고유하게 식별하기 위해 사용하는 정보이다.

Java 기준으로 메서드 시그니처는 다음으로 구성된다.

메서드 이름 + 매개변수 타입 목록

반대로, 다음 요소들은 메서드 시그니처에 포함되지 않는다.

1. 반환 타입
2. 접근 제한자 (public, private 등)
3. static, final 키워드

void test(int a)
int test(int a)   // ❌ 시그니처 동일 → 컴파일 에러

위 두 메서드는 이름과 매개변수 타입이 같기 때문에
리턴 타입이 달라도 같은 시그니처로 판단된다.




2. Java의 메서드 오버로딩 (Overloading)

메서드 오버로딩(Overloading)은
같은 이름의 메서드를 여러 개 정의하는 것이다.

성립 조건

  • 메서드 시그니처에서 이름은 같아야 한다.
  • 다만, 매개변수 목록은 반드시 달라야 한다
    • 개수, 타입, 순서 중 하나라도 달라야 함


void test(int a) {}
void test(int a, int b) {}
void test(double a) {}

위 메서드들은 모두
매개변수 목록이 서로 달라 서로 다른 메서드 시그니처를 가지므로
오버로딩이 성립한다.

오버로딩 시 주의사항

int test(int a) {}
double test(int a) {} // ❌ 컴파일 에러

Java에서 메서드 시그니처에는 리턴 타입이 포함되지 않는다.

따라서 리턴 타입만 다른 경우
메서드 시그니처가 동일하게 판단되어 오버로딩이 성립하지 않는다.




3. Java의 메서드 오버라이딩 (Overriding)

메서드 오버라이딩(Overriding)은
부모 클래스의 메서드를 자식 클래스에서 재정의하는 것이다.

오버라이딩을 통해 자식 클래스는
부모 클래스의 동작을 자신의 상황에 맞게 변경할 수 있다.


성립 조건

  • 상속 관계가 있어야 한다.
  • 부모 클래스에 해당 메서드가 존재해야 한다.
  • 메서드 시그니처가 같아야 한다
    • 메서드 이름이 동일해야 한다.
    • 매개변수의 타입, 순서, 개수가 동일해야 한다.
  • 접근 제한자는 부모보다 더 좁아질 수 없다. (다형성 보장)

class Parent {
    Number getValue(int a, int b) {
        return a+b;   
    }
}

// Parent 클래스의 getValue() 메서드를 Child 클래스에서 오버라이딩
class Child extends Parent {
    @Override
    Integer getValue(int a, int b) {
        return a * b;
    }
}

오버라이딩 시 리턴 타입은 다음 규칙을 따른다.

  • 부모 메서드의 리턴 타입과 일치 해야한다.
  • 부모 리턴 타입의 하위 타입(covariant return) 을 반환할 수 있다.
    예: java.lang.Numberjava.lang.Integer
profile
Github : https://github.com/melly8954

0개의 댓글