반응형
생성자(Constructor)
자바에서 생성자는 객체를 생성하는 역할을 하는 클래스의 구성 요소이다. 인스턴스가 호출되는 인스턴스 초기화 메서드라고 할 수 있다. 객체를 생성할 때 사용하는 new 키워드가 바로 이 생성자를 호출하는 것이다.
즉, 인스턴스 생성을 담당하는 것은 new 키워드이며, 생성자는 인스턴스 변수들을 초기화하는 데 사용되는 특수한 메서드이다.
생성자는 메서드와 비슷한 구조를 가지고 있으나 생성자의 조건이 있다.
- 생성자의 이름은 반드시 클래스의 이름과 같아야 한다.
- 생성자는 리턴 타입이 없으며, void 키워드를 사용하지 않는다.
class Constructor {
//생성자
Constructor(매개변수) {
...
}
}
생성자 또한 오버로딩이 가능하여 하나의 클래스 안에 여러 개의 생성자를 작성할 수 있다.
public class ConstructorEx {
public static void main(String[] args) {
Constructor constructor1 = new Constructor();
Constructor constructor2 = new Constructor(5);
Constructor constructor3 = new Constructor("Java");
Constructor constructor4 = new Constructor(2.0, 4.5);
}
}
class Constructor {
Constructor() {
System.out.println("생성자1");
}
Constructor(int a) {
System.out.println("생성자2");
}
Constructor(String str) {
System.out.println("생성자3");
}
Constructor(double a, double b) {
System.out.println("생성자4");
}
}
기본 생성자(Default Constructor)
기본 생성자는 매개변수가 없는 생성자를 의미한다. 자바 컴파일러는 생성자가 클래스 안에 존재하지 않을 경우, 기본 생성자를 자동으로 추가해준다. 만약, 생성자가 작성되어 있는 경우에는 작성된 생성자를 기본으로 사용하게 된다.
ClassName(){} // ClassName 클래스의 기본 생성자
매개변수가 있는 생성자
매개변수가 있는 생성자는 매개변수를 통해 호출 해야 한다. 호출 시 해당 값을 받아 인스턴스를 초기화하는 데 사용된다.
매개변수가 있는 생성자는 인스턴스를 만든 후, 필드 값을 설정해줄 필요 없다.
인스턴스를 생성과 동시에 원하는 값으로 설정해 줄 수 있기 때문이다.
객체를 생성하는 방법은 ‘new 생성자(값);’의 형태로 같이 생성자 매개변수에 알맞은 값을 넣어 생성자를 호출해야 한다.
public class ConstructorEx2 {
public static void main(String[] args) {
Animal dog = new Animal("dog", "멍멍");
Animal cat = new Animal("cat", "야옹");
System.out.println("동물 " + dog.getAnimal() + "의 울음소리 " + dog.getCry());
System.out.println("동물 " + cat.getAnimal() + "의 울음소리 " + cat.getCry());
}
}
class Animal {
String animalName;
String cry;
Animal(String animal, String cry){
this.animalName = animal;
this.cry = cry;
}
String getAnimal() {
return animalName;
}
String getCry() {
return cry;
}
}
반응형
'언어(Language) > Java' 카테고리의 다른 글
[Java] 자바 내부 클래스(Inner Class) 개념 정리 및 사용법 (0) | 2022.09.15 |
---|---|
[Java] 자바의 this()와 this 개념 정리 및 차이점 (0) | 2022.09.14 |
[Java] 자바 메서드 오버로딩과 오버라이딩 (Overloading vs Overriding) (0) | 2022.09.14 |
[Java] 자바 메서드(Method) 개념 정리 (0) | 2022.09.14 |
[Java] 자바 필드(Field) 개념 정리 및 예제 (0) | 2022.09.13 |