Day60
List와 배열의 사용 차이점
복사로 인해 데이터가 적을 때 Java에서 List가 사용된다는 것은 저장해야 하는 요소의 수가 미리 알려지지 않았거나 동적으로 변경될 수 있는 경우 List가 배열보다 선호된다는 것을 의미합니다.
Java의 목록은 요소가 추가되거나 제거될 때 동적으로 크기를 조정할 수 있는 기능을 포함하여 배열에 비해 몇 가지 이점을 제공합니다. 그러나 이 동적 크기 조정에는 전체 목록을 메모리의 새롭고 더 큰 위치로 복사하는 작업이 포함될 수 있으며, 이는 큰 목록에 비효율적일 수 있습니다.
따라서 저장할 요소의 수가 적거나 목록에 추가하거나 제거할 요소의 수가 최소인 경우 목록을 복사하는 오버헤드가 적기 때문에 배열을 사용하는 것보다 목록을 사용하는 것이 더 효율적일 수 있습니다. . 그러나 저장할 요소의 수가 미리 알려져 있거나 매우 클 가능성이 있는 경우 목록에 비해 성능과 메모리 효율성이 더 나은 배열이 더 나은 선택이 될 수 있습니다.
Java에서 객체를 복사할 때 얕은 복사와 깊은 복사의 두 가지 유형의 복사가 있습니다.
얕은 복사: 얕은 복사본은 새 객체를 생성하지만 객체의 내용은 복제되지 않습니다. 대신 원래 개체에 대한 참조가 새 개체에 복사됩니다. 결과적으로 원본 객체에 대한 모든 변경 사항은 복사된 객체에도 영향을 미칩니다. 단순 복사는 객체에 대해 clone() 메서드를 호출하여 수행할 수 있습니다.
깊은 복사: 전체 복사는 새 메모리 위치로 새 개체를 만들고 원본 개체의 모든 콘텐츠를 복제합니다. 즉, 개체의 독립적인 복사본을 만들고 원본 개체에 대한 변경 사항은 복사된 개체에 영향을 주지 않습니다. 깊은 복사는 Serializable 인터페이스를 구현하고 ObjectOutputStream 및 ObjectInputStream을 생성하고 이를 사용하여 바이트 스트림에서 개체를 쓰고 읽음으로써 수행할 수 있습니다.
예를 들어, 다른 객체 B를 참조하는 객체 A가 있다고 가정해 보겠습니다. A의 얕은 복사를 수행하면 B에 대한 참조도 포함하는 새 객체 A'가 생성됩니다. A의 사본, 새 객체 A'가 생성되고 새 객체 B'도 B와 동일한 값으로 생성됩니다. 따라서 A 또는 B에 대한 변경 사항은 A' 또는 B'에 영향을 미치지 않습니다.
응용 프로그램의 요구 사항에 따라 올바른 복사 유형을 선택하는 것이 중요합니다. 얕은 복사는 더 빠르고 메모리 효율적일 수 있지만 원본 개체를 변경하면 복사된 개체에 실수로 영향을 줄 수 있으므로 위험할 수도 있습니다. 반면에 깊은 복사는 개체의 완전히 독립적인 복사본을 생성하지만 속도가 더 느리고 더 많은 메모리를 소비할 수 있습니다.