Java에서의 깊은 복사와 얕은 복사
처음 객체지향을 배운 언어가 Java인 점도 있고, Android 개발을 하기 때문에 Java라는 언어가 저한테는 되게 편하고 익숙한 언어입니다.
근데 Java에서도 깊은 복사와 얕은 복사라는 개념을 최근에 알게 되어 이렇게 정리할까 합니다.
1. int, double
먼저 숫자 계열입니다.
int a = 1;
int b = a;
a = 3;
double c = 3.2;
double d = c;
c = 2.5;
이렇게 해서 출력을 하면
각자 값대로 나오는 것을 보실 수 있습니다.
복사한 값이 변경되어도 서로 영향을 끼치지 않으니
int와 double은 깊은 복사라는 것을 알 수 있습니다.
2. String, char
두번째로는 문자 계열입니다.
String a = "hello";
String b = a;
a = "world";
char c = 's';
char d = c;
c = 'a';
출력을 하면
문자 계열인 Stirng과 char 또한 서로 영향을 주지 않는 깊은 복사라는 것을 알 수 있습니다.
3. Array
세번째는 배열입니다.
int[] a = {1,2,3};
int[] b = a;
a[0] = 3;
출력을 하게 되면
두 배열의 값이 같이 바뀐 것을 볼 수 있습니다.
분명 a의 0번째 요소만 3으로 변경했는데 말입니다.
이를 통해 배열은 얕은 복사라는 것을 알 수 있습니다.
4. Object
네번째는 객체입니다.
//Student 클래스
class Student{
int age;
String name;
public Student(int age, String name){
this.age = age;
this.name = name;
}
@Override
public String toString() {
return "이름 : "+name+" 나이 : "+age;
}
}
//메인
Student s1 = new Student(10, "김김김");
Student s2 = s1;
s1.name = "박박박";
System.out.println(s1.toString());
System.out.println(s2.toString());
이름과 나이를 받는 Student 클래스를 만들고
s1의 name을 바꿔 보았습니다.
두 객체 또한 같이 변경되었다는 것을 알 수 있습니다.
객체 또한 얕은 복사였습니다.
평소 코딩할 때, 깉은 복사와 얕은 복사를 주의하지 않고 하다보면 이렇게 코드가 꼬여버리는 경우가 존재할 것 같습니다.
전 다행히도 아직까지 이런 경험을 해본 적은 없지만, 앞으로 이런 점을 유의해서 코딩해야 될 것 같습니다.
Author And Source
이 문제에 관하여(Java에서의 깊은 복사와 얕은 복사), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@nkstar00/Java에서의-깊은-복사와-얕은-복사저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)