Backend
[매일메일] 얕은 복사와 깊은 복사에 대해서 설명해주세요.
· 2분 읽기
얕은 복사와 깊은 복사에 대해서 설명해주세요.
1. 직접 조사(구글링, 공식문서, 기술 포스팅 등으로 학습)
얕은 복사(Shallow Copy) vs 깊은 복사(Deep Copy)
- 얕은 복사 (Shallow Copy)
- 개념: 객체 자체만 복사하고, 내부에 포함된 참조형 변수들은 주소값을 그대로 복사한다.
- 특징:
- 새로운 객체가 만들어지지만, 내부 참조 필드는 원본과 동일한 객체를 가리킴.
- 따라서 참조된 객체의 값이 변경되면 원본과 복사본 모두 변경된다.
- 예시:→ 같은 객체를 바라보기 때문에 원본 변경 시 복사본도 영향 받음.
- PhysicalInformation physicalInformationShallowCopy = physicalInformation;
- 깊은 복사 (Deep Copy)
- 개념: 객체와 그 내부 참조 필드까지 모두 새로운 객체로 복사하는 방식.
- 특징:
- 참조 공유 X → 완전히 독립적인 객체 생성.
- 원본이 변경되더라도 복사본은 영향 없음.
- 방법:
- Cloneable 인터페이스를 implements 하고, clone() 메서드를 override.
- 내부 참조 객체도 별도로 clone()을 구현해야 함.
코드 예제
1. 기본 클래스
class Person {
String name;
int age;
// 생성자
Person(String name, int age) {
this.name = name;
this.age = age;
}
}
2. 테스트 (얕은 복사 vs 깊은 복사)
public class CopyTest {
public static void main(String[] args) {
Person p1 = new Person("홍길동", 20);
// 얕은 복사 (주소만 복사)
Person shallowCopy = p1;
// 깊은 복사 (새로운 객체 생성)
Person deepCopy = new Person(p1.name, p1.age);
// 원본 수정
p1.name = "이순신";
p1.age = 30;
// 출력 결과 확인
System.out.println("원본: " + p1.name + ", " + p1.age);
System.out.println("얕은 복사: " + shallowCopy.name + ", " + shallowCopy.age);
System.out.println("깊은 복사: " + deepCopy.name + ", " + deepCopy.age);
}
}
3. 실행 결과
원본: 이순신, 30
얕은 복사: 이순신, 30 ← 같은 객체를 가리킴
깊은 복사: 홍길동, 20 ← 독립된 객체
2. 정답 확인(매일메일 해설)
3. 최종 정리
- 얕은 복사: 객체만 새로 만들고, 내부 참조는 원본 공유 → 원본 변경 시 복사본도 영향
- 깊은 복사: 객체와 내부 참조까지 모두 새로 복사 → 완전히 독립적
🔗 참고 URL
댓글
GitHub 계정으로 댓글을 남길 수 있어요.