java 2차원 primitive type 배열 clone()시 주의할 점(deep copy)
안녕하세요. 여러분.
간단한 내용일 수도 있으나.. ㅎㅎ 제가 잊어버리지 않기 위해 기록으로 남깁니다.
저는 알고리즘 문제 해결을 위해 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
댓글 영역