프로그래밍 언어/Java

[Java] 오버로딩이란?

happy_life 2022. 6. 22. 21:31

목차

1. 오버로딩이란?

2. 오버로딩 조건

3. 오버로딩 예시

4. 오버로딩 장점

5. 가변인자(varargs와 오버로딩)

 

 

 

 

 

1. 오버로딩이란?

메서드는 보통 각기 다른 이름을 갖지만, 이름이 같은 경우도 있다. 매개 변수의 개수나 타입이 다르면, 같은 이름인 경우에도 사용할 수 있다. 

이렇게 한 클래스 내에 같은 이름의 매서드를 여러 개 정의하는 것을 메서드 오버로딩이라고 한다.

 

2. 오버로딩 조건

  1. 메서드 이름이 같다.
  2. 매개변수의 개수 또는 타입이 다르다

 

3. 오버로딩 예시

잘못된 예시 1 : 매개변수의 이름만 다른 경우

매개변수의 이름만 같고, 매개변수의 타입과 개수는 같아 오버로딩이 성립하지 않는다.

 

 

잘못된 예시 2 : return 타입만 다른 경우

역시 매개변수의 타입과 개수는 같아 오버로딩이 성립하지 않는다.

 

 

가능한 예시1:  매개변수의 타입이 다른 경우

매개변수의 개수는 같으나, 타입이 다르므로 오버로딩이 성립한다.

 

 

4. 오버로딩 장점

메서드가 단지 이름으로만 구별된다면, 한 클래스 내의 모든 메서드가 이름이 다 달라져야 한다. 

예를 들어 println 같은 경우 매개변수에 여러가지 타입이 들어가는데 이를 아래와 같이 모두 구분해주어야 한다.

오버로딩이 없는 경우

void println()
void printlnChar(Char x)
void printlnInt(Int x)

하지만 오버로딩이 가능하기 때문에 println()하나의 메서드만으로 다양한 타입의 인자를 넣어줄 수 있다.

오버로딩 시

void println()
void println(Char x)
void println(Int x)

이 메서드를 사용하는 사람은 println만 기억하고 매개변수 타입에 상관없이 코드를 작성할 수 있게 된다. 또 메서드도 짧게 할 수 있어 오류 등의 가능성을 줄일 수 있다.

 

 

5. 가변인자(varargs와 오버로딩)

기존에는 메서드의 매개변수 개수가 고정적이었으나, JDK1.5부터 동적으로 지정해 줄 수 있게 되었다. 이 기능을 가변인자라고 한다. 가변인자는 맨 마지막 파라미터로 들어가야 한다.

 

여러 문자열을 합쳐 반환하는 메서드를 만들어보자.

코드 예제

static String addAll(String s1) {...}
static String addAll(String s1, String s2) {...}
static String addAll(String s1, String s2, String s3) {...}
static String addAll(new String[] {'A','B'}) {...}

이러한 코드를 가변인자를 사용하면 하나로 대체할 수 있다.

static String addAll(String... str){...}


주의할 점

public class ArgsEx {
    public static void main(String[] args) {
        String[] strArr = {"A", "B", "C"};

        System.out.println(concatenate("",strArr));
        //ABC
        System.out.println(concatenate("-",strArr));
        //A-B-C-

        System.out.println(concatenate("-", "A","B"));
        //A-B-
//        System.out.println(concatenate("-", {"A","B"})); 동작하지 않음
    }

    static String concatenate(String delim, String... str) {
        String result = "";
        for (String s : str) {
            result += s + delim;
        }
        return result;
    }
}

주석 처리 된 코드를 보듯 {"A","B"}의 형식은 인자로 들어갈 수 없다. 아래처럼 바꿔줘야 한다.

{"A", "B"} -> new String[]{"A", "B"}

 

또한 가변인자는 마지막 파라미터로 넣어주어야 한다.

 

'프로그래밍 언어 > Java' 카테고리의 다른 글

[Java] 변수의 초기화  (0) 2022.06.23
[Java] 생성자란?  (0) 2022.06.22
[Java] 변수와 메서드  (0) 2022.06.22
[Java] 클래스와 객체  (0) 2022.06.22
[Java] 배열(Array)  (0) 2022.06.21