[Java] 메소드 오버로딩

Bam·2024년 2월 26일
0

Java

목록 보기
27/98
post-thumbnail

메소드 오버로딩

메소드 오버로딩은 한 클래스 내에서 같은 이름의 함수를 여러 개 정의하는 것(중복 정의)을 의미합니다. 일반적으로 오버로딩이라고 부르기에 이하 오버로딩이라고 부르겠습니다.

오버로딩은 다음 세 가지 조건을 충족하면 작성할 수 있습니다.

  • 메소드의 이름이 같아야한다.
  • 메소드의 매개변수 타입 또는 개수가 달라야한다.
  • 매개변수의 타입, 개수가 일치하더라도 반환값 타입이 다르면 안된다.

즉, 오버로딩은 이름이 같은 함수를 매개변수의 타입이나 개수에 차이를 두어 여러개를 정의하는 것이라고 할 수 있습니다.


사실 그동안 오버로딩을 알게 모르게 엄청 많이 사용했습니다. 바로 println() 메소드인데요. 단순히 출력하고 개행을 하는 메소드이지만 사실은 전달하는 인수(Argument)에 따라 오버로딩된 메소드를 호출하는 식으로 수행되고 있었습니다.

사진은 공식문서 발췌인데 어떤 타입을 전달하든지 간에 제대로 출력을 하기 위해 오버로딩을 이용하고 있는 대표적인 예시가 println()입니다.

만약 오버로딩이 불가능했다면 저 타입의 수 만큼 제각기 다른 println 함수를 이용했어야할지도 모릅니다. 이처럼 오버로딩은 메소드 이름을 짓거나 코드를 반복하게 하는 부담을 크게 줄여주는 기능을 하고 있습니다.


위 사진과 같이 자바에서는 같은 반환 타입의 같은 이름의 메소드를 선언하면 이미 정의되었다고 하며 오류를 발생시킵니다.

하지만 메소드 오버로딩을 이용해서 매개변수의 개수를 다르게 하면, 같은 타입의 같은 이름의 메소드를 중복 정의할 수 있습니다.

public class Main {
    public static void main(String[] args) {
        method();
        method(1);
		method(1, 2);
        method("hello");
    }

    static void method() {
        System.out.println("매개변수가 없는 메소드");
    }

    static void method(int x) {
        System.out.println("매개변수가 int형인 메소드");
    }
    
    static void method(int x, int y) {
        System.out.println("매개변수가 int형 2개인 메소드");
    }

    static void method(String str) {
        System.out.println("매개변수가 String형인 메소드");
    }
}

0개의 댓글