생성자
모든 클래스는 인스턴스화 될때 생성자를 사용한다.
생성자의 특징
- 생성자는 리턴타입이 없다.
- 생성자를 프로그래머가 만들지 않으면 매개변수가 없는 생성자가 컴파일할 때 자동으로 만들어진다.
- 매개변수가 없는 생성자를 기본생성자라고 한다.
- 생성자를 하나라도 프로그래머가 만들었다면 기본생성자는 자동으로 만들어지지 않는다.
생성자의 역할
- 생성자가 하는 일은 객체가 될 때 필드를 초기화 하는 역할을 수행한다.
- 자동차가 객체가 될때 반드시 이름을 가지도록 하려면,Car클래스를 다음과 같이 만들어야 한다.
public class Car{
String name;
int number;
public Car(String n){//생성자
name = n;//필드에 선언된 name을 초기화
}
}
- 위의 Car 클래스를 이용하여 Car 인스턴스를 생성하는 방법
public class CarExam2{
public static void main(String args[]){
Car c1 = new Car("소방차");
Car c2 = new Car("구급차");
//Car c3 = new Car(); // 컴파일 오류가 발생합니다.
System.out.println(c1.name);
System.out.println(c2.name);
}
}
- Car클래스는 기본 생성자를 가지지 않는다. 그래서 기본생성자로 Car 객체를 생성할 수 없다.
- 생성자 public 클래스명 (매개변수 목록){생성자블록}
// Car c1 = new Car();//기본생성자를 만듦->오류
//생성자를 사용자가 추가하면 기본생성자는 만들어지지않음. 더이상 기본생성자 사용 불가
<생성자 오버로딩>
매소드와 마찬가지로 매개변수의 수와 타입이 다르다면 여러개의 생성자를 선언할 수 있다.
public class Car {
//타입 필드명
String name;
int number;
//생성자 이름은 같지만 매개변수의 수와 타입이 다 다름
public Car (String name) {
this.name = name;//(생성자)car 라는 객체가 생성되며 name이 초기화
//this.: 객체 자신을 참조하는 키워드.내 구성요소,내 것 //내 필드에 있는 name 이라는 뜻
//클래스 안에서 자기 자신이 가지고 있는 메소드를 사용할 때도 this.메소드명()으로 호출할 수 있다
}
public Car() {
//기본생성자를 따로 정의해주면됨
// this.name = "이름없음";
// this.number = 0;
// this() : 나의 생성자 호출,타입을 보고 알맞는 생성자 호출
this("이름없음",0);
}
public Car(String name, int number) {//생성자
this.name = name;
this.number = number;
}
}
public class CarExam3 {
public static void main(String[] args) {
Car c1 = new Car("소방차");
Car c2 = new Car();//기본생성자 생성 후 컴파일 오류 사라짐
Car c3 = new Car("구급차",119);
}
}
<this>
: 객체 자신을 참조하는 키워드
public class Car {
//타입 필드명
String name;
int number;
public Car (String name ) {
this.name = name;//car 라는 객체가 생성되며 name이 초기화
//this.: 객체 자신을 참조하는 키워드.내 구성요소,내 것 //내 필드에 있는 name 이라는 뜻
//클래스 안에서 자기 자신이 가지고 있는 메소드를 사용할 때도 this.메소드명()으로 호출할 수 있다
}
}
<this()>
- 기본생성자를 호출하였을 때 name을 "이름없음" , 숫자를 0으로 초기화 하기
public Car(){
this.name = "이름없음";
this.number = 0;
}
- 위처럼 작성했을 경우 코드의 중복이 일어난다.
- 자신이 가지고 있는 다른 생성자를 이용할 수 있다.
public Car(){
this("이름없음", 0);
}
- this괄호 열고로 시작하면 자신의 생성자를 호출하는 것이다.
- 자기 자신의 생성자를 호출함으로써 비슷한 코드가 중복되서 나오는 것을 방지할 수 있다.
[참고]생성자와 setter - 생성자와 setter는 역할은 비슷하지만 호출 시점이 다르다.
-생성자는 객체 생성 시 필드 초기화 역할을 수행 - 객체 생성 시 딱 한 번만 호출된다.
-setter는 객체 생성 이후에 호출이 가능 - 필드 초기화가 아니라 기존값 덮어쓰기, 객체 생성 이후라면 원하는 때에 언제라도 호출할 수 있다.
'☕JAVA > 🔎 공부 [JAVA]' 카테고리의 다른 글
[JAVA] 패키지 (0) | 2022.08.10 |
---|---|
[JAVA] 메소드 - 오버로딩 (0) | 2022.08.10 |
[JAVA] 열거형 enum (0) | 2022.08.10 |
[JAVA] 자료구조- 배열 Array (1차원 배열/2차원 배열) (0) | 2022.08.10 |
[JAVA] 반복문 - while문 / do-while문 (0) | 2022.08.10 |