객체지향 생활 체조 원칙 중 8번 원칙 "일급 컬렉션을 쓴다."
컬렉션은 알겠는데... 그래서 일급 컬렉션이 뭘까? 궁금증이 생겼다.
🧐 일급 컬렉션이란??
→ Collection을 Wrapping하면서, Wrapping한 Collection 외 다른 멤버 변수가 없는 상태를 일급 컬렉션이라 한다.
이게 무슨 말인가...?
public class ProductInfo {
private final List<Product> products;
private final int minPrice;
private ProductInfo(List<Product> product) {
this.products = Products.createProducts(product);
this.minPrice = getMinPrice(products);
}
public static ProductInfo createProductInfo(List<Product> product) {
return new ProductInfo(product);
}
...
}
위 코드를 아래처럼 바꾼다!
public class ProductInfo {
private final Products products; //바뀐 부분
private final int minPrice;
private ProductInfo(List<Product> product) {
this.products = Products.createProducts(product);
this.minPrice = getMinPrice(products);
}
public static ProductInfo createProductInfo(List<Product> product) {
return new ProductInfo(product);
}
....
}
public class Products { // 추가
private final List<Product> products;
private Products(List<Product> products) {
this.products = products;
}
public static Products createProducts(List<Product> products) {
return new Products(products);
}
....
}
일급 컬렉션은 바로 "List Product"외 다른 멤버 변수가 없는 것!
💡 그래서 왜 필요한데?
개인적으로 아래 우아한기술블로그 예시가 아주 마음에 들었다!
요구사항 : GS 편의점, CU 편의점에 List<아이스크림>, List<과자>, List<라면> 등에 대한 validation이 필요하다!
일급 컬렉션이 없다면?
→ GS, CU 편의점 클래스에 공통 validation 내용을 작성해야만 한다!
▶ 중복 코드 발생
하지만 일급 컬렉션을 사용한다면?
→ List<아이스크림>, List<과자> 를 관리하는 일급 컬렉션 생성 & 공통 validation 내용을 작성
▷ 중복 코드 완화!
🤓 불변의 컬렉션?
불변의 중요성은 익히 알고 있을 것이다. 일급 컬렉션을 사용하면 불변으로 만들 수 있다!
public class Products {
private final List<Product> products;
private Products(List<Product> products) {
this.products = products;
}
public static Products createProducts(List<Product> products) {
return new Products(products);
}
public List<Product> getProducts() {
return Collections.unmodifiableList(products); // 불변
}
}
getter 사용시 "unmodifiableList"를 활용해보자!
그럼 products는 불변이 되고 아래처럼 사용해도 변경 불가능하다.
products.getProducts().add(new Product(...))
※ 참고 자료
https://techblog.woowahan.com/2680/
코드리뷰 모음 서비스를 소개합니다. | 우아한형제들 기술블로그
{{item.name}} layout: post title: "코드리뷰 모음 서비스를 소개합니다." description: "코드리뷰 피드백 모음 서비스 javable" author: brown date: 2020-06-05 14:00:00 +0900 categories: techcourse published: true 안녕하세요. 교
techblog.woowahan.com
'2023-woowacourse-precourse' 카테고리의 다른 글
Getter를 지양하라고요? (0) | 2023.11.26 |
---|---|
2023 우아한 테크코스 4주차 회고 (0) | 2023.11.17 |
2023 우아한 테크코스 3주차 회고 (0) | 2023.11.17 |
2023 우아한 테크코스 2주차 회고 (0) | 2023.11.17 |
2023 우아한 테크코스 1주차 회고 (2) | 2023.10.27 |