본문 바로가기
Program/JAVA

배열 복사 : clone()과 arraycopy()의 차이

by Woodland 2018. 9. 3.

다이나믹 프로그래밍 공부중, 2중배열을 복사하기 위한 과정에서 문제가 생김.


int arrayA = arrayB;


위와 같은 코드는 코드의 내용을 복사하는게 아니고 그 주소값만을 복사하기 때문에

결국 하나의 객체 내용을 변경하면 다른쪽의 내용물도 같이 변경 되는 것이다.



그래서 새로운 방법이 필요한데 검색 과정중에서 나온 두가지 방법이

clone() 와 arraycopy이다.


둘다 배열을 복사하는 것이라고는 하는데, 중대한 차이가 있다. 


- clone()은 원본 배열과는 별개의 주소값을 가진 새로운 배열을 만든다

  클론으로 만든 배열은 바꿔도 원본이 바뀌지 않는다!!


- System.arraycopy()는 자바 네이티브 인터베이스를 사용하기 때문에 속도가 진짜 겁나 빠르다.



결론.


같은 내용물을 가진 서로 다른 배열을 가지고 싶다면 clone()을 쓰는것이 정답이다.

arraycopy()는 int arrayA = arrayB; 와 같은 결과물늘 낳게되는데, 속도가 겁나게 빠른 것일 뿐이다.



위와같이 주소값만을 복사하는 것을 shallow clone (얕은 복제)라 하고

내용물의 값을 복사하여 다른 객체를 만드는 작업을 deep clone라고 한다.



shallow clone : System.arraycopy()

Deep clone : clone()


으로 쓰는것이 좋을듯 하다.

'Program > JAVA' 카테고리의 다른 글

폴더 삭제 : 삭제.(FileUtils.cleanDirectory()와 File.delete())  (0) 2019.12.23
2중배열 정렬  (0) 2018.12.09
split()에 관하여  (0) 2018.11.12
키벨류값을 정렬해주는 메서드.  (0) 2018.08.21
hasNextLine()에 관하여  (0) 2017.07.07