Skills/Java

Java - FIrst Class Collection(일급 컬렉션)

aoaa 2022. 11. 17. 16:34

1. First Class Collection

 Java에서 일급 컬렉션은 Collection을 Wrapping하고 있으면서, 그 외에 다른 멤버 변수가 없는 것을 의미합니다. 코드로 살펴보면

public class FirstClassCollection() {
	
    private List<String> FCC;
    
    public FirstClassCollection(List<String> FCC) {
    	this.FCC = FCC;
    }
}

 위와 같이 List(Colletion)인 FCC 멤버 변수를 Wrapping하고, 그 외의 변수는 선언하지 않은 상태를 말합니다.

이렇게 일급 컬렉션으로 얻는 이점이 무엇일까요?


2. 장점

2.1 하나의 인스턴스 에서 관리하는 비즈니스 로직

 프리코스 2주차 미션인 Lotto 게임의 한 클래스입니다. LottoGenerator는 1부터 45까지의 6개의 숫자를 정렬해서 List에 추가하는 역할을 하고있습니다. 이 때, 생성한 로또 번호가 필요한 모든 클래스에서는 검증로직이 필요할 것입니다. 예를 들어 6자리가 아니면 안된다던가, 6자리의 수가 중복되지 않아야한다는 검증말이죠. 이를 일급 컬렉션으로 해결할 수 있습니다. 

 비즈니스 로직인 Lotto 클래스를 number를 final로 선언하고, validate 메서드를 통해 로또 번호의 길이(Constant.NUMBERSIZE.getConstant() = 6)이 아니라면 예외를 던지도록 처리할 수 있을 것입니다. 이렇게 일급 컬렉션으로 선언한 클래스를 

lottoGenerate로 생성하고 Lotto 클래스에게 검증하도록하면, 비즈니스 로직에 종속적인 자료구조를 만들 수 있게 됩니다.


2.2 불변을 보장

 흔히 Java의 fianl 클래스는 객체를 불변으로 만들어 준다고 이야기하지만, 사실 값의 재할당을 금지하는 것입니다. 재할당이 무엇을 의미하느냐

 final로 할당된 list라는 컬렉션을 new ArrayList로 재할당하려고 하게되면,

 final 변수인 list에 값을 할당할 수 없다고 에러를 볼 수 있습니다. 이러한 문제를 일급 컬렉션으로 어떻게 해결할까요? 위의 로또게임의 예시를 다시보면

 일급 컬렉션으로 만든 클래스에서 새로 만들거나(생성자) 값을 가져오게(getNumbers)만 만들어 List 컬렉션에는 접근할 수 있는 방법은 이 일급 컬렉션에서 할 수 없게 됩니다. 위의 예시처럼 lottoGenerate 코드를 불러와야만 값을 추가할 수 있는 것이죠.

 

 이처럼 일급 컬렉션을 통해 값을 변경하거나 추가할 수 없도록하여 값을 불변 컬렉션을 만들 수 있습니다. 

 

 

 

 

 

 

 

참조

 

'Skills > Java' 카테고리의 다른 글

Java - Stream 결과 생성  (0) 2022.11.30
Java - Stream 사용법 및 예제  (0) 2022.11.25
Java - NumberFormatException 에러  (0) 2022.11.14
Java - 간단한 예외처리 테스트  (0) 2022.11.12
Java - Lambda  (0) 2022.11.06