티스토리 뷰
Design Pattern
우아한테크캠프 Pro 5기 프리코스 - 일급 컬렉션(First Class Collection)과 원시값, 문자열 포장
Seogineer 2022. 10. 12. 17:37일급 컬렉션(First Class Collection)
- Wrapping한 Collection 외에 다른 멤버 변수가 없는 상태
- 특정 역할만을 수행하는 자료구조
// 기존
public class Racing {
private List<Car> cars;
}
// 변경
public class Racing {
private Cars car;
}
public class Cars { // List<Car>를 Cars 클래스로 Wrapping
private List<Car> cars; //멤버 변수가 하나 밖에 없는 일급 컬렉션
public Cars(List<Car> cars){
this.cars = cars;
}
}
원시값, 문자열 포장
- 원시 타입 또는 문자열을 객체로 포장
// 기존
public class User {
private String name;
private int age;
}
// 변경
public class User {
private Name name;
private Age age;
}
public class Name {
private String name;
}
public class Age {
private int age;
}
장점
- 클래스의 역할을 줄이고 중복 코드를 제거할 수 있다.
// 기존 - 변수가 늘어날 때마다 유효성 검사 또한 늘어나고 클래스 하나가 담당해야 하는 역할이 많아진다.
public class Racing {
private List<Car> cars;
private Object variable1;
private Object variable2;
...
public Racing(List<Car> cars, Object variable1, Object variable2 ...){
validateSize(cars);
validateVariable1(variable1);
validateVariable2(variable2);
...
this.cars = cars;
this.variable1 = variable1;
this.variable2 = variable2;
...
}
private boolean validateSize(List<Car> cars){
if(cars.size() > 5){
throw new IllegalArgumentException("자동차의 대수는 5대를 초과할 수 없습니다.");
}
}
private boolean validateVariable1(Object variable){
...
}
private boolean validateVariable2(Object variable){
...
}
...
}
// 변경 - 각 멤버 변수를 클래스로 분리해서 역할을 분리했다.
public class Racing {
private Cars cars;
private Maker maker;
...
}
public class Cars {
private List<Car> cars;
public Cars(List<Car> cars){
validateCars(cars);
this.cars = cars;
}
private boolean validateCars(List<Car> cars){
if(cars.size() > 5){
throw new IllegalArgumentException("자동차의 대수는 5대를 초과할 수 없습니다.");
}
}
}
public class Maker {
private String maker;
public Maker(String maker){
this.maker = maker;
}
private boolean validateMaker(String maker) {
if(maker.length() > 10){
throw new IllegalArgumentException("Maker의 길이는 10을 초과할 수 없습니다.");
}
}
}
...
참고
일급 컬렉션(First Class Collection)의 소개와 써야할 이유
'Design Pattern' 카테고리의 다른 글
우아한테크캠프 Pro 5기 - 정적 팩토리 메서드와 인스턴스 캐싱 (0) | 2022.11.11 |
---|---|
우아한테크캠프 Pro 5기 - 한 줄에 점을 하나만 찍는다(디미터의 법칙) (0) | 2022.11.09 |
퍼사드 패턴 (0) | 2021.03.13 |
댓글