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

자바(Java) 메소드 오버로딩과 타입 프로모션 완벽 정리

메소드 오버로딩(Method Overloading)은 동일한 이름의 메소드를 여러 개 정의하여, 서로 다른 타입의 매개변수에 대해 유사한 동작을 수행할 수 있도록 해주는 자바의 핵심 기능입니다.

타입 프로모션(Type Promotion)이란?

매개변수들이 서로 비슷한 타입일 경우에는 타입 프로모션(형 승격)을 활용할 수 있습니다. 타입 프로모션이란 더 작은 범위의 값을 자동으로 더 큰 범위의 타입으로 변환하는 것을 의미합니다.

예를 들어, byte 변수는 int 변수에 할당될 수 있으며, 이 과정에서 byte 값은 자동으로 int 타입으로 승격됩니다.

이러한 특성 덕분에 byte, short, int 등 어떤 정수 타입의 두 숫자를 더하더라도 단 하나의 메소드만으로 모든 경우를 처리할 수 있습니다. 아래 예제를 통해 확인해 보겠습니다.

예제 코드

public class Tester {
    public static void main(String args[]) {
        Tester tester = new Tester();
        byte a = 1, b = 2;
        short c = 1, d = 2;
        int e = 1, f = 2;
        System.out.println(tester.add(a, b));
        System.out.println(tester.add(c, d));
        System.out.println(tester.add(e, f));
    }
    public int add(int a, int b) {
        return a + b;
    }
}

실행 결과

3
3
3

결과 분석

실행 결과를 보면 byte, short, int 세 가지 서로 다른 타입의 인자를 전달했음에도 불구하고, 모든 호출이 add(int a, int b) 메소드에 의해 처리되어 동일하게 3이 출력되는 것을 확인할 수 있습니다.

그 이유는 컴파일러가 메소드 호출 시점에 전달된 byte와 short 값을 자동으로 int 타입으로 승격하기 때문입니다. 따라서 오버로딩된 여러 메소드를 일일이 작성하지 않아도, 가장 넓은 범위의 타입(int)을 받는 단일 메소드만 정의하면 효율적으로 코드를 관리할 수 있습니다.