본문 바로가기
개발언어/Java : 자바

자바 쉽게 배우기 7 - 생성자

by 개발자D 2023. 1. 8.

생성자

클래스로 인스턴스를 만들기 위해서는 클래스에 적절한 생성자가 구현되어 있어야 합니다. 생성자를 만들고 사용하는 법을 알아봅시다.

생성자 Constructor

생성자

모든 클래스에는 생성자가 포함됩니다. 클래스 안에 생성자를 정의하지 않았을 때에도 보이지 않지만 기본생성자가 자동으로 추가됩니다. 생성자는 인스턴스를 생성할 때 호출되는 메서드입니다. 이전 글에서 [사람] 클래스에서 [철수]와 [영희] 인스턴스를 만드는 예시를 들었었죠. 인스턴스마다 생성자의 매개변수를 다르게 대입하여 같은 클래스에서도 다른 특징을 가진 인스턴스를 만들어 낼 수 있습니다. 생성자는 주로 인스턴스 변수들을 초기화하는 데 사용됩니다. (인스턴스를 생성하는 것은 생성자가 아닌 new 연산자입니다.)

 

  • 자바에서 생성자의 이름은 클래스의 이름과 같아야 합니다.
  • 생성자는 리턴 값이 없습니다.
  • 생성자도 오버로딩이 가능합니다.

기본 생성자

클래스에 정의된 생성자가 하나도 없을 때 기본생성자가 컴파일러에 의해 자동으로 추가됩니다. 기본 생성자는 매개변수가 없습니다. 만약 명시적으로 선언한 생성자가 있을 경우 기본 생성자는 추가되지 않습니다.

클래스명() {}

매개변수가 있는 생성자

매개 변수로 값을 넘겨받아 인스턴스 초기화에 사용합니다. 오버로딩이 가능하여 여러 생성자를 만들 수 있습니다.

클래스명 (매개변수) {...}
클래스명 (매개변수, 매개변수) {...}

 

인스턴스 생성 과정

Person chulsu = new Person();
  1. 우선 연산자 new에 의해 메모리(heap)에 Person클래스의 인스턴스가 생성됩니다.
  2. 생성자인 Person()가 호출되어 생성자 블록의 코드가 실행됩니다. 주로 인스턴스 변수를 초기화합니다.
  3. new()의 결과로, 생성된 Person 인스턴스의 주소가 반환되어 참조변수에 저장됩니다.

this, this()

this

생성자를 통해 인스턴스 변수를 초기화할 때 this 키워드를 사용합니다. this는 생성 중인 인스턴스 자신을 가리키는 참조변수입니다. 보통 인스턴스 변수의 이름과 매개변수 이름을 똑같이 선언하는 경우가 많기 때문에 이를 구분하기 위해 사용합니다.

class Person {
    // 인스턴스 변수
    int age;
    String gender;
    
    Person (int age, String gender // 매개변수) {
    	this.age = age 
        // 인스턴스 변수 age = 매개변수 age
        this.gender = gender 
        // 인스턴스 변수 gender = 매개변수 gender
    }
}

 

this()

생성자가 여러 개일 때 한 생성자에서 다른 생성자를 호출할 때 생성자의 이름 대신 this()를 사용하여 호출합니다. 반드시 생성자의 첫 줄에서 호출해야 한다는 제약조건이 있습니다. 

 


멤버변수의 초기화 방법

명시적 초기화

멤버변수를 선언할 때 직접 값을 입력해 초기화하는 방식입니다.

 

생성자

생성자를 사용해 인스턴스가 생성될 때 초기화하는 방식입니다.

 

초기화 블록

멤버 변수의 복잡한 초기화에 사용됩니다. 생성자가 여러 개일 때 모든 생성자에서 공통으로 수행돼야 하는 초기화를 입력합니다.

  • 인스턴스 초기화 블록 : 인스턴스 변수의 초기화에 사용되며 인스턴스가 생성될 때마다 수행됩니다.
  • 클래스 초기화 블록 : 클래스 변수의 초기화에 사용되며 클래스가 메모리에 처음 올라갈 때 한 번만 수행됩니다.
// 인스턴스 초기화 블럭
{}
// 클래스 초기화 블럭
static{}

 

멤버변수의 초기화 순서

클래스 변수의 초기화 순서 : 기본값 → 명시적 초기화 → 클래스 초기화 블록

(인스턴스 생성 없이도 초기화되어 있어야 하기 때문에 생성자는 포함되지 않습니다.)

인스턴스 변수의 초기화 순서 : 기본값 → 명시적 초기화 → 인스턴스 초기화 블록 → 생성자


객제지향언어의 기본, 클래스와 객체에 대해 알아보았습니다. 현실의 세계를 컴퓨터 세계로 옮기는 과정이 재미있지 않나요? 다음 글에서는 상속과 제어자에 대해 다루겠습니다. 감사합니다.

 

자바 쉽게 배우기 8 - 상속과 제어자

상속 Inheritance 상속 상속은 [물려줌], [물려받음]을 의미합니다. 자바에서 클래스는 다른 클래스를 상속받을 수 있습니다. 상속받은 클래스는 상속해 준 클래스의 멤버들을 재사용할 수 있습니다

devdharu.tistory.com