안녕하세요 이번 글에서는 객체의 복사에 대해서 알아보겠습니다
소스 코드를 보겠습니다
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48 |
package StringTest;
public class Main{
public static void main(String[] args) {
Car c1 = new Car();
Car c2 = new Car();//c2의 타입은 Car타입이다
System.out.println("c1의 주소 값 : "+c1);//c1의 주소 값을 출력한다
System.out.println("c2의 주소 값 : "+c2);//c2의 주소 값을 출력한다
c1.setSpeed(10);//c1의 speed를 10으로 초기화 한다
c2.setSpeed(20);//c2의 speed를 20으로 초기화 한다
System.out.println("c1의 speed 출력 : "+c1.getSpeed());//c1.getSpeed를 출력해서 확인한다
System.out.println("c2의 speed 출력 : "+c2.getSpeed());//c2.getSpeed를 출력해서 확인한다
c1.setSpeed(c2.getSpeed());//c2.getSpeed의 값을 c1의 speed에 저장한다
System.out.println("값의 복사가 일어남");
System.out.println("c1의 speed를 출력 : "+c1.getSpeed());//c1.getSpeed를 출력한다
System.out.println("c2의 speed를 출력 : "+c2.getSpeed());//c2.getSpeed를 출력한다
System.out.println("c1의 주소 값 : "+c1);//c1에 저장된 주소 값을 출력한다
System.out.println("c2의 주소 값 : "+c2);//c2에 저장된 주소 값을 출력한다
c1=c2;
c1.setSpeed(10);//c1의 speed를 10으로 저장한다
System.out.println("c2의 speed를 출력 (c1이 c2의 주소를 가지고 있으므로 10이 출력된다): "+c2.getSpeed());
}
}
class Car {
private int speed;
private String gear;
public int getSpeed() {
return speed;
}
public void setSpeed(int speed) {
this.speed = speed;
}
public String getGear() {
return gear;
}
public void setGear(String gear) {
this.gear = gear;
}
} |
cs |
출력
그림으로 얕은 복사와 깊은 복사에 대해서 알아보겠습니다
●얕은 복사(주소를 복사한다)
얕은 복사 전의 그림
얕은 복사 후의 그림
가지고 있는 주소 값이 같기 때문에 c1.Speed의 값을 변경하면 c2.speed의 값도 바뀐다
●깊은 복사(값을 복사한다)
깊은 복사 전의 그림
깊은 복사 후의 그림
주소의 값이 같게 되면 스택 영역의 참조변수를 통해서 주소 값이 같은 다른 참조변수의 힙영역도 변경 시킬 수 있습니다
설명이 부족하시진 않으셨나요? jswoo030@gmail.com 으로 질문해주시면 빠른 답변을 받으실 수 있습니다
여러분의 자바 실력이 향상되시길 바랍니다
'Java 강의' 카테고리의 다른 글
자바 객체 / 클래스 (0) | 2017.09.29 |
---|---|
자바 함수 / java method (0) | 2017.09.29 |
자바 for each 구문 (0) | 2017.09.27 |
자바 break; continue; (0) | 2017.09.27 |
반복문으로 *을 출력하는 예제 (0) | 2017.09.26 |
댓글