본문 바로가기

자바

[JAVA] 깊은 복사(Deep Copy)와 얕은 복사(Shallow Copy)

728x90

/*깊은 복사와 얕은 복사*/

얕은 복사 (Shallow Copy)는 주소 값을 스택 영역에 복사한다.

깊은 복사 (Deep Copy)는 실제 값을 힙 영역에 복사한다.

/* 얕은 복사 */

Person person = new Person("Person1",20);
Person newPerson = person;

newPerson.setName("NewPerson");
newPerson.setAge(1);

System.out.println(person); // NewPerson, 1
System.out.println(newPerson); // NewPerson, 1

 

newPerson의 객체는 스택에 쌓인다. 하지만 newPerson은 person과 같은 메모리 주소 값을 참조한다. 

따라서 newPerson의 필드 값이 변경되면 person의 필드값도 변경 된다.

/* 깊은 복사 */

방법은 여러가지가 있다

  • 생성자 이용
  • 복사 팩토리 메서드 이용
//객체 생성자 이용
Person person = new Person("Person",25);
Person newPerson = new Person(person.getName(), person.getAge());

//복사 팩토리 메서드 이용, Person 클래스 안의 메서드
public static Person copyFactory(Person person){
	Person newPerson = new Person(person.name, person.age);
    return newPerson;
}

 

newPerson의 객체는 스택에 쌓인다. newPerson은 person과 다른 메모리 주소 값을 참조한다.

따라서 newPerson의 필드 값이 변경되면 person의 필드 값은 변경되지 않는다.

728x90