📌 생성자
- 생성자는 객체가 생성될 때 객체의 초기화를 위해 실행되는 메소드이다.
- 생성자의 이름은 반드시 클래스 이름과 동일하게 작성해야한다.
- 생성자는 어떤 값도 리턴하지 않는다.
- 기본생성자는 디폴트로 아무 값(매개변수)도 받지 않는 생성자를 기본생성자라고 한다.
- 사용자 명의 생성자를 하나 만든다면, 기본생성자는 만들어지지 않는다.
- 이때 기본생성자를 사용하려면, 명시적으로 작성하면된다.
기본생성자
public class Car {
// 디폴트 생성자가 자동 추가됨
}
Car c1 = new Car();
사용자 명의 생성자
public class Car{
String model;
//생성자
public Car(String model) {
this.model = model; // 객체 초기화
}
} //==> 클래스 블록
Car c1 = new Car("T");
📌 생성자 오버로딩
- 메서드 오버로딩처럼, 생성자도 같은 이름의 다른 매개변수로 오버로딩이 가능하다.
- 클래스 안에서 여러가지 생성자를 생성했을때, 생성자가 다른 생성자를 호출할 수 있다.
- this() → 나의 생성자를 의미한다.
- 다른 생성자 사용하기 위해서는 → this(해당되는 매개변수)
public class TV {
//전원,채널,소리
private boolean power;
private int channel;
private int volume;
public TV(boolean power, int channel, int volume) {
this.power = power;
this.channel = channel;
this.volume = volume;
}
public TV(boolean power, int channel){
this(power,channel,0); //다른 생성자 사용
}
public TV(boolean power){
this(power,0,0)
}
❓ this()?
- 객체 자신을 참조하는 키워드
- 현재 실행되고 있는 메소드가 속한 객체에 대한 레퍼런스이다.
public class Car{
String name;
int number;
public Car(String name){
this.name = name;
}
📌 부모 생성자가 생성되고, 자식 생성자가 생성된다.
- 부모가 생성되지 않으면, 자식도 생성될 수 없기 때문에 부모를 가장 먼저 생성되어야 한다. → 부모 생성이 끝나야 자식 객체가 생성될 수 있다.
- 부모가 default 생성자(기본생성자)를 사용하지 않고, 다른 생성자(매개변수를 통해 초기화한)를 사용한다면 자식 생성자는 부모 생성자의 초기화한 생성자를 명시해주어야 한다.
- 부모 생성자에 default 생성자만 존재한다면, 자식생성자에는 컴파일러가 super()가 자동으로 추가해준다. (굳이 명시 안해도 됨)
public class Person {
int age;
public Person(int age) {
this.age = age;
}
}
public class Person {
int age;
public Person(int age) {
this.age = age;
}
}
- 자식 생성자에서 부모를 가리키고 싶을때는, super 를 통해서 부모 필드, 메서드를 가리킬 수 있다.
- super() → 부모의 생성자를 의미한다.
- this() → 본인의 생성자를 의미한다.
📌 부모 생성자와 자식 생성자 코드 예시
public class person{
int age;
String name;
public person(int age, String name){ //기본생성자가 없다
this.age = age;
this.name = name;
}
}
class child extends person{
child(){
super(0, "hi"); //부모 생성자의 기본생성자가 없으므로 생성을 명시해주었다.
}
child(int age,String name){
super(0, "hi")
}
}
📌 생성자 오버로딩 장점 ?
- 객체 생성시 필드값 중 일부만 초기화할 수 있다.
- 생성자 오버로딩을 통해 코드 재사용성을 높이고, 중복되는 코드를 방지할 수 있다.
📌 memo
❓ Scanner(System.in) 에 대해서 예시를 들 것이다.
- Scanner은 api document를 참고하면, InputStream을 입력으로 받는다.
- 그렇다면 System.in은 반환값이 InputStream이기 때문에 사용이 가능하다.
'JAVA' 카테고리의 다른 글
[ java ] Optional 이란? (0) | 2025.01.20 |
---|---|
[ java ] 멀티 스레드 사용법 (1) | 2024.12.26 |
[ java ] 추상클래스 (0) | 2024.12.10 |
[ java ]Constant Pool과 String Constant Pool (0) | 2024.12.10 |
[ java ] 객체 상속 (0) | 2024.12.10 |