Java

Java 가변인자

keepgoing 2022. 1. 5. 10:47

오버로딩의 한계를 극복한 가변인자

오버로딩을 통해 어떤 메소드의 매개변수가 계속해서 늘어난다고 가정해보자

//ex
public OrderItem orderItems(OrderItme orderitem1){...}
public OrderItem orderItems(OrderItme orderitem1, OrderItme orderitem2){...}
public OrderItem orderItems(OrderItme orderitem1, OrderItme orderitem2, OrderItme orderitem3){...}

이런 경우 일일이 매개변수 하나하나 오버로딩 해줘야할까? 아니다.
이럴 땐 매개변수의 개수를 동적으로 지정해줄 수 있는 가변인자를 사용하면 된다.

가변인자 사용법

public static Order createOrder(Member member, Delivery delivery, OrderItem... orderItems){
        Order order = new Order();
        for (OrderItem orderItem : orderItems) {
            order.addOrderItem(orderItem);
        }
        return order;
    }

위 코드에서 매개변수 OrderItem...을 지목하자, 사용하고자 하는 클래스에 '...'을 붙여주면 된다.

가변인자 주의점

가변인자는 내부적으로 배열을 생성해서 사용하기 때문에 남용은 금물!
만약 가변인자 외에도 다른 매개변수가 더 있다면 가변인자는 마지막에 선언해야 한다.
가능하면 가변인자를 사용한 메소드는 오버로딩하지 않는것이 좋다.

//because
가변인자로 오버로딩된 메서드가 두개 이상일 때 컴파일러는 어떤 메소드를 사용해야하는지
구분하지 못하기 때문에