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
'자바' 카테고리의 다른 글
[JAVA] 자바 8, 11, 17, 21 그리고 22 업데이트 (1) | 2024.03.27 |
---|---|
[JAVA] Arrays.sort Collections.sort 알고리즘 차이 (0) | 2024.03.22 |
[Java] equals 와 hashCode - 객체 일 경우 (0) | 2024.03.17 |
[JAVA] 불변 객체 & 불변 클래스 (0) | 2024.03.13 |
[JAVA] 컬렉션 - LinkedList (0) | 2024.02.07 |