본문 바로가기
JAVA/기본

#4 오버로딩(overloading)

by 히포파타마스 2021. 4. 28.

오버로딩

 

1. 오버로딩이란?

한 클래스 내에 같은 이름의 메서드를 여러 개 정의 하는 것을 뜻한다.

 

 

2. 오버로딩의 조건

오버로딩의 조건은 아래와 같다.

 

■ 매서드 이름이 같아야 한다.

■ 매개변수의 개수 또는 타입이 달라야 한다.

 

위의 조건에서 중요한 것은 오버로딩은 오로지 매개변수로만 구별 될 수 있다는 것이다.

 

예를 들어 반환 타입은 오버로딩을 구현하는데 아무런 영향을 주지 못한다.

 

※ 단 매개변수 타입의 위치를 바꾸는 것은 오버로딩으로 인정된다.

 

 

[매개변수 타입의 위치만 바뀐 오버로딩]

public class Main {
    static public void print_test(int a, String b) {
        System.out.println(a);
        System.out.println(b);
    }

    static public void print_test(String a, int b) {
        System.out.println(a);
        System.out.println(b);
    }

    public static void main(String args[]) {
        print_test("Hello",1);
        print_test(2, "HI");
    }
}

print_test 매서드는 모두 동일하게 int형과 String형의 매개변수를 받지만 각 타입의 위치만 서로 바뀌어있다.

 

 

[결과]

Hello
1
2
HI

이와 같이 매개변수의 갯수와 타입이 같더라도 위치가 다르면 오버로딩으로 인정된다는 것을 알 수 있다.

 

매개변수의 순서가 중요하지 않은 매서드의 경우, 이와 같은 오버로딩은 매개변수의 순서를 외워도 되지 않아도 된다는 장점이 있다.

 

 

3. 오버로딩의 장점

오버로딩의 가장 대표적인 예는 println 메서드이다.

 

 

[다양한 매개변수를 받는 println]

public class Main {
    public static void main(String args[]) {
        boolean Boolean = false;
        char Char = 'A';
        double Double = 1.0;
        int Int = 1;
        String string = "Hello";

        System.out.println(Boolean);
        System.out.println(Char);
        System.out.println(Double);
        System.out.println(Int);
        System.out.println(string);
    }
}

 

 

[결과]

false
A
1.0
1
Hello

위의 예제와 같이 println 메서드는 오버로딩에 의해 다양한 타입의 매개변수를 받을 수 있다.

 

이처럼 오버로딩은 동일한 역할을 하는 매서드가 여러 매개변수를 받아야 할 때 유용하다.

 

 

4. 오버로딩과 가변인자

매개변수로 가변인자를 사용하는 매서드는 오버로딩 할 때 에러가 나기 쉽기 때문에 가능하면 가변인자를 사용한 메서드는 오버로딩 하지 않는 것이 좋다.

'JAVA > 기본' 카테고리의 다른 글

예외 처리(exception handling)  (0) 2021.08.02
#5 생성자(Constructor)  (0) 2021.04.28
#3 변수, 메서드  (0) 2021.04.23
#2 클래스, 인스턴스  (0) 2021.04.21
#1 객체 지향 프로그래밍  (0) 2021.04.21

댓글