Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
Tags
- Selection Sorting
- Serialization
- Graph
- s
- Stack
- 윤성우의 열혈 자료구조
- JSON
- list 컬렉션
- coding test
- 혼자 공부하는 C언어
- 이스케이프 문자
- R
- buffer
- 메모리구조
- Algorithm
- C 언어 코딩 도장
- insertion sort
- 윤성우 열혈자료구조
- 알기쉬운 알고리즘
- ㅅ
- stream
- C programming
- 이것이 자바다
- datastructure
Archives
- Today
- Total
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
'Programming Language > Java' 카테고리의 다른 글
| [Java] 동시성 제어테스트를 위한 멀티쓰레드 코드 흐름 파악하기 (0) | 2026.01.24 |
|---|---|
| [Java] 깊은복사와 얕은복사 그리고 방어적복사 (0) | 2026.01.13 |
| [Java] Optional()에서 반환타입에서 .get()이 안좋은 이유와 예외처리를 하는 이유 (0) | 2026.01.09 |
| [Java] default 접근제어자와 테스트코드 패키지 (0) | 2026.01.08 |
| [Java] 동일성(Identity)과 동등성(Equality) (0) | 2025.12.23 |
Comments