Engineering Note

[Java] 문자열은 얕은 복사(참조 변수 할당)로 참조해도 괜찮은 이유 본문

Programming Language/Java

[Java] 문자열은 얕은 복사(참조 변수 할당)로 참조해도 괜찮은 이유

Software Engineer Kim 2026. 1. 15. 09:47

얕은 복사

  • 참조변수의 주소 값만 복사

깊은 복사

  • 참조 변수 값을 복사하는게 아니라, 각 요소의 값을 복사하여 새로운 인스턴스를 만들어 복제하는 것.

 

 

배열은 복사할 때 참조변수만 전달하는 얕은 복사를 하면 원본 데이터가 변하면 새롭게 복사된 배열도 함께 변하는 문제가 발생합니다. 이는  두 배열이 사실 같은 배열이었기 때문에 발생하는 문제입니다.

 

 

얕은 복사 코드와 메모리

 int[] originArr = {1,2,3,4,5}; //카피할 배열 
 
 int[] copyArr = originArr;

 

 

 

 

 

깊은 복사 코드와 메모리

 

int[] copyArr1 = new int[10];

for(int i = 0; i < originArr.length; ++i) {
      copyArr1[i] = originArr[i];
}

 

 

String 문자열 얕은 복사가 괜찮은 이유

  • String 객체는 immutable 객체이기 때문에 값을 변경하면 새로운 객체가 만들어지기 때문.

 

 

그래서 문자열을 배열의 얕은 복사처럼 사용하려면 StringBuffer 또는 StringBuilder 클래스를 이용해서 문자열을 생성하고 다루어야 합니다.

StringBuffer와 StringBuilder는 내부적으로 char[] 배열을 통해 문자열을 다루는 buffer를 가지고 있기 때문에 새로운 처음 생성한 문자열을 변경하더라도 새로운 문자열 인스턴스를 생성하지 않습니다. 

 

 

참고 자료 : https://dkswnkk.tistory.com/471

Comments