Java/Java language
[Java] 생성자 (Constructor)
CrackCo
2020. 8. 6. 19:28
자바 객체는 클래스를 인스턴스화할 때 호출하여 초기화하는 역할을 담당합니다.
생성자 (Constructor)
생성자를 호출하여 멤버 변수에 데이터를 초기화합니다.
setter 메소드를 사용하여 초기화할 수 있지만 자바에서 생성자를 호출함과 동시에
멤버 변수를 초기화할 수 있도록 하는 편의성을 제공합니다.
따라서 일반적으로 setter 메소드는 멤버 변수에 저장된 데이터를 수정하는 역할을 담당합니다.
modifier class_name([data_type variable, ...]) {
[...]
}
메소드와 여러가지 비슷한 특징을 가지지만 리턴 타입이 없으며
반드시 클래스와 동일한 이름으로 지정해야 합니다.
만약, 생성자를 따로 정의하지 않았다면 자동으로 기본 생성자가 생성됩니다.
// 기본 생성자
public class_name() {}
개발자가 명시적으로 생성자를 정의하면 기본 생성자는 자동으로 제공되지 않으므로
기본 생성자가 필요할 경우 명시적으로 정의해야 합니다.
E.g.
// Constructor.java
public class Constructor {
public Constructor() {
System.out.println("기본 생성자 호출!");
}
}
// Main.java
public class Main {
public static void main(String[] args) {
Constructor constructor = new Constructor();
// Constructor 클래스의 생성자를 사용하여 객체 생성
}
}
// 실행 결과
기본 생성자 호출!
자바의 객체는 생성자에 의해 생성됩니다.
위의 예제처럼 생성자를 임의로 지정하고 블록 안에 명령문을 넣으면
메소드와 비슷하게 명령문을 수행하게 됩니다.
객체의 생성과 동시에 멤버 변수를 초기화하는 생성자를 정의해봅시다.
E.g.
// Constructor.java
public class Constructor {
String name;
public Constructor() {
System.out.println("기본 생성자 호출!");
}
public Constructor(String name) {
// String 타입의 데이터를 받아
// 멤버 변수 name에 저장
this.name = name;
System.out.println("Constructor(String) 생성자 호출!");
}
}
// Main.java
public class Main {
public static void main(String[] args) {
Constructor constructor = new Constructor();
Constructor constructor2 = new Constructor("dev우쟈");
// constructor 객체의 name 멤버 변수 출력
System.out.println(constructor.name);
// constructor2 객체의 name 멤버 변수 출력
System.out.println(constructor2.name);
}
}
// 실행 결과
null
dev우쟈
위 처럼 생성자는 같은 이름으로 선언하되 받는 인자의 갯수나 순서, 데이터 종류가 다르면
오버로딩이라는 기술의 의해 일치하는 메소드 또는 생성자가 호출됩니다.
기본 생성자로 객체가 생성되었다면 객체의 멤버 변수에는 각 데이터 타입에 따라 기본값이 초기화되며
String 타입의 매개 변수를 받아 생성과 동시에 초기화하는 생성자로 객체가 생성되면
명령에 따라 멤버 변수가 초기화됩니다.