- 자바의 정석 (기본편)을 참고했습니다.
- 복습을 위한 게시글입니다.
- 소스에 오타가 있을 수 있습니다. ^^:;
생성자(constructor) 란 ?
생성자는 인스턴스가 생성될 때 호출되는 인스턴스 초기화 메서드이다.
생성자는 특별한 메서드라고 할 수 있는데, 다음과 같은 특징을 지닌다.
1. 생성자 역시 메서드처럼 클래스 내부에 선언된다.
2. 생성자의 이름은 클래스의 이름과 동일해야 한다.
3. 생성자는 return 값이 없다. (void가 생략되는 것)
4. 생성자 또한 오버로딩이 가능하다.
5. 매개변수가 없거나 있을 수 있다.
기본 생성자
클래스 내부에 아무런 생성자도 없다면, 컴파일러가 제공해주는 생성자이다.
인스턴스 초기화 작업이 필요없다면 기본 생성자를 사용하자.
클래스 내부에 하나라도 생성자가 있다면 컴파일러는 기본 생성자를 제공해주지 않는다 !!
생성자 오류 예제 코드
Data 인스턴스를 생성할 때, 클래스 내부에 아무런 생성자도 없기에 컴파일러가 기본 생성자를 자동으로 추가해준다.
하지만 Data2 클래스에는 하나 이상의 생성자가 정의되어 있기 때문에 기본 생성자가 추가되지 않았고, 그래서 에러가
발생한 것이다.
class Data {
int value;
}
class Data2{
int value; // 매개변수가 있는 생성자
Data2(int x) {
value = x;
}
}
class Ex6_11 {
public static void main(String args[]){
Data d = new Data(); Data2 d = new Data2(); // 에러 원인
}
}
/*결과 17번 줄 컴파일 에러 발생 메세지 */
매개변수가 있는 생성자
생성자는 인스턴스 초기화 작업에 사용할 수 있다고 했다. 매개변수가 있는 생성자가 있다면 인스턴스마다 각기 다른
값으로 초기화돼야 하는 경우에 아주 유용하게 사용할 수 있다.
매개변수가 있는 생성자 예제 코드
Car 클래스 내부에 생성자가 1개 이상 존재한다. 때문에 기본 생성자를 사용하기 위해선 직접 기본 생성자를 적어준다.
Car c = new Car(); 에서 인스턴스를 생성할 때 기본 생성자를 호출하는데, 기본 생성자는 따로 인스턴스를 초기화하는
작업이 없기 때문에 color, gearType, door를 직접 초기화 해준 뒤 사용한다.
Car c1 = new Car("White", "auto", 4); 구문을 확인해보면, 따로 초기화를 하지 않는데, 이것이 바로 매개변수가 있는
생성자를 사용하는 이유이다.
class Ex6_12{
public static void main(String args[]){
Car c = new Car();
c.color = "White";
c.gearType = "auto";
c.door = 4;
Car c1 = new Car("White", "auto", 4);
System.out.println(c.color +","+ c.gearType +","+ c.door);
System.out.println(c1.color +","+ c1.gearType +","+ c1.door);
}
}
class Car {
String color;
String gearType;
int door;
// Car 클래스 기본 생성자
Car() {}
// Car 클래스 매개변수가 있는 생성자
Car(String c, String g, int d) {
color = c; // 매개변수로 받은 c 값을 변수 color에 저장한다.
gearType = g; // 매개변수로 받은 g 값을 변수 gearType에 저장한다.
door = d; // 매개변수로 받은 d 값을 변수 door에 저장한다.
}
}
'JAVA' 카테고리의 다른 글
[JAVA 복습] 참조변수 super와 조상의 생성자 super() (0) | 2021.09.02 |
---|---|
[JAVA 복습] 상속에 대해 (0) | 2021.09.02 |
[JAVA 복습] 생성자 this() 와 객체 자신을 가리키는 참조변수 this (0) | 2021.08.31 |
[JAVA 복습] 오버로딩 / 오버라이딩 비교 (0) | 2021.08.31 |
[JAVA 복습] 기본형, 참조형 매개변수의 비교 (0) | 2021.08.31 |