생성자(constructor)

곽동현·2022년 10월 28일

JAVA

목록 보기
4/6
post-thumbnail

생성자는 메소드다.

생성자?

인스턴스가 생성될 때 호출되는 인스턴스 초기화 메소드이며 인스턴스 변수의 초기화 작업 혹은 인스턴스 생성 시 실행되어야 하는 기능을 선언한다.

  • 생성자의 이름은 클래스 이름과 같아야 한다.
  • 생성자는 반환값(return)이 없다.
  • 반환값이 없지만 void는 생략할 수 있다.
  • 생성자도 오버로딩이 가능하다. => 매개변수만 달리해서 사용이 가능하다.
public class Test{ // 클래스명 Test
 	Test(){ //생성자명 Test, 기본 생성자
    ...
    }
}

기본 생성자?

인스턴스를 생성하기 위해서는 모든 클래스는 반드시 하나 이상의 생성자가 정의되어 있어야 한다.
그러면 프로그래밍을 진행할 때 직접 생성자를 정의해서 해야하는 건가? 그런데 생성하지 않아도 프로그램이 잘 실행되었는데? 라고 생각한 경험이 있다. 여기에 대한 해답은
생성자를 직접 정의하지 않아도 컴파일러가 제공하는 기본 생성자가 있기 때문에 생성자를 정의하지 않고도 인스턴스를 생성할 수 있는 것이다. 컴파일러의 기본 생성자 정의 조건은 클래스에 정의된 생성자가 없을때만 추가를 해준다.

매개변수가 있는 생성자

생성자에 매개변수를 선언하여 호출하는 경우는 value를 넘겨 받아서 인스턴스 초기화 작업에 사용할 수 있다. 인스턴스 생성 후, 인스턴스 변수의 값을 초기화하는 방법보다 생성자를 사용하는 것이 코드를 간결하게 만드는 장점이 있다.

//case 1 - 인스턴스 생성 후 인스턴스 변수 초기화
class People {
	String name;
    double grade;
    int phoneNumber;

People p1 = new People(); // 인스턴스 생성
	//인스턴스 변수 초기화
    p.name = "john"
	p.grade = "4.0"
	p.phoneNumber = "010"
}

//case 2 - 매개변수 생성자로 초기화

	People(String n, double g, int p){
    name = n;
    grade = g;
    phoneNumber = p;
    }
    
    People p2 = new People("john", "4.0", "010");

생성자에서 this 키워드

  • 매개변수 이름과 인스턴수 변수 이름이 같을 경우, 인스턴스 변수 앞에 this를 붙인다.
class People {
	String name;
    double grade;
    int phoneNumber;
    
    People(String name, double grade, int phoneNumber) {
    this.name = name;
    this.grade = grade;
    this.phoneNumber = phoneNumber;
    }
  • 생성자에서 다른 생성자를 호출할 경우에도 this()로 호출 가능
profile
읽고 쓰며 생각합니다 💡

0개의 댓글