안녕하세요~ 

이번 시간에는 자바의 얕은 복사와 깊은 복사의 차이에 대해 알아보려고 하는데요.

어떻게 차이가 있는지 살펴볼까요?

얕은 복사와 깊은 복사(복사 생성자, 팩토리메서드)

package day36;

public class Person {
    private String name;
    private int age;

    public Person(){
    	
    }
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public Person(Person p){
        this.name = p.getName();
        this.age = p.getAge();
    }

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public static Person copy(Person p){
        Person cp = new Person();
        cp.name = p.getName();
        cp.age = p.getAge();
        return cp;
    }
}


package day36;

public class 복사 {
	public static void main(String[] args) {
		Person p1 = new Person("홍길동", 20);
		Person p2 = p1;
        Person p3 = new Person(p1);
        Person p4 = Person.copy(p1);
        
        p2.setName("강감찬");
        p3.setName("이순신");
        p4.setName("심청이");

        System.out.println("p1.name = "+p1.getName());
        System.out.println("p2.name = "+p2.getName());
        System.out.println("p3.name = "+p3.getName());
        System.out.println("p4.name = "+p4.getName());
        System.out.println("================");
        System.out.println("p1 : "+p1.toString());
        System.out.println("p2(얕은 복사) : "+p2.toString());
        System.out.println("p3(복사 생성자) : "+p3.toString());
        System.out.println("p4(복사 팩토리메서드) : "+p4.toString());
	}
}

 💻 Person 클래스 기준으로 객체를 생성하여 얕은 복사, 깊은 복사를 하고 비교하는 코드.


오늘의 핵심 키워드

  1. 얕은 복사는 참조값(주소값)을 복사하는 것이다. 
  2. 깊은 복사는 객체에 실제 저장된 값을 복사하는 것이다. 

 

 


① 이름을 저장하는 필드 name, 나이를 저장하는 필드 age

② 기본생성자, 필드를 저장하는 생성자, 깊은 복사를 위한 생성자

③ 필드를 저장하거나 리턴하는 getter, setter 메서드와 깊은 복사를 위한 copy 메서드


 

① name에 "홍길동", age에 20을 저장하는 객체 변수 p1

② p1의 참조값(주소값)을 얕은 복사하는 객체 변수 p2

③ p1의 참조값을 매개변수로 받아 복사생성자로 깊은 복사하는 객체 변수 p3

④ p1의 참조값을 매개변수로 받아 복사팩토리메서드로 깊은 복사하는 객체 변수 p4


① p2, p3, p4 객체의 name에 각각 "강감찬", "이순신", "심청이" 저장


① p1, p2, p3, p4의 name을 리턴하여 출력

② p1, p2, p3, p4의 참조값(주소값)을 출력


최종 출력본

 

꼭 봐야되는 마무리 꿀팁!
  •  같은 객체를 공유할 때는 얕은 복사 사용하기! 
  • 객체의 실제 값만 복사할 때는 깊은 복사 사용하기! 

▲영상으로 한번 더 복습하세요! :)