본문 바로가기
언어 공부하기/JAVA 개념

[Java 자바] 생성자 키워드 사용하는 이유란? 생성자에 대해 알아보자 (자바 생성자)

by 망댕이 2024. 7. 23.
반응형

오늘은 생성자에 대해 알아보도록 하자.

처음 자바를 공부했을 때 생성자를 왜 사용하는지 잘 모르겠으며, 유난히 정확하게 알지 못했던 키워드중 하나이다.

그래서 오늘 다시 복습하면서 생성자에 대해 잊어먹지 않도록 기록하고자 한다.

▷ 생성자

생성자는 인스턴스가 만들어질 때 자동으로 실행되는 메소드이다. 자바에서 객체가 생성될 때 자동으로 호출되어 객체의 초기 상태를 역할을 가진다.

 

public class Car {
    String model;
    int year;

    // 생성자
    public Car(String model, int year) {
        this.model = model;
        this.year = year;
    }
}

 

 

▷ 생성자 사용 이유와 특징

 

 

 

생성자의 사용이유를 간단하게 알아보자

  • 객체 초기화: 생성자는 객체가 생성될 때 초기화 작업을 수행한다. 이는 객체가 유효한 상태로 존재할 수 있게 한다.
  • 코드 가독성: 생성자를 사용하면 코드가 간단하고 직관적이다.
  • 필수 매개변수 설정: 생성자를 사용하면 객체 생성 시 필수 매개변수를 설정하도록 강제할 수 있습니다.

 

생성자의 몇가지 특징이 있다.

 

  • 클래스 이름과 동일: 생성자는 클래스 이름과 동일한 이름을 가진다.
  • 반환 타입이 없음: 생성자는 반환 타입이 없다 (메서드와의 주요 차이점 중 하나)
  • 자동 호출: 객체가 생성될 때 자동으로 호출된다.
  • 오버로딩 가능: 생성자는 여러 개 정의될 수 있으며, 각기 다른 매개변수를 가질 수 있다.  ( =생성자 오버로딩(Constructor Overloading))

아래 예시를 통해 특징들을 확인해보자.

 

public class Car { // 클래스 이름 : Car
    String model;
    int year;

    // 기본 생성자
    public Car() { // 생성자 이름 : Car(클래스 이름과 같음), 반환타입이 존재하지 않음
        this.model = "Unknown";
        this.year = 0;
    }

    // 매개변수 있는 생성자
    public Car(String model, int year) {
        this.model = model;
        this.year = year;
    }
     public static void main(String[] args) {
        // 매개변수 있는 생성자 호출
        Car car = new Car("Tesla", 2023); // 객체가 생성될 때 자동으로 호출됨
        System.out.println("model : " + car.model + ", year : " + car.year);
    }
}

 

 

//코드 결과

model : Tesla, year : 2023

 

 

마지막으로 사용자 정의 생성자와 컴파일러가 삽입하는 기본 생성자에 대해 알아보고 마무리 해보자.

 

| 사용자 정의 생성자

사용자가 클래스에 생성자를 명시적으로 정의한 경우, 객체를 생성할 때 그 생성자가 된다.

사용자가 정의한 생성자는 객체 초기화를 위해 필요한 작업을 수행함.

| 컴파일러가 삽입하는 기본 생성자

만약 사용자가 클래스에 생성자를 정의하지 않았다면, 자바 컴파일러가 자동으로 기본 생성자를 삽입한다.

이 기본 생성자는 매개변수가 없으며, 클래스의 모든 멤버 변수를 기본값으로 초기화한다.

(기본값은 숫자형 변수는 0, 논리형 변수는 false, 참조형 변수는 null)

 

// 사용자 정의 생성자가 있는 경우

public class Car {
    String model;
    int year;

    // 사용자 정의 생성자
    public Car(String model, int year) {
        this.model = model;
        this.year = year;
    }

    public void displayInfo() {
        System.out.println("Model: " + model + ", Year: " + year);
    }

    public static void main(String[] args) {
        Car car = new Car("Tesla", 2023); // 사용자 정의 생성자 호출
        car.displayInfo();
    }
}
// 코드 결과
Model: Tesla, Year: 2023

// 사용자 정의 생성자가 없는 경우

public class Car {
    String model;
    int year;

    public void displayInfo() {
        System.out.println("Model: " + model + ", Year: " + year);
    }

    public static void main(String[] args) {
        Car car = new Car(); // 컴파일러가 삽입한 기본 생성자 호출
        car.displayInfo();
    }
}

 

// 코드 결과

Model: null, Year: 0

 

이렇게 생성자에 다시 까먹지 않도록 복습해보았다.

객체의 초기 상태를 설정하고 객체 생성 시 필수적인 작업을 수행하는데 꼭 필요하다.

또한 다양한 초기화 옵션을 이용할 수 있으며 생성자를 적절히 활용하면 코드의 가독성도 높일 수 있다.

 

 


잘못된 정보나 오류는 댓글로 부탁드립니다!!

 

반응형