JAVA

[JAVA] 일급컬렉션

집한구석 2021. 6. 10. 20:24
728x90

정의

  • Collection을 Wrapping하면서, Wrapping한 Collection 외 다른 멤버 변수가 없는 상태

예시

public class BookStore {

  private String name;
  private List<Book> books;

}

public class Book {

  private String name;
  private double price;
}
  • BookStore클래스에 List<Book>인 books를 선언하였음 
  • 해당 List<Book> books를 사용하지 않고, Wrapping 처리를 함 (아래 예시 참조) 
public class Books {
  /* Book을 Wrapping한 Books */
  private List<Book> books;
  ..
}

public class BookStore {

  private String name;
  /* Book을 Wrapping한 Books로 사용*/
  private Books books;

}
  • Books 클래스를 보면 다른 멤버 변수는 존재 하지 않음 (List<Book> Books만 존재)

특징

  • 비즈니스에 종속적인 자료구조
  • 상태와 행위를 각각 관리할 수 있음

비즈니스에 종속적인 자료구조

public class StoreService {

  private static final int RENTAL_BOOK_MAX_SIZE = 4;

  private void validateSize(List<Book> books) {
    if (books.size() >= RENTAL_BOOK_MAX_SIZE) {
      throw new IllegalArgumentException("한번에 4권 이상 책을 대여하거나 구매할 수 없습니다.");
    }
  }
}
  • 책을 대여해주는 비즈니스 로직 처리시 한번에 책을 4권이상 대여 / 구매할 수 없다고 가정
  • 책 4권 이상인지 검증하는 validateSize메소드가 있음
public class StoreService {

  private static final int RENTAL_BOOK_MAX_SIZE = 4;

  public void buy(List<Book> books) {
    validateSize(books);
    //..
  }

  public void rent(List<Book> books) {
    validateSize(books);
    //..
  }

  private void validateSize(List<Book> books) {
    if (books.size() >= RENTAL_BOOK_MAX_SIZE) {
      throw new IllegalArgumentException("한번에 4권 이상 책을 대여하거나 구매할 수 없습니다.");
    }
  }
}
public class Books {

  private static final int RENTAL_BOOK_MAX_SIZE = 4;
  private List<Book> books;

  public Books(List<Book> books) {
    validateSize(books);
    this.books = books;
  }

  private void validateSize(List<Book> books) {
    if (books.size() >= RENTAL_BOOK_MAX_SIZE) {
      throw new IllegalArgumentException("한번에 4권 이상 책을 대여하거나 구매할 수 없습니다.");
    }
  }
}

/* Books 일급컬렉션에서 반복처리했던 검증로직을 처리하기 때문에 비즈니스 로직만 추가하면 됨 */
public class StoreService {

  public void buy(Books books) {
    //..
  }

  public void rent(Books books) {
    //..
  }  
}

  • 비지니스에 종속적인 자료구조(Books)로 인해, 서비스 비즈니스 로직에 더 집중할 수 있음

상태와 행위를 각각 관리

public class Books {

  private List<Book> books;

  public Books(List<Book> books) {
    this.books = books;
  }

  public double getBooksPrice() {
    return books.stream().mapToDouble(Book::getPrice)
                         .sum();
  }
}
  • 일급 컬렉션인 Books를 이용하여 금액합계와 같은로직을 위임하여 관리 할 수 있음
  • 서비스 로직의 부담을 줄일 수 있음

'JAVA' 카테고리의 다른 글

[JAVA] String / StringBuilder / StringBuffer  (0) 2021.06.20
[JAVA] HashMap 원리  (0) 2021.06.13
[JAVA] Map / getOrDefault  (0) 2021.06.10
[JAVA] 예외(Exception)  (0) 2021.06.07
[JAVA] 싱글턴 패턴  (0) 2021.06.05