728x90
생성자를 이용한 인스턴스의 복사
현재 사용하고 있는 인스턴스와 같은 상태를 갖는 인스턴스를
하나 더! 만들고자 할 때..
즉, 두 인스턴스의 모든 인스턴스 변수(상태)가
동일한 값을 가지도록 하고 싶을 때,
생성자를 사용할 수 있다.
(Java AIP의 많은 클래스들이 인스턴스 복사를 위한 생성자를 정의해놓고 있다.
Object클래스의 clone메서드.. p.456)
잘 이해가 안된다면 코드를 보면서
생성자를 이용한 인스턴스의 복사에 대해 알아보자.
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
|
class Car {
String color; // 색상
String gearType; // 변속기 종류 - auto(자동), manual(수동)
int door; // 문의 개수
Car() {
this("white", "auto", 4);
}
// Car(Car c) { // 인스턴스의 복사를 위한 생성자.
// color = c.color;
// gearType = c.gearType;
// door = c.door;
// }
//↓ 다른 생성자인 Car(String color, String gearType, int door){}를 호출하는 것이 바람직함.
Car(Car c) {
this(c.color, c.gearType, c.door);
}
Car(String color, String gearType, int door) {
this.color = color;
this.gearType = gearType;
this.door = door;
}
}
class CarTest3 {
public static void main(String[] args) {
Car c1 = new Car();
Car c2 = new Car(c1); // c1의 복사본 c2를 생성한다.
System.out.println("c1의 color=" + c1.color + ", gearType=" + c1.gearType+ ", door="+c1.door);
System.out.println("c2의 color=" + c2.color + ", gearType=" + c2.gearType+ ", door="+c2.door);
c1.door=100; // c1의 인스턴스변수 door의 값을 변경한다.
System.out.println("c1.door=100; 수행 후");
System.out.println("c1의 color=" + c1.color + ", gearType=" + c1.gearType+ ", door="+c1.door);
System.out.println("c2의 color=" + c2.color + ", gearType=" + c2.gearType+ ", door="+c2.door);
}
}
|
cs |
실행해서 결과를 보면
c1 인스턴스와
c2 인스턴스가 복사되어 같은 값을 가진 것을 확인할 수 있고,
c1인스턴스와
c2인스턴스의 메모리 공간은 독립적이므로
하나의 인스턴스(c1)의 값을 변경하더라도
다른 인스턴스(c2)의 값은 변하지 않는다.
c1 인스턴스는 첫번째 생성자에 의해 초기화되었고(기본생성자)
c2 인스턴스는 두번째 생성자에 의해 초기화된다(매개변수생성자)
하지만 c2가 c1을 매개변수로 가지는 Car(c1)생성자를 호출했기 때문에
c1의 값들이 그대로 c2에 전달되어 복사가 된다.
인스턴스를 생성할 때 결정해야할 2가지 사항
1. 클래스 : 어떤 클래스의 인스턴스를 생성할 것인가?
2. 생성자 : 선택한 클래스의 어떤 생성자로 인스턴스를 생성할 건가?
728x90
'코딩 > JAVA' 카테고리의 다른 글
File 클래스_자바의정석 (0) | 2021.08.03 |
---|---|
변수의 초기화_자바의정석 (0) | 2021.08.02 |
Eclipse (설정 가져오기/내보내기)Preferences Export/Import (0) | 2021.07.30 |
생성자에서 다른 생성자 호출_this()/this?_자바의정석 (0) | 2021.07.22 |
생성자(Constructor)_자바의정석 (0) | 2021.07.22 |