티스토리 뷰
자바 깊은 복사(Deep Copy) 얕은 복사(Shallow Copy) 비교
코딩을 하다보면 깊은복사 얕은복사에 대한 내용은 많이 접하셨을 겁니다.
간단하고 기본적인 내용이지만 종종 헷갈린 경우도 있을건데요.
오늘은 깊은 복사 얕은복사에 차이에 대해서 알아보겠습니다.
- 깊은복사
- 객체를 복사시 객체가 가지고 있는 값을 새로운 메모리에 복사합니다.
- 얕은복사
- 객체를 복사시 객체가 가지고 있는 값을 복사하는 것이 아니라 객체의
주소값
을 복사합니다.
public class CopyObject implements Cloneable {
private String name;
private int age;
private LocalDate birth;
public CopyObject(String name, int age, LocalDate birth) {
this.name = name;
this.age = age;
this.birth = birth;
}
@Override
protected CopyObject clone() throws CloneNotSupportedException {
return (CopyObject) super.clone();
}
public String getName() {
return this.name;
}
public int getAge() {
return this.age;
}
public LocalDate getBirth() {
return this.birth;
}
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
public void setBirth(LocalDate birth) {
this.birth = birth;
}
}
public class CopyExample {
public static void main(String[] args) {
String name = "Hong";
int age = 22;
LocalDate birth = LocalDate.of(2000, 1, 1);
int changeAge = 32;
// 얕은 복사
CopyObject shallowOriginal = new CopyObject(name, age, birth);
CopyObject shallowCopy = shallowOriginal;
shallowCopy.setAge(changeAge);
int shallowOriginalAge = shallowOriginal.getAge();
int shallowCopyAge = shallowCopy.getAge();
System.out.println("shallow original age : " + shallowOriginalAge);
System.out.println("shallow copy age : " + shallowCopyAge);
// 깊은 복사1 직접 복사
CopyObject deepOriginal1 = new CopyObject(name, age, birth);
CopyObject deepCopy1 = new CopyObject(
deepOriginal1.getName(),
deepOriginal1.getAge(),
deepOriginal1.getBirth());
deepCopy1.setAge(changeAge);
int deepOriginalAge1 = deepOriginal1.getAge();
int deepCopyAge1 = deepCopy1.getAge();
System.out.println("deep original1 age : " + deepOriginalAge1);
System.out.println("deep copy1 age : " + deepCopyAge1);
// 깊은 복사2 Cloneable 이용
CopyObject deepOriginal2 = new CopyObject(name, age, birth);
CopyObject deepCopy2 = deepOriginal2.clone();
deepCopy2.setAge(changeAge);
int deepOriginalAge2 = deepOriginal2.getAge();
int deepCopyAge2 = deepCopy2.getAge();
System.out.println("deep original2 age : " + deepOriginalAge2);
System.out.println("deep copy2 age : " + deepCopyAge2);
}
}
감사합니다.
'Programming > JAVA' 카테고리의 다른 글
자바 Java 소수점 올림 반올림 버림 (0) | 2022.07.15 |
---|---|
Java 자바 소수점 자르기 (0) | 2022.07.13 |
자바 최대값 최소값 구하기 (0) | 2022.06.27 |
자바 문자열 숫자인지 확인 (0) | 2022.06.25 |
[Java] 자바 배열, 리스트 랜덤으로 섞기 random shuffle (0) | 2022.06.22 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 근로소득원천징수영수증
- 여권
- 국민연금
- 근로소득원천징수영수증 발급
- 자바 Date 변환
- 크린토피아
- 자바
- Java String 변환
- 안드로이드
- 자바 LocalDateTime 변환
- 자바스크립트 time to seconds
- 아이폰
- 신한카드
- nginx Request Entity Too Large
- nginx client_max_body_size
- 우체국
- Java LocalDateTime 변환
- 구글
- 크린토피아 가격표
- 정렬
- 근로소득원천징수영수증 발급 방법
- 자바 소수점
- 핸드폰
- 실업급여
- 휴면계좌
- Java Date 변환
- nginx 파일 업로드 크기
- Javascript time to seconds
- 자바 String 변환
- 자바 정렬
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
글 보관함