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 |