일급 컬렉션

작은곰·2020년 6월 2일
0

자바

목록 보기
1/3

누구세요?

하나의 콜렉션을 유일한 필드 변수로 갖고 있는 클래스.

뭣하러 만들어요?

  1. 비즈니스에 종속적인 자료구조
  2. Collection의 불변성을 보장
  3. 상태와 행위를 한 곳에서 관리
  4. 이름이 있는 컬렉션

누가 쓰라고 그랬어요?

'객체지향 생활체조 규칙 8 - 일급 콜렉션 사용'

설명

비즈니스에 종속적인 자료구조

대표적인 예로, 생성 시에 필요한 검증 로직들을 비즈니스 로직을 담당하는 서비스에서 옮겨갈 수 있다. 서비스단에서 그 검증 로직 다 찾아보고 왜 검증해야 하는지 알아내는 것보다, 한 클래스 내에서 확인할 수 있다면? 아니면 그 로직을 알 필요가 없다면? 일급 컬렉션의 강점이 나타나게 되는 것이다.

public class LottoService {
	public void createNumber() {
		List<Long> lottoNumbers = createNonDuplicateNumbers();
		validateSize(lottoNumbers);
		validateDuplicate(lottoNumbers);
		// ....
	}
}
public class LottoNumbers {
	private List<Long> lottoNumbers;

	public LottoNumbers(List<Long> lottoNumbers) {
		validateSize(lottoNumbers);
		validateDuplicate(lottoNumbers);
		this.lottoNumbers = lottoNumbers;
	}
}

일급 컬렉션을 필요한 조건을 충족하는 새로운 자료구조를 만든다고 생각하면 된다.

후배들이 클래스가 무엇인지 설명해달라고 할 때, 너가 원하는 타입을 만든다고 생각하면 된다고 해준다.

원하는 값을 담는(필드 변수), 필요한 기능을 갖고 있는(메서드) 타입을 만드는 거니까.

그것과 동일하게 새로운 자료구조를 만든다고 생각하면 될 것 같다.

대신 필드가 컬렉션 하나인 것이 차이점이겠다.

Collection의 불변성을 보장 (가능하다)

그냥 클래스를 생성할 시에, 필드에 접근을 불가능하게 만들면 된다.

필드의 접근제어자를 private로 설정하고, 변경하는 로직을 전혀 만들지 않으면 끝.

가능하다는 거지, 꼭 그렇다는 것은 아니다.

값을 변경하고 싶으면 아예 새로운 객체를 만들어서 반환해도 된다.

상태와 행위를 한 곳에서 관리

굳이 설명을 담지는 않겠다. 위에서 언급한 것을 읽으면 당연시된다.

이름이 있는 컬렉션

일급 컬렉션 이니까 이름이 있는 커스텀된 컬렉션이 된다. 의미를 컬렉션 명에 담을 수 있다.

profile
growing?

0개의 댓글