*자바 생성자란?

 

생성자(constructor)는 또 무엇인가?

 

자바의 챕터를 넘기다 보면 끓임없는 새로운 용어들이 등장한다.

 

일단 생성이라는 말은 뭔지 알 것 같다. 사전에는

 

- 생성 : 사물이 생겨남. 또는 사물이 생겨 이루어지게 함.

 

라고 한다. 인스턴스를 메모리에 생성한다는 말은

 

Object opp1 = new Object( );

 

과 같다. 인스턴스가 생성이 되었는데 생성자를 다루어 보지 않았다? 그것은 컴파일러가 자동으로 기본 생성자(default constructor)를 생성해줬기 때문이다. 생성자는 직접 조작이 가능하다.

1. 기본 생성자

이번에는 직원 객체를 자바에 구현해 볼 것이다. 직원의 이름과 나이를 멤버변수로 넣는다.

 

class Employee {

    String name;

    int age;

}

 

Employee 클래스의 인스턴스를 생성한다

 

Employee ep1 = new Employee( );

 

Employee( ) 이 부분이 생성자이다. 사실 클래스 안에 생략된 부분이 있었다. 컴파일러가 대신 만들어주는 디폴트 생성자이다.

2. 생성자 만들기

생성자는 객체를 만드는 시점에 해야할 작업들을 해줄 수 있다. 보통 생성자로 초기화를 한다. 생성자는 클래스 이름 ( ) { } 형식으로 만든다.

 

class Employee {

    String name;

    int age;

    Employee( ) {

    }

}

 

여기에다

 

class Employee {

    String name;

    int age;

    Employee( ) {

    System.out.println("Good to go")

    }

}

 

를 해보고 실행해보자.

 

인스턴스가 하나 생성될 때 마다 콘솔에 Good to go 를 출력한다.

 

생성자에서는 멤버 변수의 값을 초기화 해줄 수 있다. 멤버 변수는 초기화하기 전까지는 어떤 값이 들어 있는지 알 수 없다. 초기화를 해주면 어떤 값인지 확인이 된다.

 

class Employee {

    String name;

    int age;

    Employee( ) {

        name = "missing";

        age = 0;

    }

}
Employee ep1 = new Employee( );

System.out.println (ep1.name);

System.out.println (ep1.age);

 

결과 출력

 

-> missing

-> 0

3. 생성자 오버로드 (Constructor Overload)

생성자는 하나만 만들 수 있는게 아니라 여러개를 만들 수 있다. 필요에 따라 생성자를 늘릴 수 있는 것을 생성자 오버로드(overload)라고 한다. 생성자를 여러개 만들때 생성자에게 주는 매개변수들은 달라야 컴파일러가 식별이 가능하다. 다음 코드를 살펴보자

 

생성자 오버로드

매개변수가 없는 것,

이름만 받는 것,

나이만 받는 것,

이름과 나이 둘다 받는 것까지

 

4개의 생성자로 오버로드했다. 생성자 안의 this 키워드는 인스턴스의 멤버변수이다. 이름은 같지만 this.name 과 name은 엄연히 구분된다. 

 

Employee ep2 = new Employee("Jane" );

 

라면 this.name = name 은

 

ep2.name = "Jane";

 

과 같은 뜻이다.

 

메인 함수에서는 아래 화면처럼 사용했다.

 

4개의 생성자를 써서 콘솔에 멤버 변수들을 출력해서 인스턴스가 잘 생성되었는지 확인한다.

 

윈도우 애플리케이션 같은 경우 프로그램을 시작했을 때 윈도우의 위치나 크기를 지정해줘야 한다. 생성자를 여러개 사용하면 화면의 상황에 따라 위치만 초기화할 수도 있고 위치와 크기를 같이 초기화 할 수도 있다. 생성자가 많아지면 초기화할때 선택의 폭이 넓어지는 장점이 있다.

 

디폴트 생성자는 사용하지 않을 수도 있다. 일단 매개변수가 있는 생성자가 하나라도 있으면 컴파일러는 기본 생성자를 만들지 않는다.

 

생성자를 잘 활용하면 코드를 간결하게 만들 수 있다.

공유하기

facebook twitter kakaoTalk kakaostory naver band