기본생성자, this 기본 개념

kyw·2025년 9월 17일

Java

목록 보기
2/13
post-thumbnail

오늘은 자바의 가장 기본이면서도 헷갈리는 개념인 생성자와 this에 대해 복습의 일환으로, 학습했던 코드를 뜯어보며 '왜?'라는 질문을 던져봤다. 알고 있다고 생각했는데, 막상 설명하려니 막히는 부분이 있어서 제대로 정리해보기로 했다

늘 분석하고 복습한 코드는 기본적인 객체 생성 Account 클래스다.

1. 기본생성자는 무엇이며, 생략 조건은 무엇일까

기본 생성자 (Default Constructor)
객체를 생성할 때 new Account() 처럼 매개변수 없이 호출하는 생성자다.

  • 컴파일러의 자동 생성 서비스: 내가 클래스에 생성자를 단 하나도 만들지 않으면, 컴파일러가 알아서 public Account() {} 와 같은 기본 생성자를 몰래 만들어준다.

  • 서비스 중단 조건: 내가 매개변수가 있는 생성자를 단 하나라도 직접 만들면, 컴파일러는 더 이상 기본 생성자를 자동으로 만들어주지 않는다.

핵심: 매개변수 있는 생성자를 만든 후에도 new Account()를 사용하고 싶다면, 반드시 public Account() {} 코드를 직접 추가해줘야 한다. 안 그러면 "그런 생성자 없다"는 컴파일 에러를 만나게 된다.

-매개변수 있는 생성자 (Parameterized Constructor)

객체를 생성하는 동시에 필드 값을 원하는 값으로 초기화하고 싶을 때 사용한다.
Account acc = new Account("홍길동", 10000, "예금"); 처럼 사용.

2. this

this 키워드는 상황에 따라 두가지 의미로 쓰인다.

  • this. : 참조 변수 '바로 나 자신'
    this.는 생성될 객체 인스턴스 자기 자신을 가리키는 리모컨(참조)이다. 가장 흔한 사용처는 필드와 매개변수의 이름이 같을 때 이를 구분하는 것이다.
    public Account(String name) {
       // 이 객체의 name 필드에(this.name), 매개변수로 들어온 name 값을 할당하라
       this.name = name;
    }
    Account account1 = new Account("제니");
    System.out.println(account1);

실행 결과:Account{name='제니', money=0, field='null'}

  • this(): 생성자 호출 "다른 나에게 부탁"
    생성자 내부에서 같은 클래스에 있는 다른 생성자를 호출할 때 사용한다. 주된 목적은 코드 중복 제거다.

Before(중복 발생)

public Account(String name, String field) {
    this.name = name;
    this.field = field;
}

public Account(String name, int money, String field) {
    this.name = name;   // name, field 초기화 코드가
    this.field = field; // 중복된다.
    this.money = money;
}

After (this() 사용):

public Account(String name, String field) {
    this.name = name;
    this.field = field;
}

public Account(String name, int money, String field) {
    // "name과 field 초기화는 저기 있는 다른 생성자에게 맡길게!"
    this(name, field); 
    this.money = money; // 나는 money만 신경 쓰면 된다.
}

this(name, field)를 통해 Account(String, String) 생성자를 호출하여 코드 중복을 없애고 유지보수를 편하게 만들었다.

this() 사용 규칙

  • 반드시 생성자의 첫 번째 줄에 작성해야 한다.
  • 생성자 당 딱 한 번만 호출할 수 있다.

정리하며 ...

알고 있다고 생각하는 것과, '왜?'라고 물었을 때 막힘없이 설명할 수 있는 것은 정말 다른 차원이라는 걸 느꼈다.
기본 생성자는 컴파일러의 '조건부' 서비스라는 점을 명심하자.
this.는 인스턴스 자신, this()는 다른 생성자 호출. 역할이 명확히 다르다.

앞으로 블로그에 작성될 글은 이 글과 같이 스스로 질문을 던지고 배웠던 코드를 분석하는 글이 될 것이다. 나중에 곱씹을 수 있도록.

profile
作心百日

0개의 댓글