티스토리 뷰

일급 컬렉션(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)의 소개와 써야할 이유

일급 컬렉션을 사용하는 이유

더 나은 소프트웨어를 향한 9단계: 객체지향 생활 체조(9)

원시 타입을 포장해야 하는 이유

더 나은 소프트웨어를 향한 9단계: 객체지향 생활 체조(4)

댓글
Total
Today
Yesterday
링크
Apple 2023 맥북 프로 14 M3, 스페이스 그레이, M3 8코어, 10코어 GPU, 512GB, 8GB, 한글