본문 바로가기
Language/Java

Arrays.fill()에 참조타입을 매개변수로 전달하면?

by brother_stone 2023. 11. 25.

 

프로그래머스 문제를 풀다 StringBuilder배열을 만들고 반복문을 돌며 특정 요소에 append하는 로직을 만들었다.

append하기 위해선 각 요소에 StringBuilder객체를 초기화해야했고 Arrays.fill() 메서드를 사용해 초기화했다.

Arrays.fill(temp, new StringBuilder());

 

그런데 이후 특정요소에 append()하면 모든 요소의 StringBuilder에 append되는 것을 확인했다. 무엇이 원인일까 생각해보았고 Arrays.fill() 메서드에 객체를 매개변수로 전달하면 각 요소는 해당 객체를 얕은 복사하기 때문일 것으로 생각했다.

 

 

문서를 자세히 보면 특정된 객체의 참조를 각 요소에 할당한다고 되어있다..^^ 

ChatGPT에 물어봐도 같은 답변을 준다.

 

결론은 Arrays.fill()에 참조 타입을 매개변수로 넘기면 각 요소는 깊은 복사가 아닌 매개변수로 전달된 객체의 참조를 다같이 얕은 복사해서 가져가게 된다는 것이다. 사용에 유의하자.