본문 바로가기
프로그래밍 언어/JAVA

[Java] 기본 생성자와 사용자 정의 생성자

by 티옌.liy 2022. 11. 10.

클래스를 인스턴스화 할 때

생성자가 반드시 필요한데

생성자는 크게 2가지로 구분된다

 

기본으로 생성되는 기본 생성자

내가 원하는대로 구현하는 사용자 정의 생성자

 

1. 생성자 (constructor)

사람은 말하지 않아도 "아 있잖아 그거, 그렇게 해놔" 라고 말하면 눈치껏 그게 그건가 하고 알아서 하는데

컴퓨터는 그런게 없으므로 반드시 객체를 생성할 때 세세히 다 알려줘야한다.

 

사전적 정의로는, 클래스의 객체를 생성할 때, 자동으로 호출될 목적으로 만든 특별한 메소드라고 하는데

메소드처럼 기능을 호출하는 것이 아니고, 객체를 생성하기 위해 new 키워드를 트리거로 호출된다.


생성자는 반환값이 없고 클래스의 이름과 동일하며, 객체가 생성될 때 변수나 상수를 초기화하고 init 메서드를 호출한다
생성자는 public으로 외부에서 호출이 가능하지만 직접 private을 명시하여 외부에서 호출을 못하게 선언할 수 있다.

Java나 C# 등 대부분 언어에서는 생성자를 작성하지 않아도, 기본 생성자가 생성되면서 정상 동작하도록 지원한다.

 

예시 코드 - 생성자 형식
public class Student{
    public Student() {}   // 생성자 형식
}


2. 기본 생성자 (default constructor)

클래스에는 반드시 1개 이상의 생성자가 있어야한다.

그런데, 클래스에 생성자를 작성하지 않으면 컴파일러가 기본값을 가진 생성자를 자동으로 생성한다.

즉, 사용자 정의 생성자를 구현하지 않아도 기본 생성자가 만들어진다.


기본 생성자는 매개변수와 구현부가 없는 메소드 형태로 구성되어있다.

 

예시 코드 - 기본 생성자
public class Student{

    // 기본 생성자
    public Student() {
    }
}
예시 코드 - main 함수에서 Student 객체를 기본 생성자로 생성
public static class MainClass{
    public static void main(String[] args){
        Student user1 = new Student();
    }
} 

 

2.1 기본 생성자 기능 구현

기본 생성자의 기능을 변경하는 방법도 있는데, 구현부를 작성하는 것이다.

 

예시 코드 - 기본 생성자 구현부 작성
public class Student{
    public Student() {
        System.out.println("기본 생성자 호출");
    }
}

이러면 기본 생성자가 호출되었을 때, 자신이 구현한 코드가 동작한다.

 


3. 사용자 정의 생성자 사용법

컴파일러가 제공하는 기본 생성자 외에도 사용자가 직접 구현할 수 있다.

사용자 정의 생성자 구현 시, 기본 생성자는 제공하지 않는다.

 

객체 생성시 입력받을 매개 변수와 수행할 기능을 구현하면 된다.

 

예시 코드 - Student 객체 생성 시, 데이터를 초기화 하는 사용자 정의 생성자
public class Student{
    int studentNumber;
    String studentName;

    public Student(int studentNumber, String studentName) {
        this.studentNumber = studentNumber;
        this.studentName = studentName;
    }
}

 

사용자 정의 생성자의 매개변수는 클래스의 맴버 변수 이름과 동일하면 가독성과 유지보수에 좋다.

생성자의 매개변수는 지역 변수이므로, 클래스의 맴버 변수와 구분된다.
때문에 this 키워드로 초기화 할 변수가 클래스의 맴버 변수임을 명시해야한다.

 

4. 생성자 오버로딩

기본 생성자와 사용자가 정의한 생성자는 동시에 존재할 수 있다.

여러 생성자 중 메소드 매개변수로 구분해서 원하는 생성자만 호출할 수 있다.

 

객체 생성 시, 매개 변수 없이 생성하면 기본 생성자가 호출된다

객체 생성 시, 매개 변수를 입력하고 생성하면 사용자 정의 생성자가 호출된다. 

 

예시 코드 - 생성자 오버로딩
public class Student{

    int studentNumber;
    String studentName;

    // 기본 생성자
    public Student() {}

    // 매개변수 2개를 받는 사용자 정의 생성자
    public Student(int studentNumber, String studentName) {
        this.studentNumber = studentNumber;
        this.studentName = studentName;
    }
    
    // 매개변수 1개를 받는 사용자 정의 생성자
    public Student(String studentName) {
        this.strudentName = studentName;
    }
}


5. 생성자 내용 정리

5.1 생성자는 중복으로 존재할 수 있다.

클래스에는 반드시 1개 이상의 생성자가 있어야 하나, 오버로딩으로 여러개의 생성자가 존재할 수 있다.
사용자 정의 생성자가 없으면 기본 생성자만 컴파일러가 자동으로 생성한다.

 

5.2 생성자는 객체를 생성하는 규격을 지정하는 것이다.

기본 생성자는 객체 생성 규격이 없는 상태이나, 구현부를 작성하면 기능을 수행한다.
사용자 정의 생성자는 객체 생성 시 사용자가 설정한 규격을 명시하는 것이다.

5.3 일부러 기본 생성자를 호출하지 못하게 작성할 때가 있다.
객체 생성 시, 반드시 데이터가 입력되어야 하는 경우, 기본 생성자를 private로 명시하여 외부에서 기본 생성자 호출을 못하도록 구현한다.

 

댓글