생성자
생성자는 클래스로부터 객체를 생성할 때 자동으로 호출되는 메소드를 말한다. 객체의 멤버 변수 초기화를 담당하는 특수한 목적의 메소드이다.
생성자의 개념과 특징
- 메소드 이름이 클래스 이름과 동일하다.
- 리턴 타입이 없으며, void조차 허용하지 않는다.
- 객체 생성 시 자동으로 호출되며, 일반 메소드처럼 참조 변수를 통해 호출할 수 없다.
- 생성되는 객체의 멤버 변수 초기화를 담당한다.
- 생성자가 하나도 정의되지 않은 클래스에는 기본 생성자가 자동으로 제공된다.
- 하나의 클래스에 여러 개의 생성자를 오버로딩 할 수 있다.
- this() 형태의 특수한 생성자가 있다.
기본 생성자
기본 생성자는 매개변수가 없는 생성자를 의미한다.
생성자의 가장 중요한 기능이 멤버 변수의 초기화인데, 기본 생성자는 매개변수를 가질 수 없기 때문에 멤버 변수를 기본값으로 초기화한다.
그래서 기본 생성자라는 이름을 갖게 된 것이다.
기본 생성자의 또 다른 특징으로는 클래스에 생성자가 하나도 없을 때 기본으로 제공된다는 것이다. 따라서 다음 두 클래스는 동일한 코드라고 볼 수 있다.
public class Student {
String name;
int score;
}
public class Student {
String name;
int score;
Student() {}
}
생성자를 통해서 객체의 멤버변수를 초기화 하기
// 1. 클래스 선언부
public class Student {
public String name;
public int score;
public boolean isPassed;
public String major;
public Student() {}
public Student(String stdName, int stdScore, boolean stdIsPassed, String stdMajor) {
name = stdName;
score = stdScore;
isPassed = stdIsPassed;
major = stdMajor;
}
public void printInfo() {
System.out.println(name + "의 전공 : " + major + " 점수 : " + score + " 시험 통과 여부 : " + isPassed);
}
}
public Student() {} 는 기본생성자이고, 그 아래에 매개변수를 가지고 있는 public Student( ... ) {} 는 멤버변수 값을 초기화 해주는 오버로딩된 생성자이다.
기본 생성자로 객체를 선언하게 되면 멤버변수값들이 아래와 같이 기본값으로 초기화가 된다. int type의 score 는 0, boolean 타입의 isPassed는 false, 참조 변수 타입인 name, major는 null 값을 갖게 된다.
public class Main {
public static void main(String[] args) {
Student millpre = new Student();
millpre.printInfo();
}
}
아래와 같이 매개변수를 넣어 선언하게 되면 매개변수에 맞게 멤버변수 값들이 초기화 되는 것을 확인할 수 있다.
public class Main {
public static void main(String[] args) {
Student millpre = new Student("millpre", 90, true, "cs");
millpre.printInfo();
}
}
this() 생성자
생성자의 이름은 반드시 클래스의 이름과 동일해야 한다. 그런데 생성자 중에 클래스의 이름을 사용하지 않는 this() 라는 독특한 생성자가 존재한다.
this() 생성자를 이용하면 같은 클래스에 있는 다른 생성자를 호출할 수 있다. 이를 통해 생성자 내의 코드 중복을 제거할 수 있다.
코드를 보면 바로 이해할 수 있을 것이다.
// 1. 클래스 선언부
public class Student {
public String name;
public int score;
public boolean isPassed;
public String major;
public Student() {}
public Student (String stdName, int stdScore) {
name = stdName;
score = stdScore;
}
public Student(String stdName, int stdScore, boolean stdIsPassed, String stdMajor) {
this(stdName, stdScore);
isPassed = stdIsPassed;
major = stdMajor;
}
public void printInfo() {
System.out.println(name + "의 전공 : " + major + " 점수 : " + score + " 시험 통과 여부 : " + isPassed);
}
}
'Language > JAVA' 카테고리의 다른 글
[JAVA] Enum 열거형 (0) | 2023.11.04 |
---|---|
[JAVA] Getter/Setter (0) | 2023.11.02 |
[JAVA] 값 복사와 주소 복사 (0) | 2023.10.25 |
[JAVA] Java Collections / Array / ArrayList (2) | 2023.10.25 |
[JAVA] 테스트코드 작성하기 (1) | 2023.10.24 |