생성자
생성자 = 인스턴스 초기화 메서드.
만드는 조건은 다음과 같다.
- 생성자의 이름 = 클래스의 이름
- 리턴 값이 없어야 한다.
생성자의 예시
클래스 안에 생성자를 만드는 예시
java
class Card() {
/*매개변수가 없는 생성자*/
Card() {
...
}
/*매개변수가 있는 생성자*/
Card(String k, int num) {
...
}
}
실제로 생성자를 사용하는 예시.
java
Card c = new Card();
// new로 인스턴스를 만들고, Card()로 인스턴스를 초기화한다.
char[] charArr = { 'H', 'e', 'l', 'l', 'o' };
String x = new String(charArr);
// new로 인스턴스를 만들고, String()로 인스턴스를 초기화한다.
생성자의 종류
- 기본 생성자
- 클래스에 정의된 생성자가 하나도 없을 때 발동
- 컴파일러는 이 과정을 자동으로 해준다.
- 매개변수가 있는 생성자
- 매개변수를 담고 있는 생성자
- 위에 쓴
String()이 대표적인 예시
다른 생성자의 호출
생성자가 2개 이상 있을 경우, 다른 생성자를 호출할 수 있다.
다만, 두 가지 규칙이 존재한다.
(1) 클래스 이름 대신 this를 사용한다. (2) 한 생성자에서 다른 생성자를 호출할 땐, 반드시 첫 줄에서만 호출이 가능
예를 들어, 다음과 같이 메소드가 정의되어 있다고 치자.
java
class Car {
String s;
String t;
int value;
Car() {
this("xxx", "yyy", 110);
}
Car(Car c) {
s = c.s;
t = c.t;
value = c.value;
}
Car (String s, String t, int value) {
this.s = s;
this.t = t;
this.value = value;
}
}
this() 메소드는 Car()의 첫 번째 줄에 사용되었다.
또 this.s = s를 살펴보자.
- this 뒤의 s는 인스턴스 변수이다.
- 반면, s는 지역변수이다.
이런 식으로, 멤버변수와 생성자의 매개변수의 이름이 같을 경우 this를 쓸 수 있다.
this는 인스턴스 변수에서만 사용할 수 있다. (static에선 못 씀)