Iterator / 얕은 복사와 깊은 복사 / Spliterator
Iterator
- 컬렉션의 요소를 읽어올 수 있는 메서드로 Collection 인터페이스에 명시되어 있다.
- boolean hasNext( )
- Object next( )
- 다음 요소를 읽어 온다. next( )를 호출하기 전에 hasNext( )를 호출해서 읽어 올 요소가 있는지 확인하는 것이 안전하다.
- void remove( )
- next( )로 읽어 온 요소를 삭제한다. next( )를 호출한 다음에 remove( )를 호출해야한다.
- Map 객체의 경우 우선적으로 entrySet( )이나 keySet( )을 먼저 호출한 후 Iterator 메서드를 호출할 수 있다.
얕은 복사와 깊은 복사
얕은 복사
- 복사 대상의 값만 복사한다. 복사대상의 값이 기본형이라면 문제될 건 없지만 복사 대상에 객체가 포함되어 있거나 참조 변수의 값을 복사할 경우 복사 대상과 같은 객체를 가리키고 있기 때문에 완전한 복사라고 할 수 없다. 이때 복사대상이 포함하고 있는 객체의 값이 바뀌면 같이 값이 바뀐다.
깊은 복사
- 얕은 복사와는 다르게 포함하고 있는 객체까지 새롭게 복사한다. 따라서 복사대상의 값이 바뀌어도 같이 바뀌지 않는다.