Java & Spring/Java

생성자&this,this()

승주우에요 2026. 1. 6. 09:28

1. 생성자란?

생성자는 객체가 생성되는 시점에 단 한 번 호출되는 특수한 메서드이다. 주 목적은 객체의 초기 상태를 보장하는 것이다.

class Person {
    String name;
    int age;

    Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
}

생성자의 특징

  • 클래스명과 이름이 같다
  • 반환 타입이 없다
  • 객체 생성 시 자동 호출
  • 개발자가 직접 호출할 수 없다

📌 생성자는 객체 생성 이후에 실행되는 메서드가 아니라 객체 생성 과정의 일부이다!

 

2. 기본 생성자(Default Constructor)

생성자를 하나도 정의하지 않으면, 컴파일러가 생성자를 자동으로 추가한다. 

class A {
    int x;
}

⬇ 컴파일러가 내부적으로 추가

class A {
    int x;

    A() {}
}

주의점

  • 생성자를 하나라도 직접 정의하면 기본 생성자는 자동 생성되지 않는다
  • 컴파일 오류가 자주 발생하니 주의할 것

 

3. 왜 사용할까?

잘못된 초기화 방식
Person p = new Person();
p.name = "철수";
p.age = 20;

올바른 방식
Person p = new Person("철수", 20);
  • 객체의 일관성 보장
  • 불완전한 객체 생성 방지
  • 객체의 최소 조건 강제

4. this

this = 현재 메서드를 호출한 객체 자신 !!

class Person {
    String name;

    Person(String name) {
        this.name = name;
    }
}

📌 this는 객체 컨텍스트에서만 존재

  • static 메서드 ❌
  • static 블록 ❌

스코프 충돌 해결을 위해 필요함

 

5. this() - 생성자에서 다른 생성자 호출

this()는 같은 클래스의 다른 생성자를 호출한다

class Person {
    String name;
    int age;

    Person(String name) {
        this(name, 0);
    }

    Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
}

 

목적

  • 생성자 로직 중복 제거
  • 초기화 흐름 통일 
  • 생성자 체이닝 (Constructor Chaining)

6. this() 사용 규칙

  • this(...)는 반드시 생성자의 첫 줄이어야 함
  • 생성자 안에서 단 한번만 호출 가능하다
  • -> 객체 초기화 순서를 JVM이 명확히 관리해야 하기 때문
Person(String name) {
    System.out.println("생성자 호출!");
    this(name, 0); // 컴파일 오류
}

Person(String name) {
    this(name, 0); // 반드시 첫 번째 줄!!
}

 

7. 생성자 호출 흐름

  1. 메모리 할당 (Heap)
  2. 인스턴스 필드 기본값 초기화
  3. this()로 연결된 생성자 실행
  4. 최종 생성자 실행
  5. 객체 생성

📌 생성자 호출도 메서드 호출과 동일하게 Stack에 사용됨

 

8. 생성자 vs 일반 메서드 차이

구분 생성자 일반 메서드
이름 클래스명 User 지정
반환 타입 없음 있음
호출 시점 객체 생성 시 임의
목적 초기화 동작 수행
this() 호출 가능 불가

 

9. 생성자 설계 원칙

  • 생성자는 객체를 완전한 상태로 만들어줘야 함
  • 필수 값은 생성자로 강제
  • 생성자 로직은 가볍게
  • 복잡한 로직은 별도 메서드로 분리
  • 생성자 오버로딩 시 반드시 this로 통합

10. 핵심 요약

  • 생성자는 객체 초기화를 책임진다
  • 생성자는 객체 생성 과정의 일부다
  • this는 호출한 객체 자신을 가리킨다
  • this()는 생성자 간 호출을 위한 문법이다
  • this()는 반드시 첫 줄에 와야 함
  • 생성자를 잘 설계하면 객체는 항상 유효한 상태를 유지함

'Java & Spring > Java' 카테고리의 다른 글

Object 클래스  (0) 2026.01.06
상속(Inheritance)이란  (0) 2026.01.06
메서드  (0) 2026.01.06
Static  (2) 2026.01.05
객체의 상태와 변수의 생명주기  (0) 2026.01.05