JAVA

[ java ] 생성자, 생성자 오버로딩

Adose 2024. 12. 10. 16:30

📌 생성자


  • 생성자는 객체가 생성될 때 객체의 초기화를 위해 실행되는 메소드이다. 
  • 생성자의 이름은 반드시 클래스 이름과 동일하게 작성해야한다.
  • 생성자는 어떤 값도 리턴하지 않는다.
  • 기본생성자는 디폴트로 아무 값(매개변수)도 받지 않는 생성자를 기본생성자라고 한다.
  • 사용자 명의 생성자를 하나 만든다면, 기본생성자는 만들어지지 않는다.
    • 이때 기본생성자를 사용하려면, 명시적으로 작성하면된다. 

기본생성자 

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