JAVA
얕은 복사(Shallow Copy)
jiyoon12
2025. 5. 2. 17:41
- Java에서 객체를 복사할 때, 객체의 참조(메모리 주소)만 복사하는 방식이다.
- 새로운 객체가 생성되지만, 내부의 참조형 데이터(예: 객체, 배열 등)는 원본과 동일한 메모리 주소를 가리킨다.
package copy;
public class MainTest1 {
// Stack 메모리 곳에서 할당
public static void main(String[] args) {
// 얕은 복사(Shallow Copy), 깊은 복사(Deep Copy)
// 기본데이터 타입(소문자), 참조 타입(대문자)
int a = 10;
int b = a; // 기본 데이터타입은 값 복사
b = 100;
System.out.println("a : " + a);
System.out.println("b : " + b);
a = 20;
int c = b;
b = a;
System.out.println("a : " + a);
System.out.println("b : " + b);
System.out.println("c : " + c);
// person -> 참조 변수(변수 안에 담기는 값은 -> heap 메모리에 있는 주소값이 담긴다)
Person person1 = new Person("홍길동");
Person person2 = person1;// 주소값 복사가 된다 --> 얕은 복사라고 한다.
// 즉, person1과 person2는 같은 객체를 바라보고 있기 때문에
person2.name = "티모"; // person2 <-- name 값 수정
System.out.println(person2.name); // person1. <--
Person person3 = new Person("철수");
Person person4 = person3;
System.out.println(person4.name);
person3.name = "유리";
System.out.println(person4.name);
}
}
class Person {
String name;
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
'}';
}
public Person(String name) {
this.name = name;
}
}