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;

    }
}