Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

자바 메서드 오버로딩 vs 메서드 오버라이딩: 핵심 차이점 완벽 정리

자바(Java)에서 메서드 오버로딩(Method Overloading)메서드 오버라이딩(Method Overriding)은 이름이 비슷해 혼동하기 쉽지만, 동작 방식과 사용 목적이 완전히 다른 개념입니다. 두 개념의 차이를 명확히 이해하면 객체지향 프로그래밍의 다형성(Polymorphism)을 더 깊이 있게 활용할 수 있습니다.

메서드 오버로딩 vs 메서드 오버라이딩 주요 차이점

1. 다형성의 종류

메서드 오버로딩은 컴파일 타임 다형성(정적 다형성)에 해당합니다. 컴파일러가 호출 시점에 어떤 메서드가 실행될지 결정하기 때문입니다. 반면 메서드 오버라이딩은 런타임 다형성(동적 다형성)으로, 프로그램 실행 중에 실제 객체의 타입에 따라 호출될 메서드가 결정됩니다.

2. 목적과 역할

메서드 오버로딩은 같은 이름의 메서드를 다양한 매개변수 조합으로 정의하여 코드의 가독성과 재사용성을 높이는 데 목적이 있습니다. 반면 메서드 오버라이딩은 하위 클래스가 상위 클래스에 정의된 메서드를 재정의하여 자신만의 구체적인 구현을 제공함으로써, 상위 클래스의 동작을 대체하는 역할을 합니다.

3. 선언 위치

메서드 오버로딩은 하나의 클래스 내부에서 이루어지는 반면, 메서드 오버라이딩은 상속 관계에 있는 하위 클래스(자식 클래스)에서 이루어집니다.

4. 매개변수 규칙

메서드 오버로딩에서는 각 메서드의 매개변수의 개수, 타입, 순서가 서로 달라야 합니다. 반면 메서드 오버라이딩에서는 상위 클래스의 메서드와 매개변수가 완전히 동일해야 하며, 반환 타입도 같거나 공변(covariant) 타입이어야 합니다.

비교 요약표

  • 다형성 유형: 오버로딩은 컴파일 타임 다형성 / 오버라이딩은 런타임 다형성
  • 목적: 오버로딩은 코드 가독성 향상 / 오버라이딩은 하위 클래스에서 상위 클래스 메서드의 구체적인 구현 제공
  • 선언 범위: 오버로딩은 하나의 클래스 내부 / 오버라이딩은 상속 관계의 하위 클래스
  • 매개변수: 오버로딩은 매개변수가 달라야 함 / 오버라이딩은 매개변수가 동일해야 함

이처럼 두 개념은 모두 '같은 메서드 이름'을 사용한다는 점에서 유사해 보이지만, 오버로딩은 새로운 메서드를 추가하는 것이고 오버라이딩은 기존 메서드를 대체하는 것이라는 점을 기억하면 쉽게 구분할 수 있습니다.