1.2 동기화(Synchronization)

JDK 1.2 이전 클래스들은 자체적으로 동기화 처리가 되어있는데, 멀티 쓰레드 프로그래밍이 아닌 경우에는 불필요한 기능이 되어 성능을 떨어뜨리는 요인이 있다.

Vector -> ArrayList

HashTable -> HashMap

새로 추가된 ArrayList, HashMap은 자체적으로 동기화 처리를 하지 않는다.

java.util.Collection 인터페이스

java.util.Collections 클래스

List list = Collections.synchronizedList(new ArraryList());


Vector클래스의 elementData라는 이름의 Object배열을 멤버변수로 선언 

자손크래스에서 elementData에 접근이 가능하도록 하는 새로운 클래스를 작성할때 자손클래스에서 elementData에 접근이 가능하도록 접근 제어자를 private 대신 protected 사용


for문의 카운터를 0부터 증가시킨 것이 아니라, list2.size()-1부터 감소시키면서 거꾸로 반복

카운터를 증가하면서 삭제하면, 한 요소가 삭제될 때 마다, 빈 공간을 채우기 위해 나머지 요소들이 자리이동을 하기 때문에 올바른 결과를 얻을 수 없다.

그래서 카운트를 감소시켜가면서, 삭제를 해야 자리인동이 발생해도 영향을 받지 않고 작업이 가능하다.


Java API - deep copy, shallow copy

deep copy : 깊은 복사

shallow copy : 얕은 복사


배열이나 객체를 복사할 때, 단순히 참조함 복사하는 것을 shallow copy,

원본과 같은 데이터를 저장하고 있는 새로운 객체나 배열을 생성하는 것을 deep copy라고 한다.


그래서 shallow copy가 되면, 원본이 변경되면, 복사본도 같이 변경되는 것과 같은 결과를 얻고,

deep copy의 경우 원본의 데이터가 바뀐다 할지라도 복사본은 완전히 독립적인 객체이므로 전혀 영향을 받지 않는다.




,