pknu-wap / 2024Study-Objects

4 stars 1 forks source link

[1주차] TicketOffice 생성자로 Ticket들을 "가변 인자"로 받는 방식이 적절한가? #2

Open 9kyo-hwang opened 1 week ago

9kyo-hwang commented 1 week ago

페이지

12p


궁금한 내용

public class Ticketoffice {
  private Long amount;
  private List<Ticket> tickets = new ArrayList<>();

  public TicketOffice(Long amount. Ticket ... tickets) {  // 이 부분
    this.amount = amount;
    this.tickets.addAll(Arrays.asList(tickets));
  }

  public Ticket getTicketO {
    return tickets.remove(0);   
  }

  public void minusAmount(Long amount) {
    this.amount -= amount;
  }

  public void plusAmountdong amount) {
    this.amount += amount;
  }
}

많은 프로젝트나 개발을 해본 것은 아니지만, 적어도 지금껏 공부하면서 가변 인자를 사용해본 적은 없습니다. 차라리

public TicketOffice(Long amount, List<Ticket> tickets) {
    this.amount = amount;
    this.tickets.addAll(tickets);
}

이런 식으로 사용하는 게 조금 더 낫지 않을까란 생각입니다.

// 기존 가변 인자 스타일
new TicketOffice(1000L, ticket1, ticket2, ticket3);

// List 사용 스타일
new TicketOffice(1000L, Arrays.asList(ticket1, ticket2, ticket3));

사실 java 언어로는 문법이 그렇게 복잡하지 않아서 좀 덜 한 편인 것 같은데, C++로 코드를 작성하면 조금 더 불편합니다.

template<typename... VariadicTickets>
FTicketOffice(int64_t InAmount, VariadicTickets&&... InTickets)
: Cash(InAmount)
{
  (Tickets.emplace_back(std::forward<VariadicTickets>(InTickets)), ...);
}

이런 식으로 Variadic Template(Parameter Pack) 코드를 작성해야 합니다. 그래서 더더욱 갸웃하게 되는 부분입니다.

여러 분은 어떻게 생각하시나요?

9kyo-hwang commented 4 days ago

각자 코딩 스타일 차이인 걸로...