생성자

조용근·2024년 2월 6일

자바 정리

목록 보기
2/21

생성자

자바에서 생성자(Constructor)는 객체가 생성될 때 자동으로 호출되는 메서드이다.

  • 클래스 이름과 동일 : 생성자의 이름은 클래스의 이름과 정확하게 같아야 한다.
  • 반환값이 없다 : 생성자는 반환값이 없고, 'void'도 사용하지 않는다.
  • 자동 호출 : 객체가 생성될 때 자동으로 호출된다.
  • 오버로딩 가능 : 하나의 클래스에 여러 생성자를 정의할 수 있다.

생성자의 종류

1.기본 생성자(Default Constructor): 사용자가 명시적으로 생성자를 정의하지 않으면 컴파일러가 자동으로 제공하는 생성자이다. 이 생성자는 객체의 멤버 변수를 기본값으로 초기화한다.

class MyClass {
    int num;

    // 기본 생성자
    MyClass() {
        num = 100;
    }
}

2.매개변수가 있는 생성자: 하나 이상의 매개변수를 가지는 생성자로, 객체를 생성할 때 특정 값으로 멤버 변수를 초기화하는 데 사용된다.

class MyClass {
    int num;

    // 매개변수가 있는 생성자
    MyClass(int i) {
        num = i;
    }
}

오버로딩 사용

package javaplus.constructor;

public class Constructor2 {
    int num;
    String name;
    //기본 생성자
    Constructor2(){
        num = 100;
        name = "나";
    }
    //매개변수가 있는 생성자
    Constructor2(int i, String n){
        num = i;
        name = n;
    }

    public static void main(String[] args) {
        //객체 생성
        Constructor2 myObject = new Constructor2(100,"나");
        
        //객체 출력
        System.out.println("num: " + myObject.num);
        System.out.println("name: " + myObject.name);
     
    }
}

this

'this' 키워드를 사용하는 생성자는 클래스 내부에서 다른 생성자를 호출할 때 사용한다. 주로 생성자 오버로딩 상황에서 코드 중복을 줄이고, 하나의 생성자에서 다른 생성자의 로직을 재사용할 때 활용한다. 'this' 생성자는 이러한 이점이 있다.

    1. 코드 중복 감소: 공통 초기화 로직을 한 생성자에만 작성하고, 다른 생성자에서는 'this'를 사용해서 해당 로직을 재사용할 수 있다.
    1. 유지보수성 향상: 초기화 로직을 한곳에 집중시켜, 코드 변경 시 수정해야 할 위치를 최소화할 수 있다.
    1. 코드의 간결성
package javaplus.constructor;

public class ThisEx {
    int a;
    int b;

    //기본 생성자
    public ThisEx(){
        this(0,0); // 다른 생성자 호출
    }

    //매개변수가 있는 생성자
    public ThisEx(int a, int b) {
        this.a = a;
        this.b = b;
    }

    public static void main(String[] args) {
        //매개변수가 있는 생성자를 사용하여 객체 생성
        ThisEx ex1 = new ThisEx(10,20);

        //객체의 상태 출력
        System.out.println("example1 a: " + ex1.a);
        System.out.println("example1 b: " + ex1.b);

        //기본 생성자를 사용하여 또 다른 객체 생성
        ThisEx ex2 = new ThisEx();

        //두 번쨰 객체의 상태 출력
        System.out.println("example2 a: " + ex2.a);
        System.out.println("example2 b: " + ex2.b);
    }
}
profile
Today I Learn

0개의 댓글