생성자
- 클래스와 이름이 같은 메서드
- 클래스에 생성자가 정의되어있지 않으면 컴파일러가 자동으로 추가함
- 반환값이 없음
class Car{
Car(){} // 생성자 메서드
int plus() {} //멤버메서드(메서드명이 생성자 메서드와 중복 될 수 없음)
멤버메서드와의 비교
| 실행가능시점 | 반환타입 | 이름 | 호출 |
---|
생성자 메서드 | 객체생성직후 | 없음 | class와 같아야 함 | new연산자 |
멤버 메서드 | 호출 시 | 다양함 | 비교적 자유롭게 가능 | 참조변수 |
★ 생성자 메서드 호출
1. Car.java
public class Car {
public Car(){
System.out.println("안녕하세요");
}
}
2. CarApp.java
public class CarApp{
public static void main(String[]args) {
new Car();
}
}
-> 안녕하세요가 출력됨
★ 멤버메서드 호출
1. Car.java
public class Car {
void example(){
System.out.println("안녕하세요");
}
}
2. CarApp.java
public class CarApp{
public static void main(String[]args) {
Car car = new Car(); // 참조변수 필요
car.example();
}
-> 안녕하세요가 출력됨
매개변수가 있는 생성자
- 인스턴스 생성과 동시에 원하는 값으로 초기화 가능
매개변수가 없는 생성자
1. Car.java
class Car{
String color;
Car(){}
2. CarApp.java
public class CarApp {
public static void main(String[]args) {
Car car = new Car();
car.color = "White";
}
}
매개변수가 있는 생성자
1. Car.java
class Car{
String color;
Car(String c){}
2. CarApp.java
public class CarApp {
public static void main(String[]args) {
new Car("White");
}
}
- 한개라도 생성 될 시, 자동생성되는 생성자는 생성되지 않으므로 매개변수가 없는 생성자가 필요할 경우에는 따로 정의해야함
1.
class Product{
int x;
}
보이진 않지만 자동으로 생성자 Product(){}가 이미 정의되어 있음
2.
class Product{
int x;
new Product(int x){}
}
생성자가 이미 정의됐으므로 1의 Product(){}는 생성되지 않음
따라서 매개변수가 없는 생성자가 필요하면 아래와 같이 따로 정의 해야함
3.
class Product(){
int x;
Product(){}
Product(int x){}
}
this의 활용
- 객체 생성시 자동 생성되는 변수
- 스스로의 주소값을 갖고 잇음
- 다른 생성자 호출 시 반드시 첫 줄에서만 가능
public class Car{
String model;
String gear;
int door;
Car(String model, String gear, int door){
this.model = model;
this.gear = gear;
this.door = door;
}
}