본문 바로가기
JAVA

[ 개념 ] JAVA 생성자(constructor)란? this

by hak0205 2020. 7. 18.
반응형

1. 생성자란?

new 연산자와 같이 사용되어 클래스로부터 객체를 생성할 때 호출되어 객체(멤버 변수나 상수)의 초기화를 담당합니다. 

즉, 초기화를 통해 객체를 사용할 준비를 합니다. 

new 연산자에 의해 생성자가 성공적으로 실행되면 힙(heap) 영역에 객체가 선언되고 객체의 주소가 리턴됩니다. 

객체 주소를 이용하여 클래스 타입 변수에 저장되어 객체에 접근할 때 사용됩니다.

Constructor constructor = new Constructor(); //디폴트 생성자 방식
		

2. 생성자의 종류

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

생성자가 없는 클래스는 클래스 파일을 컴파일할 때, 자바 컴파일러에서 자동으로 생성자를 만들어줍니다.

이렇게 자동으로 만들어 주는 생성자를 만들어 주는 생성자를 디폴트 생성자라고 합니다.

public class Constructor {

    String name;
    int age;
    String hobby;

    Constructor(){ //이렇게 직접 써주지 않아도 컴파일시, 자동으로 생성됩니다.

    }
}

 

2) 생성자 오버로딩

외부에서 제공하는 다양한 데이터를 이용해서 객체를 초기화를 위해서는 생성자 오버로딩이 필요합니다. 생성자 오버로딩을 통해 객체를 다양하게 초기화하고 간결하게 초기화하기 위해서입니다. 생성자 오버로딩을 다른 말로 명시적 생성자라고도 합니다.

 

여기서 주의사항은 오버로딩한 선언한 생성자가 한 개라도 있으면 컴파일러는 기본 생성자를 추가하지 않음으로 기본 생성자를 직접 생성해주어야 합니다. 또한, 순서만 변경한 생성자 오버로딩은 오버로딩 이라고 볼 수가 없습니다.

public class Constructor {

    String name;
    int age;
    String hobby;

    //디폴트(기본) 생성자
    Constructor(){

    }

    //생성자 오버로딩(명시적 생성자)
    Constructor(String name){
        this.name = name;
    }

    //생성자 오버로딩(명시적 생성자)
    Constructor(String name, int age){
        this.name = name;
        this.age = age;
    }

    //생성자 오버로딩 X
    Constructor(int age, String name){
        this.age = age;
        this.name = name;
    }
    
    //생성자 오버로딩(명시적 생성자)
	Constructor(String name, int age, String hobby) {
        this.name = name;
        this.age = age;
        this.hobby = hobby;
    }
	


}

 

 

public class ConstructorTest {

    public static void main(String[] args) {

        //디폴트(기본) 생성자
        Constructor constructor = new Constructor();
        constructor.name = "동동이";
        constructor.age = 20;
        constructor.hobby = "movie";

        //명시적 생성자
        Constructor constructor1 = new Constructor("동동이"); 
        Constructor constructor2 = new Constructor("동동이", 20);
        Constructor constructor3 = new Constructor("동동이", 20,"movie"); 
        //6~9행처럼 여러줄이 아닌 한줄로 생성자를 호출할 수 있습니다.
		
    }
}

 

3) 다른 생성자 호출(this())

생성자 오버로딩(명시적 생성자)이 많아질수록 중복된 코드가 발생할 수 있습니다. 이를 해결하기 위해 다른 생성자를 호출하여 중복 코드를 줄일 수 있습니다. this() 생성자는 첫 줄에서만 허용되고 this() 다음에는 다른 실행문들이 올 수 있습니다. 

public class Constructor {

    String name;
    int age;
    String hobby;

    //디폴트(기본) 생성자
    Constructor(){

    }
    
    //this()를 이용하여 다른 생성자를 호출하여 중복 코드를 줄입니다.
    Constructor(String name){
        this(name, 21, "movie");
    }

    Constructor(String name, int age){
        this(name, age, "movie");
    }
    
    //명시적 생성자
    Constructor(String name, int age, String hobby) {
        this.name = name;
        this.age = age;
        this.hobby = hobby;
    }
    

}

3. 특징

1. 클래스 이름과 동일한 이름을 가진 메서드입니다.

2. 반환형(return)이 선언되어 있지 않으면서, 반환하지 않는 메서드입니다. 즉, 입력만 있을 뿐 출력은 없습니다. 

 

4. 정리

1. 생성자는 객체의 초기화를 위해 사용됩니다.

2. 생성자는 크게 디폴트(기본) 생성자와 생성자 오버로딩(묵시적 생성자) 2가지로 나누어집니다. 디폴트 생성자와 생성자 오버로딩의 차이는 파라미터의 존재 여부입니다. 생성자 오버로딩은 외부의 데이터로 객체를 초기화할 수 있습니다.

3. this()를 통해 다른 생성자를 호출하여 중복 코드를 줄일 수 있습니다.

 

- 기술면접을 위해서 꼭 알아두시는게 좋습니다.

반응형

'JAVA' 카테고리의 다른 글

[ 개념 ] JAVA 객체(object)란? OOP 그리고 클래스(class)  (0) 2020.07.18

댓글