본문 바로가기
JAVA

[JAVA] 생성자(기본 생성자, 매개변수 있는 생성자, 주의할 점)

by 정공자씨 2024. 4. 18.

 

 

클래스의 구성요소

1. 멤버변수(필드)

2. 메서드

3. 생성자

 

 

 

생성자

역할

  • 생성자가 최초로 호출이 되면서, 클래스 인스턴스를 생성하는 역할
  • 클래스 인스턴스를 생성하면서 heqp 영역에 할당이 되고, 멤버변수를 초기화함

 

 

특징

  • 생성자는 클래스의 인스턴스 생성 시에 최초로 사용이 됨
  • 인스턴스 생성 시에 new 클래스명() 코드를 사용하는데, 이것이 생성자(기본 생성자)
    • 즉, Student( )가 Student 클래스의 생성자
      // 생성자 호출
      Student s = new Student();
  • 인스턴스를 메모리에 생성(객체 생성)하려면 생성자를 호출해야 함
  • 생성자의 이름은 반드시 클래스명과 동일해야 함

 

 

생성자 형식

[접근 제한자] 클래스명( [매개변수] ) {
	멤버변수 초기화 코드 //멤버변수에 값을 지정하는 코드
}
  • 클래스명과 생성자의 이름은 같고
  • 메서드 형식과 유사하고
  • 리턴 타입이 없음

 

 

생성자의 종류

  • 기본 생성자(매개변수가 없는 생성자)
  • 매개변수가 있는 생성자
[ 생성자 메서드 오버로딩 ]

기본 생성자와 매개변수가 있는 생성자는 
생성자의 이름(메서드명)은 모두 같고
매개변수의 개수, 타입, 순서 등이 다르게 사용함

 

 

생성자 예시

class Animal {
    String name;
    String age;
    
    public Animal() { // 기본생성자: 매개변수가 없음
    	
    }    
    
    public Animal(String name) { // 매개변수 1개 있는 생성자
    	this.name = name;
    }
    
    public Animal(int age) { // 매개변수 1개 있는 생성자
    	this.age = age;
    }
    
    public Animal(String name) { // 매개변수 2개 있는 생성자
    	this.name = name;
        this.age = age;
    }

}

 

 

 

 

 

✔ 기본 생성자

정의

  • 매개변수가 없는 생성자
  • 디폴트 생성자

 

 

기본 생성자의 형식

public 클래스명() { 

}
  • 생성자의 이름은 반드시 클래스 명과 일치
  • 매개변수가 없음

 

 

예시

public class Student {
    // 멤버변수(필드)
    String name;
    int grade;

    // 생성자
    public Student() {} // 기본 생성자: 생략하면, 컴파일 시에 컴파일러가 자동으로 추가해줌

    // 메서드
    public void getStudentName{
        System.out.println("학생의 이름은 " + name + "입니다.");
    }
}

 

 

기본 생성자의 특징

1. 기본 생성자를 호출하여 인스턴스 생성하면, 인스턴스의 멤버변수는 기본 값으로 초기화

  • name은 String 타입이므로 name = null; 으로 초기화
  • grade는 int 타입이므로 int = 0;으로 초기화
매개변수가 있는 생성자를 호출하여 인스턴스 생성하는 경우에는
인스턴스의 멤버변수는 매개변수의 값으로 초기화 됨

 

2. 클래스에서 기본 생성자를 생략하면, 컴파일러가 컴파일 시에 기본 생성자를 자동으로 추가해줌

  • 인스턴스를 생성하기 위해 기본 생성자를 호출했을 때
  • 기본 생성자를 별도로 생성하지 않았더라도(코드로 작성하지 않았더라도)
    • 컴파일 시에 기본 생성자를 자동으로 추가해주므로
    • 인스턴스 생성과 멤버변수의 값이 초기화가 됨

3. 매개변수가 있는 생성자를 만들었을 때는 기본 생성자가 자동으로 추가되지 않음

  • 별도로 기본 생성자를 추가해주어야 함

 

 

 

 

 

✔ 매개변수가 있는 생성자

매개변수가 있는 생성자를 사용하는 이유

  • 클래스 인스턴스 생성 시에 멤버변수가 많은 경우, 일일이 초기화 하기가 불편
  • 일반적으로 인스턴스의 멤버변수들은 생성자를 이용하여 초기화 하는데,
    • 초기화할 값을 넣어 생성자를 호출하면, 이를 매개변수가 받아 값을 초기화함

 

 

매개변수가 있는 생성자의 형식

  • 생성자의 이름은 반드시 클래스명과 일치
  • 매개변수의 타입과 순서에 맞게 매개변수를 넣어야 함

 

 

예시

public class Student {
    // 멤버변수(필드)
    String name;
    int grade;
    
    // 기본 생성자
    public Student() {} // 기본 생성자: 생략하면, 컴파일 시에 컴파일러가 자동으로 추가해줌
	
    // 매개변수 있는 생성자
    public Student(String name) { // 매개변수 1개
    	this.name = name;
    }
    public Student(int grade) {
    	this.name = grade;
    }
    public Student(String name, int grade) { // 매개변수 2개
    	this.name = name;
        this.grade = grade;
    }
    
    // 메서드
    public void getStudentName{
        System.out.println("학생의 이름은 " + name + "입니다.");
    }
}

 

 

 

매개변수가 있는 생성자를 호출

  • 생성자 호출 시, 매개변수의 개수와 타입이 일치하는 생성자를 호출함
[ 에러 발생 ]
만일, 호출하는 생성자가 존재하지 않을 때에 에러 발생

 

 

 

 

 

 

✔ 생성자 사용 시에 주의할 점

사용자가 직접 생성자를 구현하여 사용하는 경우
(예를 들어, 매개변수가 있는 생성자를 직접 생성해서 사용하는 경우 등)
  • 컴파일러가 기본 생성자를 자동으로 추가해주지 않으므로
  • 기본 생성자를 함께 작성해주어야 함