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
가변인자로 오버로딩된 메서드가 두개 이상일 때 컴파일러는 어떤 메소드를 사용해야하는지
구분하지 못하기 때문에