생성자는 new 연산자를 통해서 인스턴스를 생성할 때 반드시 호출이 되고 제일 먼저 실행되는 일종의 메서드(하지만 메소드와는 다르다.)이다.
인스턴스가 생성될 때마다 호출되는 '인스턴스 초기화 메서드'로 메소드명이 클래스명과 동일하고 리턴 자료형을 정의하지 않는다.
매개변수가 없는 생성자
자바의 모든 클래스에는 하나 이상의 생성자가 정의되어 있어야한다. 하지만 특별히 생성자를 정의하지 않고도 인스턴스를 생성할 수 있습다. 이것은 자바 컴파일러가 기본 생성자(default constructor)라는 것을 기본적으로 제공해 주기 때문이다. 기본 생성자는 매개변수를 하나도 가지지 않으며, 아무런 명령어도 포함하고 있지 않는다.
자바 컴파일러는 컴파일 시 클래스에 생성자가 하나도 정의되어 있지 않으면, 자동으로 다음과 같은 기본 생성자를 추가한다.
class Car {
private String modelName;
private String color;
private int maxSpeed;
Car(){} //기본 생성자
Car(String modelName,String color, int maxSpeed) { // 생성자
this.modelName = modelName;
this.color = color;
this.maxSpeed = maxSpeed;
}
public String getModel() {
return "모델: " + this.modelName +
" 색: " + this.color +
" 최고속도: " + this.color;
}
}
public class Main{
public static void main(String[] args) {
Car myCar = new Car("아반떼","흰색", 200); // 생성자의 호출
System.out.println(myCar.getModel()); // 생성자에 의해 초기화되었는지를 확인함.
Car emptyCar = new Car(); //물론 기본생성자로도 객체 생성 가능
}
}
오버로딩
메소드 오버로딩(method overloading)
메소드 오버로딩(overloading)이란 같은 이름의 메소드를 중복하여 정의하는 것을 의미한다. 자바에서는 원래 한 클래스 내에 같은 이름의 메소드를 둘 이상 가질 수 없다. 하지만 매개변수의 개수나 타입을 다르게 하면, 하나의 이름으로 메소드를 작성할 수 있다.
즉, 메소드 오버로딩은 서로 다른 매개변수의 리스트를 갖는 여러 메소드를 같은 이름으로 정의하는 것이라고 할 수 있다. 이러한 메소드 오버로딩을 사용함으로써 메소드에 사용되는 이름을 절약할 수 있다. 또한, 메소드를 호출할 때 전달해야 할 매개변수의 타입이나 개수에 대해 크게 신경을 쓰지 않고 호출할 수 있게 된다.
생성자에서 다른 생성자 호출할 때 사용하며 다른 생성자 호출시 첫 줄에서만 사용가능
class Car {
String color;
String gearType;
int door;
car() {
this("white", "auto",4);
// 코드의 중복을 제거해준다.
// color = "white";
//geartype = "auto";
//door = 4;
}
car(String c, String g, int d){
color = c;
gearType = g;
door = d;
}
}
인스턴스 자신을 가리키는 참조변수로 인스턴스 메서드(생성자 포함)에서 사용가능하다.
지역변수 (lv)와 인스턴스 변수(iv)를 구별할 때 사용
생성자 this와 전혀 다름. 연관 없음.
class Car {
String color;
String gearType;
int door;
car(String color, String gearType, int door){
this.color = color;
this.gearType = gearType;
this.door = door;
}
}