Cracking Code

[Java] 생성자 (Constructor) 본문

Java/Java language

[Java] 생성자 (Constructor)

CrackCo 2020. 8. 6. 19:28
자바 객체는 클래스를 인스턴스화할 때 호출하여 초기화하는 역할을 담당합니다.

생성자 (Constructor)

생성자를 호출하여 멤버 변수에 데이터를 초기화합니다.

setter 메소드를 사용하여 초기화할 수 있지만 자바에서 생성자를 호출함과 동시에

멤버 변수를 초기화할 수 있도록 하는 편의성을 제공합니다.

따라서 일반적으로 setter 메소드는 멤버 변수에 저장된 데이터를 수정하는 역할을 담당합니다.

modifier class_name([data_type variable, ...]) {
    [...]
}

메소드와 여러가지 비슷한 특징을 가지지만 리턴 타입이 없으며

반드시 클래스와 동일한 이름으로 지정해야 합니다.

만약, 생성자를 따로 정의하지 않았다면 자동으로 기본 생성자가 생성됩니다.

// 기본 생성자
public class_name() {}

개발자가 명시적으로 생성자를 정의하면 기본 생성자는 자동으로 제공되지 않으므로

기본 생성자가 필요할 경우 명시적으로 정의해야 합니다.

 

E.g.

// Constructor.java
public class Constructor {
    public Constructor() {
        System.out.println("기본 생성자 호출!");
    }
}

// Main.java
public class Main {
    public static void main(String[] args) {
        Constructor constructor = new Constructor();
        // Constructor 클래스의 생성자를 사용하여 객체 생성
    }
}


// 실행 결과
기본 생성자 호출!

자바의 객체는 생성자에 의해 생성됩니다.

위의 예제처럼 생성자를 임의로 지정하고 블록 안에 명령문을 넣으면

메소드와 비슷하게 명령문을 수행하게 됩니다.

 

객체의 생성과 동시에 멤버 변수를 초기화하는 생성자를 정의해봅시다.

E.g.

// Constructor.java
public class Constructor {
    String name;

    public Constructor() {
        System.out.println("기본 생성자 호출!");
    }

    public Constructor(String name) {
        // String 타입의 데이터를 받아
        // 멤버 변수 name에 저장
        this.name = name;
        
        System.out.println("Constructor(String) 생성자 호출!");
    }
}

// Main.java
public class Main {
    public static void main(String[] args) {
        Constructor constructor = new Constructor();
        Constructor constructor2 = new Constructor("dev우쟈");
        
        // constructor 객체의 name 멤버 변수 출력
        System.out.println(constructor.name);
        // constructor2 객체의 name 멤버 변수 출력
        System.out.println(constructor2.name);
    }
}


// 실행 결과
null
dev우쟈

위 처럼 생성자는 같은 이름으로 선언하되 받는 인자의 갯수나 순서, 데이터 종류가 다르면

오버로딩이라는 기술의 의해 일치하는 메소드 또는 생성자가 호출됩니다.

기본 생성자로 객체가 생성되었다면 객체의 멤버 변수에는 각 데이터 타입에 따라 기본값이 초기화되며

String 타입의 매개 변수를 받아 생성과 동시에 초기화하는 생성자로 객체가 생성되면

명령에 따라 멤버 변수가 초기화됩니다.

'Java > Java language' 카테고리의 다른 글

[Java] 상속 (Inheritance)  (0) 2020.08.12
[Java] this 키워드  (0) 2020.08.09
[Java] 필드 (Field)  (0) 2020.08.05
[Java] Method (메소드)  (0) 2020.08.05
[Java] Class (클래스)  (0) 2020.08.05
Comments