1. 학습목표
생성자에 대해 이해할 수 있다.
2.필요 개념 문장정리
생성자
- 생성자는 인스턴스가 생성될 때 호출되는 인스턴스 초기화 메서드이다. 인스턴스초기화란 인스턴스변수들을 초기화하는 것을 뜻한다.
- 생성자 역시 메서드처럼 클래스 내에 선언되며 구조도 메서드와 유사하지만 리턴값이 없다는 점이 다르다.
1.생성자의 이름은 클래스의 이름과 같아야한다.
2.생성자는 리턴값이 없다.
- 연산자 new가 인스턴스를 생성하는 것이지 생성자가 인스턴스를 생성하는 것이 아니다.
- 생성자는 단순히 인스턴스변수들의 초기화에 사용되는 메서드일 뿐이다.
card c = new Card();
- 연산자 new에 의해서 메모리에 Card클래스의 인스턴스가 생성된다.
- 생성자 Card()가 호출되어 수행된다.
- 연산자 new의 결과로 생성된 Card인스턴스의 주소가 반환되어 참조변수 c에 저장된다.
- 모든 클래스에는 반드시 하나 이상의 생성자가 정의되어야 한다.
- 생성자를 정의하지 않고도 인스턴스를 생성할 수 있었던 이유는 기본생성자 때문이다.
- 컴파일러가 자동적으로 기본 생성자를 추가해주는 경우는 클래스내에 생성자가 하나도 없을때 뿐이다.
- 매개변수가 있는 생성자를 사용하면 인스턴스를 생성하는 동시에 원하는 값으로 초기화를 할 수 있다.
- 클래스를 작성할 때 다양한 생성자를 제공함으로써 인스턴스 생성 후에 별도로 초기화를 하지 않도록 한다.
this(),this
- 생성자간에 호출은 생성자의 이름으로 클래스 대신 this를 사용한다.
- 한 생성자에서 다른 생성자를 호출할 때는 반드시 첫 줄에서만 호출이 가능하다.
3. 코드작성
class Car {
String color;
String gearType;
int door;
Car() {
this("white", "auto", 4);
}
Car(String color){
this("color", "auto", 4);
}
Car(String color, String gearType, int door) {
this.color = color;
this.gearType = gearType;
this.door = door;
}
}
class CarTest2 {
public static void main (String[] args) {
Car c1 = new Car();
Car c2 = new Car("blue");
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의 color=white, gearType=auto, door=4
c2의 color=blue, gearType=auto, door=4
- 생성자의 매개변수로 선언된 변수 이름이 인스턴스변수와 같을 경우에는 인스턴스변수 앞에 this를 사용하면 된다.
- this는 인스턴스 자신을 가리키며 인스턴스변수에 접근할 수 있다.
- static메서드에서는 인스턴스를 생성하지 않고도 호출될 수 있으므로 this는 사용할 수 없다.
this : 인스턴스 자신을 가리키는 참조변수, 인스턴스의 주소가 저장되어있다. 모든 인스턴스메더스에 지역변수로 숨겨진 채로 존재
this(), this(매개변수) 생성자, 같은 클래스의 다른생성자를 호출할 때 사용한다.
4. 마무리
this의 쓰임에 대해 이해할 수 있었다. 하지만 개발과정에서 구체적으로 어떻게 사용되는 더 공부해야할 것 같다.
'언어 기초 > JAVA' 카테고리의 다른 글
[자바의정석 | 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 |
[자바의정석 | Chapter 06 객체지향 프로그래밍1] 메서드로 배열 다루기 (0) | 2024.01.17 |