생성자?
- new 연산자로 호출되는 중괄호{}블록.
- new 연산자로 클래스로부터 heap영역에 객체를 생성할 때 호출되어 객체의 초기화를 담당
기본 생성자
- 모든 클래스는 생성자가 반드시 존재하며, 생성자를 하나 이상 가질 수 있다. 우리가 클래스 내부에 생성자 선언을 생략해도 컴파일러가 아래와 같은 기본생성자를 바이트코드에 자동 추가한다
[public] 클래스() {}
명시적 생성자 선언
- 기본 생성자 대신 명시적으로 선언
클래스(매개변수){
//객체 초기화 코드
}
Car 클래스처럼 생성자가 명시적으로 선언되어 있을 경우에는 반드시 선언된 생성자를 호출해서 객체를 생성해야한다.
package a220705;
public class CarEx {
public static void main(String[] args) {
Car myCar = new Car("검정", 3000);
//기본생성자를 호출 할 수 x
}
}
Car 클래스에 생성자 선언이 있었기 때문에 new Car() 와 같은 기본생성자 호출 불가
필드 초기화
클래스로부터 객체가 생성될 때 필드는 기본 초기값으로 자동 설정된다.
만약 다른 값으로 초기화 하고싶다면 필드를 선언할 때 초기값을 주거나, 생성자에서 초기값을 주는 방법이 있다.
package a220705;
public class Korean {
//nation필드에 초기값 부여
String nation = "대한민국";
String name;
String ssn;
public Korean(String name, String ssn) {
this.name = name;
this.ssn = ssn;
}
}
package a220705;
public class KoreanEx {
public static void main(String[] args) {
Korean k1 = new Korean("박자바", "011225-1234567");
System.out.println("k1.nation: " + k1.nation);
System.out.println("k1.name: " + k1.name);
System.out.println("k1.ssn: " + k1.ssn);
Korean k2 = new Korean("최자바", "911225-2234567");
System.out.println("k2.name: " + k2.name);
System.out.println("k2.ssn: " + k2.ssn);
}
}
생성자 오버로딩
오버로딩?
매개변수를 달리하는 생성자를 여러 개 선언하는 것
public class Car{
car(){...}
car(String model){...}
car(String model, String color) {...}
car(String model, String color, int maxSpeed) {...}
}
package a220705;
public class Car {
String company = "Hyundai";
String model;
String color;
int maxSpeed;
int cc;
Car(){}
Car(String model){
this.model = model;
}
Car(String model, String color){
this.model = model;
this.color = color;
}
Car(String model, String color, int maxSpeed){
this.model = model;
this.color = color;
this.maxSpeed = maxSpeed;
}
Car(String color, int cc){ }
}
Car car1 = new Car();
System.out.println(car1.company);
Car car2 = new Car("자가용");
System.out.println(car2.model);
Car car3 = new Car("택시", "검정");
System.out.println(car3.model + " " + car3.color);
참고 :
- 혼자 공부하는 자바(신용권), 한빛미디어
반응형
'개발 > JAVA' 카테고리의 다른 글
[Java] 인스턴스 멤버와 정적 멤버 (0) | 2022.07.07 |
---|---|
[Java] 메소드 (0) | 2022.07.06 |
[Java] 필드(field) (0) | 2022.07.04 |
[Java] 객체 지향 프로그래밍 (OOP) (0) | 2022.07.01 |
[Java] 열거타입(enum) (0) | 2022.06.29 |