Jaca Collection List에서 제공하는 기능인 subList() 함수는 해당 리스트의 일부분을 잘라서 리턴해주는 기능인데 여기에 유의해야 할 점이 있어서 포스팅으로 남긴다.

 

public List<E> subList(int fromIndex, int toIndex) {
    subListRangeCheck(fromIndex, toIndex, size);
    return new SubList(this, 0, fromIndex, toIndex);
}

 

위와 같이 기능이 정의되어 있는데 List객체.subList(시작인덱스(포함), 종료인덱스(미포함)) 으로 SubList 객체가 반환되는 단순한 구조이다. 그런데 여기서 SubList의 정체가 중요하다.

 단순히 별개의 List객체가 리턴되는 것이 아니라, 기존List객체의 뒷부분만으로 만들어진 나에게 익숙한 개념으론 DBMS의 View와 같은 SubList객체가 리턴되는 것.

 

 DB에서 View를 만들고 사용해본 사람이라면 이미 그 정체를 알겠지만 실체의 별도 객체가 아니라 기존 객체를 바라보는 것으로 View에서 변경한 값은 본체가 되는 객체의 값도 변경되고, 반대로 본래 객체의 값을 변경하면 View로 바라보는 값도 변경이 되는 것이다.

 

 간단히 결론을 말하자면 SubList객체는 기존의 List객체와 동기화 되어 있음을 유의하고 사용해야 한다.

 

 

 

+ Recent posts