[JAVA] 생성자(Constructor)
생성자(Constructor)
생성자는 인스턴스를 생성하는 역할을 한다. 즉, 생성자는 인스턴스의 초기화 메서드라고 볼 수 있다.
생성자는 메서드와 유사하게 생겼지만 return이 없다. 이때 메서드는 return 이 없다고 void를 명시하지만 생성자는 void도 적어주지 않는다.
생성자의 조건
- 생성자의 이름과 클래스의 이름이 같아야 한다.
- 생성자는 리턴 값이 없다.
className(parameter) {
내용
}
기본 생성자(Default Constructor)
앞에서 생성자는 인스턴스의 초기화 메서드라고 했다. 그런데 클래스 안에 생성자를 만들지 않아도 프로그램은 제대로 수행이 된다. 그 이유는 컴파일러가 클래스에 생성자가 없으면 기본 생성자를 만들어 주기 때문이다. 다음과 같이 만들고 프로그램을 실행시켜보자.
class Constructor { }
public class ConstructorTest {
public static void main(String[] args) {
Constructor c = new Constructor();
}
}
생성자를 만들지 않고 프로그램을 돌리면 컴파일러는 자동으로 기본 생성자를 만들어 준다.
아래는 컴파일된 Constructor.class 파일이다.
class Constructor {
Constructor() { /* compiled code */ }
}
이처럼 생성자를 만들어 주지 않아도 사실은 자동으로 추가된다.
주의할 점은 컴파일러가 기본 생성자를 만들어주는 경우는 클래스 내에 생성자가 하나도 없을 때뿐이다.
매개변수로 인스턴스 초기화하기
class Constructor {
int x;
int y;
void show(){
System.out.println("x = " + x + " y = " + y);
}
}
public class ConstructorTest {
public static void main(String[] args) {
Constructor c = new Constructor();
c.x = 2;
c.y = 3;
c.show(); //x = 2 y = 3
}
}
위와 같이 인스턴스를 생성하고 인스턴스 변수의 값을 초기화하기 위해 하나하나 다 입력하면 코드가 길어지고 인스턴스가 많아지면 가독성도 떨어지고 깔끔하지 않다.
이럴 때 생성자를 통해 변수들을 깔끔하게 초기화할 수 있다.
class Constructor {
int x;
int y;
//생성자로 초기화
Constructor(int x,int y){
this.x = x;
this.y = y;
}
void show(){
System.out.println("x = " + x + " y = " + y);
}
}
public class ConstructorTest {
public static void main(String[] args) {
Constructor c = new Constructor(2, 3);
c.show(); //x = 2 y = 3
}
}
위처럼 매개변수와 생성자로 깔끔하게 코드 한 줄로 변수를 초기화할 수 있다.
앞에서 컴파일러가 기본 생성자를 만들어 주는 경우는 클래스 내에 생성자가 하나도 없을 때뿐이라고 했다. 만약 위 코드에서 new Constructor()를 작성하면 어떻게 될까?
class Constructor {
int x;
int y;
//생성자로 초기화
Constructor(int x,int y){
this.x = x;
this.y = y;
}
void show(){
System.out.println("x = " + x + " y = " + y);
}
}
public class ConstructorTest {
public static void main(String[] args) {
Constructor c = new Constructor(2, 3);
Constructor c2 = new Constructor(); //에러
}
}
ide가 친절하게 에러가 있다고 알려준다.
'Constructor(int, int)' in 'Constructor' cannot be applied to '()'
클래스 내에 생성자가 x와 y를 매개변수로 받는 생성자 하나뿐이라 에러가 발생한다.
이럴 땐 매개변수가 없는 생성자를 하나 오버로딩해서 만들어 주면 된다.
class Constructor {
int x;
int y;
//생성자로 초기화
Constructor(int x,int y){
this.x = x;
this.y = y;
}
//매개 변수가 없는 생성자
Constructor() {
}
void show(){
System.out.println("x = " + x + " y = " + y);
}
}
public class ConstructorTest {
public static void main(String[] args) {
Constructor c = new Constructor(2, 3);
Constructor c2 = new Constructor(); //에러
c.show(); //x = 2 y = 3
c2.show(); //x = 0 y = 0
}
}
'Programming > Java' 카테고리의 다른 글
[JAVA] 객체지향 프로그래밍(OOP) - 캡슐화 (0) | 2022.09.07 |
---|---|
[JAVA] 객체지향 프로그래밍(OOP) - 상속 (1) | 2022.09.07 |
[JAVA] static 변수와 static 메서드 (0) | 2022.09.06 |
[JAVA] 클래스와 객체 (0) | 2022.09.05 |
[JAVA] 배열 복사하는 방법 (0) | 2022.09.02 |