2022.12.15 - [JAVA] - [JAVA]클래스와 인스턴스
생성자(Constructor)
지난 포스팅에서 클래스와 인스턴스에 대한 내용을 다루었습니다. 다음과 같은 코드를 사용하여 인스턴스를 생성하였습니다.
클래스 변수(객체) = new 클래스();
//클래스() --> 생성자 호출
위의 코드가 실행되고 인스턴스가 생성될 시에 반드시 실행되어야 하는 작업이 있다. 바로 인스턴스를 초기화해야 하는 일이다. 이 초기화의 역할을 해주는 것이 바로 생성자(Constructor)이다. 이 생성자(Constructor)은 인스턴스 객체 생성 시에 가장 먼저 호출이 된다. 또한 클래스에 생성자가 없다면 객체에 접근을 하지 못한다. 하지만 지난 포스팅에서 인스턴스를 생성할 때 코드상 생성자는 보이지 않는다. 이유는 무엇일까?
생성자(Constructor)의 기본 예제
public class school {
class StudentClass {
String name;
int personnel;
}
public StudentClass(String name, int personnel) {
this.name = name;
this.personnel = personnel;
}
public classInfo() {
return name + "은" + personnel + "명 입니다.";
}
public static void main(String[] args) {
StudentClass studentClass = new StudentClass("moonstar class", 30);
System.out.println(studentClass.studentInfo());
}
}
//moonstar class는 30명 입니다.
위의 예제를 보면 생성자 호출은 하고 있지만 생성자는 보이지 않는다. 그 이유는 컴파일 과정에서 컴파일러가 자체적으로 기본 생성자를 만들어주기 때문이다.
기본 생성자(Default Constructor)
public class school {
class StudentClass {
String name;
int personnel;
//기본 생성자
public StudentClass(){}
}
위의 코드처럼 컴파일 과정에서 눈에 보이지 않는 기본 생성자를 컴파일러가 자동으로 만들어 주기 때문에 문제가 발생하지 않는다. 이것이 Default Constructor(기본 생성자)이다. 그리고 여기서 생성자의 특징을 먼저 알아보도록 하자.
생성자(Constructor)의 특징
- 리턴 타입이 없다.
- 클래스와 이름이 동일해야 한다.
- 모든 클래스에 존재하고, 한 개 이상의 생성자를 가질 수 있다.
사용자 정의 생성자(User Defined Constructor)
생성자가 한 개 이상 존재하는 클래스에서 컴파일러는 자동으로 기본 생성자를 추가해주지 않는다. 따라서 생성자(Constructor)의 특징에서 볼 수 있듯이 생성자에 사용자가 정의한 매개변수를 인자로 줄 수 있다. 이것이 사용자 정의 생성자이다. 사용자 정의 생성자(User Defined Constructor)를 사용하게 되면 인스턴스 생성과 동시에 원하는 값으로 초기화가 가능하다.
사용자 정의 생성자(UserDefined Constructor) 예제
public class Constructor {
class CompareConstructor {
String name;
//기본 생성자
CompareConstructor() {
}
//사용자 정의 생성자
CompareConstructor(String nm) {
name = nm;
}
}
public static void main(String[] args) {
CompareConstructor 기본 = new CompareConstructor();
기본.name = "디폴트"
CompareConstructor 사용자 정의 = new CompareConstructor("사용자 정의");
}
}
사용자 정의 생성자(User Defined Constructor)를 사용하게 되면 생성 직후 바로 초기화가 가능하다.
'Languages > Java' 카테고리의 다른 글
[JAVA]로깅에 System.out.println()을 사용하지 않는 이유 (11) | 2023.01.12 |
---|---|
[JAVA]Iterator란? (16) | 2023.01.09 |
[JAVA]Error & Exception (9) | 2022.12.28 |
[JAVA] 데이터의 기본타입, 참조타입 (6) | 2022.12.19 |
[JAVA]HashMap의 사용 방법 및 기본 메서드 (1) | 2022.11.29 |