[Day 3 | Java] 오버로딩과 가변인자

y♡ding·2024년 10월 16일
0

데브코스 TIL

목록 보기
10/163

📌 메서드 오버로딩 (Method Overloading)

오버로딩(Overloading)은 하나의 클래스 내에서 같은 이름의 메서드를 여러 개 정의할 수 있는 기능이다. 자바에서는 매개변수의 개수 또는 타입이 다르면, 같은 이름의 메서드를 사용할 수 있다. 즉, 메서드 이름은 같지만, 매개변수 목록이 다르면 자바는 이를 다른 메서드로 구분한다. 이처럼 같은 이름의 메서드를 여러 개 정의하는 것을 메서드 오버로딩이라고 한다.

🤙🏻 오버로딩의 조건

  1. 메서드 이름이 같아야 한다.

    public void something() { }
    public void something(int a) { }
    public void something(int a, int b) { }
    public void something(int a, double b) { }
  2. 매개변수의 개수 또는 타입이 달라야 한다.

    • 메서드의 매개변수가 다르면 오버로딩이 가능하다.
    • 위의 예시에서 매개변수의 개수타입이 다르기 때문에 오버로딩이 성립된다.
  3. 리턴 타입이 다르다고 오버로딩이 성립되지 않는다.

    • 리턴 타입은 메서드 오버로딩에 영향을 주지 않는다. 자바는 메서드 호출 시 매개변수의 개수와 타입을 기준으로 메서드를 구분하므로, 리턴 타입이 다르다고 해서 오버로딩이 성립되는 건 아니다.

      public int add(int a) { return a; }
      public void add(int a) { }  // 리턴 타입만 다른 경우 오버로딩 불가

👍🏻 오버로딩의 장점

  1. 코드의 재사용성
    같은 기능을 제공하는 메서드에서 매개변수의 타입이나 개수만 다른 경우, 같은 이름을 사용해 코드의 일관성을 유지하고, 중복된 코드를 줄일 수 있다.

  2. 가독성 향상
    여러 메서드에 다른 이름을 붙이지 않아도 되므로 코드 가독성이 높아진다. 메서드 이름만 보고도 어떤 기능을 수행하는지 쉽게 파악할 수 있다.

  3. 유연성
    오버로딩 덕분에 다양한 입력 형태에 맞춰 메서드를 사용할 수 있다. 예를 들어, 입력으로 정수를 받을 수도 있고, 실수를 받을 수도 있으며, 여러 개의 값을 받을 수도 있다.


📌 가변인자 (Variable Arguments)

가변인자는 메서드의 매개변수 개수를 동적으로 지정할 수 있게 해주는 기능이다. 만약 메서드가 다양한 매개변수 개수를 처리해야 한다면, 매번 메서드를 오버로딩하기보다는 가변인자를 사용하여 유연하게 처리할 수 있다.

🤷🏻‍♀️ 가변인자의 사용 이유

  • 매개변수의 개수가 사용자의 필요에 따라 달라질 경우, 매번 메서드를 오버로딩할 필요 없이 가변인자를 사용하면 된다.
  • 가변인자는 여러 개의 값을 배열 형태로 처리할 수 있으므로, 매개변수 개수에 상관없이 하나의 메서드에서 모든 경우를 처리할 수 있다.

📣 가변인자의 선언

  • 가변인자는 타입 뒤에 ...을 붙여서 선언한다. 배열처럼 동작하지만, 가변인자는 호출 시 입력값의 개수를 유동적으로 받을 수 있다.
public void sum(String... strings) {
    for (String str : strings) {
        System.out.println(str);
    }
}

🤞🏻 가변인자의 특징

  1. 가변인자는 내부적으로 배열을 사용한다.

    • 가변인자는 호출 시 전달된 값을 배열로 처리하므로, 배열처럼 접근할 수 있다.
    • sum 메서드는 호출될 때마다 전달된 값을 배열로 받아 처리한다.
  2. 빈 인자값도 허용된다.

    • 가변인자를 사용하는 메서드는 인자를 하나도 전달하지 않아도 호출이 가능하다.
  3. 가변인자 외에 다른 매개변수가 있을 경우, 가변인자는 반드시 마지막에 선언해야 한다.

    • 가변인자는 동적으로 값이 채워지기 때문에, 다른 매개변수와 함께 사용된다면 가변인자가 마지막에 위치해야 한다.
    public void sum(String prefix, String... strings) {
        for (String str : strings) {
            System.out.println(prefix + str);
        }
    }

👩🏻‍💻 가변인자 코드

public class VarargsExample {
    // 가변인자를 사용하는 메서드
    public void sum(String... strings) {
        for (String str : strings) {
            System.out.println(str);
        }
    }

    public void sum(String prefix, String... strings) {
        for (String str : strings) {
            System.out.println(prefix + str);
        }
    }

    public static void main(String[] args) {
        VarargsExample example = new VarargsExample();
        example.sum("a", "b", "c");  // 가변인자 호출
        example.sum();               // 인자 없이도 호출 가능
        example.sum("Prefix: ", "x", "y", "z");  // 다른 매개변수와 함께 호출
    }
}



  1. 메서드 오버로딩은 같은 이름을 가진 메서드를 매개변수의 개수나 타입에 따라 여러 개 정의하는 기능으로, 이를 통해 코드의 재사용성가독성을 높일 수 있다.
  2. 가변인자는 매개변수의 개수가 유동적으로 달라질 때 사용하는 기능으로, 동적으로 여러 값을 처리할 수 있다. 가변인자는 배열처럼 동작하며, 호출 시 입력된 값의 개수에 따라 메서드가 유연하게 동작하게 만든다.

0개의 댓글

관련 채용 정보