생성자(Constructor)
메소드명이 클래스명과 동일하고 리턴 자료형을 정의하지 않는 메소드
new 연산자와 함께 사용되어 클래스로부터 객체를 생성할 때 호출되어 객체를 초기화해준다.
객체 초기화란? : 객체를 선언하고 사용할 준비를 하는 것.
생성자의 특징
1. 반환값이 없어 return을 사용하지 않고, 반환 타입을 void형으로 선언하지 않는다.
2. 초기화를 위한 데이터를 인수로 전달받을 수 있다.
3. 객체를 초기화하는 방법이 여러 개 존재할 경우에는 하나의 클래스가 여러 개의 생성자를 가질 수 있다.
(생성자도 메소드이기에 오버로딩이 가능하다는 뜻)
기본 생성자(default constructor)
자바의 모든 클래스에는 하나 이상의 생성자가 정의되어 있어야 한다.
하지만 특별히 생성자를 정의하지 않고도 인스턴스를 생성할 수 있다.
이것은 자바 컴파일러가 기본 생성자(default constructor)라는 것을 기본적으로 제공해 주기 때문이다.
기본 생성자는 매개변수를 하나도 가지지 않으며, 아무런 명령어도 포함하고 있지 않다.
class Boong {
private String source = "민트초코";
private int price = 1000;
String getBoong() {
return this.source + "맛 붕어빵은" + this.price + "원 입니다.";
}
}
public class Sample{
public static void main(String[] args) {
Boong boong = new Boong();
System.out.println(boong.getBoong());
}
}
예시로 생성자를 따로 만들지 않고 main에서 기본 생성자를 호출했다.
자바 컴파일러에서
클래스명(){} (위 예제에서는 Boong(){} )
을 자동으로 만들었기 때문에 객체 초기화가 되었고 문제없이 코드가 동작할 수 있었다.
그런데 매개변수(parameter)가 있는 생성자를 하나라도 정의했다면 기본 생성자는 만들어지지 않는다.
이 경우에는 Boong 생성자에 매개변수가 들어갔기에 에러가 났다.
에러를 고치려면
이렇게 인자(argument)를 넣어주면 된다.
생성자 오버로딩
위에 기입한 대로 생성자도 메소드이기에 오버로딩이 가능하다.
class Boong {
Boong(){}
Boong(String source, int price) {}
Boong(String source, String dough){}
}
그러면 하기 방식으로 여러가지 인자를 넣어 호출할 수 있다.
public class Sample{
public static void main(String[] args) {
Boong boong = new Boong();
Boong boong1 = new Boong("민트초코", 1000);
Boong boong2 = new Boong("민트초코", "밀가루");
}
}
참고출처:
http://www.tcpschool.com/java/java_methodConstructor_constructor
'Study > Java' 카테고리의 다른 글
[JAVA] for문 축약(for each문), if-else 축약(삼항 연산자) (0) | 2022.10.18 |
---|---|
[JAVA] 클래스 변수, 인스턴스 변수, 지역 변수 (0) | 2022.10.12 |
[자료구조] 배열과 리스트의 차이 (0) | 2022.10.07 |
SQL관련 용어 정리 (0) | 2022.04.18 |
용어 정리(UDP관련) (0) | 2022.04.13 |