1. 학습목표
인스턴스의 복사를 통해 생성자의 사용을 이해할 수 있다.
2.필요 개념 문장정리
- 현재 사용하고 있는 인스턴스와 같은 상태를 갖는 인스턴스를 하나 더 만들고자 할 때 생성자를 사용할 수 있다.
- 두 인스턴스가 같은 상태를 갖는다는 것은 두 인스턴스의 모든 인스턴스 변수가 동일한 값을 갖고 있다는 것을 뜻한다.
- Car클래스의 참조변수를 매개변수로 선언한 생성자이다. 매개변수로 넘겨진 참조변수가 가리키는 Car인스턴스의 인스턴스변수인 color, gearType, door의 값을 인스턴스 자신으로 복사하는 것이다.
- 어떤 인스턴스의 상태를 전혀 알지 못해도 똑같은 상태의 인스턴스를 추가로 생성할 수 있다.
3. 코드작성
class Car {
String color;
String gearType;
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) {
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("c1의 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("c1의 color=" + c2.color + ", gearType=" + c2.gearType + ", door=" + c2.door);
}
}
실행결과
1의 color=white, gearType=auto, door=4
c2의 color=blue, gearType=auto, door=4
c1.door=100; 수행 후
1의 color=white, gearType=auto, door=100
c2의 color=blue, gearType=auto, door=4
인스턴스 c2는 c1을 복사하여 생성된 것이므로 서로 같은 상태를 갖지만 서로 독립적으로 메모리공간에 존재하는 별고의 인스턴스이므로 c1의 값들이 변경되어도 c2는 영향을 받지 않는다
인스턴스를 생성할 때는 2가지 사항을 결정해야 한다.
- 클래스 - 어떤 클래스의 인스턴스를 생성할 것인가?
- 생성자 - 선택한 클래스의 어떤 생성자로 인스턴스를 생성할 것인가?
4. 마무리
개념적으로는 이해하지만 개발을 하면서 기능을 구현하는 과정에서 구체적으로 이해하고 있어야한다는 생각이 들었다. 프로젝트를 지속적으로 수행하면서 개념에 대해 확신을 가져야겠다.
'언어 기초 > JAVA' 카테고리의 다른 글
[자바의정석 | Chapter 07 객체지향 프로그래밍2] 상속 (0) | 2024.02.01 |
---|---|
[자바의정석 | Chapter 06 객체지향 프로그래밍1] 변수의 초기화 (0) | 2024.01.30 |
[자바의정석 | Chapter 06 객체지향 프로그래밍1] 생성자 (0) | 2024.01.30 |
[자바의정석 | Chapter 06 객체지향 프로그래밍1] 오버로딩 (0) | 2024.01.21 |
[자바의정석 | Chapter 06 객체지향 프로그래밍1] 클래스 메서드와 인스턴스 메서드 (0) | 2024.01.18 |