Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[recap] 가변인자(varargs) #17

Open
kgy1008 opened this issue Aug 6, 2024 · 0 comments
Open

[recap] 가변인자(varargs) #17

kgy1008 opened this issue Aug 6, 2024 · 0 comments
Assignees
Labels
recap recap sec6 sec6

Comments

@kgy1008
Copy link
Contributor

kgy1008 commented Aug 6, 2024

무엇을 알게 되었나요?

가변인자

가변인자, 말 그대로 여러 개의 매개변수를 받을 수 있다는 뜻이다. 가변인자를 사용하면 메서드 호출 시에 전달되는 인자의 개수를 동적으로 변경할 수 있다. 배열을 포함한 모든 참조자료형(Wrapper Class, String, Object, List, Map)이 가변인자로 사용 가능하지만 기본 자료형은 가변인자로서 사용할 수 없다.
가변인자를 사용하는 방법은 간단하다. 아래 코드처럼 변수 타입 뒤에 기호(...)를 붙여주면 된다. 다만, 다른 파라미터와 가변인자를 같이 사용하는 경우에는 가변인자를 제일 뒤에 위치시켜야 한다.

public static Order createOrder(Member member, Delivery delivery, OrderItem... orderItems) {
    Order order = new Order();
    order.setMember(member);
    order.setDelivery(delivery);
    for (OrderItem orderItem : orderItems) {
        order.addOrderItem(orderItem);
    }
    order.setStatus(OrderStatus.ORDER);
    order.setOrderDate(LocalDateTime.now());
    return order;
}

그렇다면 왜 가변인자를 사용하는 것일까? List 자료형을 활용해도 되지 않을까? 아래 코드를 살펴보자.

// 가변인자 사용
public void printArgs(String... args) {

    for (String arg : args) {
        System.out.println(arg);
    }
}

// 리스트 사용
public void printArgs(List<String> args) {
    for (String arg : args) {
        System.out.println(arg);
    }
}

// -------------------------------- 함수 호출 ----------------------------------- //

// 가변인수 사용 함수 호출
printArgs("Hello", "World");

// List 사용 함수 호출
List<String> args = Arrays.asList("Hello", "World");
printArgs(args); 

두 메서드는 매개변수의 타입 외에는 차이가 없고, 기능적으로 동일하다. 다만 메서드를 호출함에 있어 가변인자는 호출 코드의 가독성과 사용편의성을 높일 수 있는 장점이 있음을 확인할 수 있다.

어려운 내용이 있었다면 이를 어떻게 해결하였나요?

  • 구글링

어떤 자료를 참고하였나요?

@kgy1008 kgy1008 added recap recap sec6 sec6 labels Aug 6, 2024
@kgy1008 kgy1008 self-assigned this Aug 6, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
recap recap sec6 sec6
Projects
None yet
Development

No branches or pull requests

1 participant