java 2차원 primitive type 배열 clone()시 주의할 점(deep copy)

프로그래밍/자바2020. 7. 31. 18:26

안녕하세요. 여러분.

 

간단한 내용일 수도 있으나.. ㅎㅎ 제가 잊어버리지 않기 위해 기록으로 남깁니다.

 

저는 알고리즘 문제 해결을 위해 2차원 boolean 배열이 필요했습니다.

문제는.. 재귀적으로 이 배열이 사용되면서 각각 독립적으로 동작할 필요가 있었습니다.

그러니까 각 재귀함수에서 사용되는 2차원 boolean 배열(예를 들어서 visited)가.. 서로 영향을 미치면 안됐습니다.

그래서 그냥 재귀함수의 인자에 visited가 아닌 visited.clone()를 주면 잘 해결 되겠지 생각했는데 예상과 달리.. deep copy가 되질 않았습니다.

 

스택 오버플로우에서 관련 내용을 좀 찾아보니.. for문을 사용해서 copy를 해야 deep copy가 된다고 하네요.

C언어의 포인터 관점에서 살펴보면.. 배열은 포인터와 관련이 아주 깊기 때문에 clone()함수 사용시 주소값이 deep copy가 되기 때문에 이런 문제가 발생하는 것 같습니다.

 

이중 for문을 사용해서 원소를 하나하나 복사하면 deep copy는 되지만 시간적인 측면에서 보면 상당히 문제가 될 수 있습니다. 매번 재귀호출을 할 때마다 이 동작을 수행해야 하는데 시간이 꽤나 소요됩니다.

만약 이런 동작이 수없이 많이 일어난다면 다른 대안을 생각해봐야겠습니다.

 

https://stackoverflow.com/questions/1564832/how-do-i-do-a-deep-copy-of-a-2d-array-in-java

 

How do I do a deep copy of a 2d array in Java?

I just got bit by using .clone() on my 2d boolean array, thinking that this was a deep copy. How can I perform a deep copy of my boolean[][] array? Should I loop through it and do a series of Sys...

stackoverflow.com

 

작성자

Posted by 드리머즈

관련 글

댓글 영역