생성자
생성자는 객체가 생성될 때 호출되며 객체를 초기화 하는 역할을 수행
생성자 선언
// < 생성자 영역 >
// 생성자 : 처음 객체가 생성될 때 ( instance 화 ) 어떤 로직을 수행해야 하며, 어떤 값이 필수로 들어와야 하는지 정의
public Car() {
// logic
// 기본 생성자 : 생략이 가능
}
생성자 호출
Car car = new Car();
- 생성자는 반환 타입이 없고 이름은 클래스의 이름과 동일
- new 연산자에 의해 객체가 생성되면서 Car(); 즉, 생성자가 호출됨
기본생성자
- 기본 생성자는 선언할 때 괄호() 안에 아무것도 넣지 않는 생성자를 의미
- 모든 클래스는 반드시 생성자가 하나 이상 존재
- 만약 선언하지 않았으면 기본 생성자를 자동으로 추가해주고 접근제어자 (public) 을 따름
필드 초기화
생성자는 객체를 초기화하는 역할
객체 만들 때 인스턴스마다 다른 값을 가져야한다면?
- 생성자를 사용해 필드의 값을 초기화하는 것이 좋음 ( 매개변수를 입력 받아서 )
public Car(String modelName, String colorName, double priceValue) {
model = modelName;
color = colorName;
price = priceValue;
}
인스턴스마다 동일한 데이터를 가진다면?
- 초기값을 직접 대입하는 것이 좋음 ( 직접 내부에서 필드를 초기화 시킨다. )
※ 주의
위 코드예시 같이 생성자를 사용해 필드의 값을 초기화 했으면 기본 생성자를 추가로 작성해야 기본 생성자를 호출할 수 있음 ( 하나라도 있으니 자동으로 생기지 않음 )
생성자 오버로딩
public Car(String modelName) {
model = modelName;
}
public Car(String modelName, String colorName) {
model = modelName;
color = colorName;
}
public Car(String modelName, String colorName, double priceValue) {
model = modelName;
color = colorName;
price = priceValue;
}
위 코드처럼 클래스에서 생성자를 오버로딩으로 선언할 수 있다.
매개변수를 몇 개를 놓느냐에 따라 이름은 같아도 다른 역할을 한다.
public class Main {
public static void main(String[] args) {
// 기본 생성자 호출 오류 확인
// Car car1 = new Car(); // 오류 발생
// 생성자 오버로딩을 통해 여러 상황에서 자동차 생산
// 제네시스 자동차를 생산 : static final String COMPANY = "GENESIS"; 상수 고정
// 모든 자동차는 생산시 기어의 최초 상태 'P' 로 고정 : char gear = 'P'; 직접 대입하여 초기화
// GV60 모델만 기본으로 선택
Car car2 = new Car("GV60");
System.out.println("car2.model = " + car2.model);
System.out.println("car2.gear = " + car2.gear + "\n");
// GV70 모델, 색상 Blue 만 기본으로 선택
Car car3 = new Car("GV70", "Blue");
System.out.println("car3.model = " + car3.model);
System.out.println("car3.color = " + car3.color);
System.out.println("car3.gear = " + car3.gear + "\n");
// GV80 모델, 색상 Black, 가격 50000000 으로 완전하게 고정된 경우
Car car4 = new Car("GV80", "Black", 50000000);
System.out.println("car4.model = " + car4.model);
System.out.println("car4.color = " + car4.color);
System.out.println("car4.price = " + car4.price);
System.out.println("car4.gear = " + car4.gear + "\n");
}
}
※ 주의
오버로딩을 할 때 개수, 타입, 순서가 동일한데 매개변수만 다르게 하는 경우는 오버로딩 규칙에 위배됨
public Car(String modelName, String colorName, double priceValue)
public Car(String colorName, String modelName, double priceValue)
'컴퓨터 프로그래밍 > Java' 카테고리의 다른 글
[Java] 상속 (0) | 2024.07.29 |
---|---|
[Java] this와 this(), 접근 제어자, package와 import (0) | 2024.07.29 |
[Java] 인스턴스 멤버와 클래스 멤버 (0) | 2024.07.26 |
[Java] 필드와 매서드 (0) | 2024.07.26 |
[Java] 클래스 (설계도) 설계하고 객체 생성 (인스턴스화) (0) | 2024.07.26 |