[JAVA] 일급컬렉션

2021. 6. 10. 20:24·JAVA
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
'JAVA' 카테고리의 다른 글
  • [JAVA] String / StringBuilder / StringBuffer
  • [JAVA] HashMap 원리
  • [JAVA] Map / getOrDefault
  • [JAVA] 예외(Exception)
집한구석
집한구석
  • 집한구석
    tgyun615.info
  • 전체
    오늘
    어제
    • 카테고리 (183)
      • JAVA (38)
      • SPRING (15)
      • KOTLIN (23)
      • NETTY (1)
      • DEVOPS (3)
      • DOCKER (7)
      • KUBERNETES (2)
      • JAVASCRIPT (1)
      • SPLUNK (3)
      • ELK (7)
      • KAFKA (2)
      • GO (4)
      • ALGORITHM & DATA STRUCTURE (9)
      • IDE (5)
      • OS (16)
      • NETWORK (14)
      • GCP (2)
      • AWS (2)
      • DATABASE (10)
      • CLEANCODE (7)
      • OTHER (12)
  • 최근 글

  • 태그

    클린코드
    Kafka
    JPA
    go
    코틀린
    자바
    이펙티브 코틀린
    docker
    ElasticSearch
    splunk
    이펙티브코틀린
    cleancode
    IntelliJ
    AWS
    Spring
    엘라스틱서치
    SQL
    프로그래머스
    java
    Elk
  • 링크

    • github
    • linkedin
    • resume
  • hELLO· Designed By 정상우. v4.10.3
집한구석
[JAVA] 일급컬렉션
상단으로

티스토리툴바