인스턴스를 생성할 때 set해주어야 하는 fields가 많으면 일일이 설정해주기가 번거로워지는데, constructor를 사용하면 좀 더 간편하게 set을 할 수 있게 됩니다. Constructor는 object가 생성될 때 한 번만 작동(호출)하는 특수한 method입니다.
Class의 object를 생성할 때 보면,
Car car = new Car()
와 같은 방식으로 생성하게 됩니다. 이때 new 뒤의 Car() 부분이 사실상 constructor를 호출하는 것입니다.
직접 커스텀 constructor를 생성하려면 해당 class 파일로 가서 아래 코드와 같이 작성하면 됩니다.
1
2
3
|
public Car() {
}
|
cs |
보시면 해당 constructor에는 public 키워드만 사용했을 뿐 다른 키워드를 붙이지 않습니다. (클래스 내에서만 호출하는 경우라면 private도 가능합니다.)
Constructor를 만들 때는 반드시 지켜야 하는 규칙이 몇 가지 있습니다.
1) 반드시 class 이름과 동일한 이름을 붙여주어야 한다.
2) 다른 method 와는 다르게 return type(void, String, ...)을 명시해주지 않는다.
위의 규칙을 적용하면 constructor를 원하는 대로 만들어서 사용할 수 있습니다.
한번 어떠한 특징이 있는지 조금 더 살펴보겠습니다.
1. Constructor는 overloading이 가능
Overloading이 가능하다는 것은, 동일한 이름의 method를 만들고 파라미터를 다르게 줄 수 있다는 의미이죠?
Constuctor에서도 가능합니다.
Parameter를 갖지 않는 것과 갖는 것 두 가지(또는 그 이상)를 생성해두면 상황에 맞추어 사용할 수 있습니다.
1
2
3
4
5
6
7
8
9
10
11
12
|
//1st constructor
public Car() {
}
//2nd constructor
public Car(int doors, int wheels, String model, String engine, String colour){
this.doors = doors;
this.wheels = wheels;
this.model = model;
this.engine = engine;
this.colour = colour;
}
|
cs |
이런식으로 constructor를 이용하면, 다른 클래스에서 Car object을 생성할 때 모든 필드마다 매번 .set***함수를 부를 필요가 없게됩니다. Set하고자 하는 값을 파라미터 값으로 넣어주면 됩니다.
1
|
Car bmw = new Car(4,4,"BMW","engine","white");
|
cs |
2nd constructor를 이용해 bmw라는 Car class 참조변수를 만들었습니다.
위와 같은 방식으로 사용하면 됩니다.
2. Constructor default 값 설정하기
Constructor는 서로 호출이 가능합니다. 이를 이용해서 parameter의 default 값을 설정해 보겠습니다.
위의 Car constructors 예시에서, 아무 parameter가 없는 constructor에 default 값을 설정하고 싶다면
this() method를 사용하면 됩니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
//1st constructor
public Car() {
//this() 함수로 2nd constructor를 호출
this(4,4,"default model","default engine","default colour");
}
//2nd constructor
public Car(int doors, int wheels, String model, String engine, String colour){
this.doors = doors;
this.wheels = wheels;
this.model = model;
this.engine = engine;
this.colour = colour;
}
|
cs |
이렇게 default값을 설정해두면 다른 클래스에서 아무 parameter가 없는 Car object 생성 시에 default 값을 사용하게 됩니다.
this() 함수가 2nd constructor를 호출하게 되는 것입니다.
**주의: this() method는 constructor에서 가장 첫 라인에 위치해야 합니다. this() 전에는 다른 코드가 올 수 없습니다.
**주의2: constuctor에는 this() method 외의 method는 사용하지 않는 것이 좋습니다.
일부 parameter의 값에만 default를 설정할 수도 있습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
//doors, wheels field만 default값 설정하기
public Car(String model, String engine, String colour) {
//this() 함수로 2nd constructor를 호출
this(4,4,model,engine,colour);
}
//2nd constructor
public Car(int doors, int wheels, String model, String engine, String colour){
this.doors = doors;
this.wheels = wheels;
this.model = model;
this.engine = engine;
this.colour = colour;
}
|
cs |
이런식으로 설정하여 원하는 파라미터 값만 default를 설정해서 이용할 수도 있습니다. 이 역시 this 함수를 사용해서 2nd consturctor를 호출하여 사용하는 것입니다.
보면 constructor끼리 연결이 되어 있는데, 이를 constructor chaining이라고 부릅니다.
Constructor 사용법에 대해 알아보았고, 다음번에는 class 사용을 더욱 편리하게 해주는 inheritance(상속)에 대해 알아보겠습니다. 상속 포스팅에 상속한 클래스의 constructor를 불러오는 방법도 나와있으니 궁금하시면 참고하시면 됩니다.
감사합니다. ☺️
*같이 보면 좋은 자료
https://www.programiz.com/java-programming/constructors
'Java' 카테고리의 다른 글
Class(4)-Composition (2) | 2022.04.27 |
---|---|
Class(3)-Inheritance(상속) 사용하기 (0) | 2022.04.25 |
Class(1)-Class란 & Class 사용하기 (0) | 2022.04.25 |
User Input 받는 방법 - Scanner사용 (0) | 2022.04.22 |
Switch문 (0) | 2022.04.18 |