본문 바로가기

Java

생성자는 언제 쓰나?

728x90

생성자는 객체를 생성하면서 ( 해야될 일 들, 하고 싶은 일들 ) 구현하는 것

또는 인스턴스가 생성될 때 호출되는 초기화메서드

 

구조는 리턴값이 없다. 그렇다고 void를 사용하지 않는다. 이유는 모든 생성자가 리턴값이 없으므로 void를 생략할 수 있게 한 것이다.

조건은

1. 생성자의 이름은 클래스이 이름과 같아야 한다.

2. 생성자는 리턴 값이 없다.

  public class Student {

      int studentID;
      String studentName;
      int grade;
      String address;

  // 이 객체를 생성할 때, 무조건 이름 or id을 가지고 생성해야한다면
  // 생성자를 이용하는 것이다.
      public Student(int id, String name) { // 매개변수가 있는 생성자
      // 이 객체가 생성될 때 2개의 매게변수를 받고 있다.
      // id, name를 받으면 이 Student 변수에 넣어줘야 heap 메모리 값이 들어간다.
          this.studentID = id;
          this.studentName = name;

      }

  }

 

 

 

  • 디폴트 생성자 (기본 생성자)

클래스 생성 시 자동으로 생기는 기본 생성자

만약 클래스에 매개변수가 있는 생성자를 추가하면 디폴트 생성자는 제공되지 않는다.

매개변수가 있는 생성자를 쓴 경우 디폴트 생성자 필요하다면 따로 명시해줘야 한다.

 

 

  • 매개변수가 있는 생성자

 

// 1. 인스턴스를 생성한 다음 인스턴스 변수의 값을 변경
Car c = new Car();
c.color = "white";
c.gearType = "auto";
c.door = 4;

// 2. 매개변수를 갖는 생성자를 사용하는 것보다 코드를 보다 간결, 직관적.
Car c = new Car("white", "auto", 4);

 

 

  • 생성자에서 다른 생성자 호출하기 - this(), this

 

조건

1. 생성자의 이름으로 클래스이름 대신 this를 사용한다.

2. 한 생성자에서 다른 생성자를 호출할 때는 반드시 첫 줄에서만 호출이 가능하다.

 

첫줄에만 가능한 이유는 생성자내에서 초기화 작업도중에 다른 생성자를 호출하게 되면, 

호출한 다른 생성자 내에서도 멤버변수들의 값을 초기화를 할 것이므로 다른 생성자를 호출하기 이전의 초기화 작업이 무의미해진다.

 

// 1. 로컬변수, 인스턴스변수가 서로 구별 될 때
Car (String c, String g, int d) {
	color = c;
    gearType = g;
    door = d;
}

// 2. 두 변수가 서로 구별이 안될 때
Car (String color, String gearType, int door) {
	this.color = color;
    this.gearType = gearType;
    this.door = door;
}

 

this.color 는 인스턴스 변수, color 는 로컬변수

 

 

  • 생성자 오버로드

필요에 의해 생성자 추가하는 경우 여러개의 생성자가 하나의 클래스에 있다.

예) 한 클래스 안에 디폴트 생성자, name을 매개변수로 받는 생성자, id/name를 매개변수로 입력받는 생성자

 

 

 

 

생성자?

 인스턴스(객체)를 생성한 후에 사용하기 전에(제대로 쓰일 수 있도록) 

 유효한(적당한) 값으로 초기화시키는 작업을 수행한다.

 

'Java' 카테고리의 다른 글

배열, 배열레퍼런스, 배열인스턴스  (0) 2021.10.28
변수의 종류  (0) 2021.09.29
변수  (0) 2021.09.29
예외처리  (0) 2021.09.19
오버로딩  (0) 2021.09.16