일급 컬렉션(First-Class Collection)이란?

잉으잉·2024년 10월 30일

자바공부

목록 보기
6/9
post-thumbnail

Java에서 일급 컬렉션이란 컬렉션을 단순히 List, Set, Map같은 자료구조로만 사용하는 대신 컬렉션 자체를 클래스로 감싸는 것을 의미한다. 예시를 들면 다음과 같다.

public class Name{
	private final List<String> names;
    
    public Name(List<String> names){
    	validate(names);
        this.name = names;
		}
    
    private void validate(List<String> names){
    	if (names.isEmpty()){
        	throw new IllegalArgumentException("빈 값은 입력할 수 없습니다.")
			}
    	}
	
    public int size(){
    	return names.size()
        }
    
    public List<String> getNames(){
    	return Collections.unmodifiableList(names); //외부에서 수정 못하게 불변리스트 리턴
    	}
    }

Name이라는 클래스로 묶었기 때문에 비록 리스트형이더라도 외부에서 쉽게 접근할 수 없어 캡슐화가 용이하다. 다음의 장점 때문에 일급컬렉션을 쓴다.

  1. 데이터 캡슐화: 컬렉션을 별도의 클래스로 캡슐화해 외부에서 직접 컬렉션에 접근할 수 없도록 보호한다.

  2. 불변성 유지: 컬렉션을 일급 컬렉션으로 만들면 불변성을 쉽게 보장할 수 있다. 생성자에서 컬렉션을 초기화하고 이후 변경하지 않도록 설계해 데이터를 안전하게 유지할 수 있다. 예를 들면 getValues()메서드를 설계할 때는 unmodifiableList처럼 불변하게 리턴하는 설계를 할 수 있다.

  3. 컬렉션 관련 비즈니스 로직 집중화: 일급 컬렉션 클래스 내에 컬렉션과 관련된 로직을 함께 정의함으로써 코드의 응집도를 높인다. 이 방식은 비즈니스 로직을 해당 컬렉션을 사용하는 곳마다 구현하지 않고, 컬렉션 클래스에 포함시켜 코드 중복을 줄일 수 있습니다.

  4. 자체 검증 로직: 일급 컬렉션 클래스 안에서 요소 추가, 삭제 시 필요한 자체 검증 로직을 정의할 수 있다. 예를 들어 Names라는 List가 비어있으면 에러를 발생시키는 로직을 컬렉션 내에 정의할 수 있다.

profile
컴퓨터 앞에 앉은 나는 개발자

0개의 댓글