[Java] this()(생성자에서의 this 호출), this(참조변수로 자기 자신을 가리키는 경우)

2025. 10. 17. 17:16·Java

1. this() — 생성자에서 다른 생성자 호출하기

Java에서는 한 클래스 안에서 여러 생성자를 만들 수 있다.
이때 중복 코드를 줄이기 위해 this()를 이용해 다른 생성자를 호출할 수 있다.

예제 코드

class Person {
    String name;
    int age;

    // 매개변수 2개짜리 생성자
    Person(String name, int age) {
        this.name = name;
        this.age = age;
        System.out.println("매개변수 있는 생성자 호출됨");
    }

    // 기본 생성자
    Person() {
        this("이름 없음", 0); // 다른 생성자 호출
        System.out.println("기본 생성자 호출됨");
    }
}

public class ThisConstructorTest {
    public static void main(String[] args) {
        Person p1 = new Person();
    }
}

실행 결과

매개변수 있는 생성자 호출됨
기본 생성자 호출됨

해석해보면,

  • this("이름 없음", 0) 은 같은 클래스 안의 다른 생성자를 호출한다.
  • 즉, Person()이 호출되면 내부에서 Person(String, int) 생성자가 먼저 실행된다.
  • 그 후 "기본 생성자 호출됨"이 출력된다.
  • this()는 반드시 생성자의 첫 줄에 있어야 한다!

👉 참고로 Person()을 그냥 비워둬도 기본생성자로서 동작하지만,
여기서는 “기본 생성자도 다른 생성자를 재활용할 수 있다”는 걸 보여주기 위해 사용한 예제다.


2. this — 현재 객체 자신을 가리키는 참조 변수

이제 this()와 다르게 괄호가 없는 this는
“현재 객체 자신”을 의미한다.
즉, 객체 스스로를 가리킬 때 사용된다.


예제 코드

class Dog {
    String name;

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

    void meet(Dog other) {
        System.out.println(this.name + "가 " + other.name + "를 만났어!");
    }

    void meetItself() {
        meet(this); // 자기 자신을 인자로 전달
    }
}

public class ThisReferenceTest3 {
    public static void main(String[] args) {
        Dog dog = new Dog("바둑이");
        dog.meetItself();
    }
}

실행 결과

바둑이가 바둑이를 만났어!

코드 설명

구문 의미

this.name = name; 지역변수 name과 인스턴스 변수 name을 구분
meet(this); 자신의 객체 참조를 메서드 인자로 전달
this.name 현재 객체의 이름 필드 접근
  • this는 현재 실행 중인 객체 자신을 가리킨다.
  • meetItself() 내부에서 this를 인자로 넘기면,
    meet(Dog other)의 매개변수 other로 자기 자신이 들어간다.
  • 결과적으로 this.name과 other.name이 같아 "바둑이가 바둑이를 만났어!"가 출력된다.

3. this() vs this 정리표

구분 형태 의미 사용 위치 예시

생성자 호출 this() 같은 클래스의 다른 생성자 호출 생성자 첫 줄 this("홍길동", 25);
참조 변수 this 현재 객체 자신 참조 인스턴스 메서드 내부 this.name = name;, method(this);

4. 정리

  • this() 👉 생성자 재사용 (코드 중복 줄이기)
  • this 👉 자기 자신을 참조 (객체 스스로를 가리킬 때)

두 개의 this는 형태는 비슷하지만 의미와 역할이 전혀 다르다.
생성자 안에서는 다른 생성자를 부르는 역할,
일반 메서드 안에서는 현재 객체 자신을 참조하는 역할을 한다.


결론
this는 자바 객체지향의 기본 중의 기본이다.
“나 자신을 가리키는 존재”로서, 객체의 정체성을 명확히 하고
생성자나 메서드에서 중복을 줄이거나 명확한 참조를 가능하게 해준다.

 

'Java' 카테고리의 다른 글

[Java] 상속의 정의  (0) 2025.10.17
[Java] Java spring에서 안전한 객체 복사와 불변 설계 패턴  (0) 2025.10.17
[JAVA] 객체지향개념Ⅱ  (0) 2025.10.13
[Java] 문자열 처리 성능비교 - String vs StringBuilder vs StringBuffer  (0) 2025.10.11
[Java] 자바의 추상 클래스 vs 인터페이스 완전 정복  (0) 2025.10.09
'Java' 카테고리의 다른 글
  • [Java] 상속의 정의
  • [Java] Java spring에서 안전한 객체 복사와 불변 설계 패턴
  • [JAVA] 객체지향개념Ⅱ
  • [Java] 문자열 처리 성능비교 - String vs StringBuilder vs StringBuffer
싹난 감자🥔🌱
싹난 감자🥔🌱
개발 블로그
  • 싹난 감자🥔🌱
    감자에 싹이나서 잎이나서
    싹난 감자🥔🌱
  • 전체
    오늘
    어제
    • 분류 전체보기 (43)
      • Spring (3)
      • Java (17)
      • LLM (1)
      • DevOps (4)
      • Algorithm (14)
        • 백준 (4)
        • 프로그래머스 (0)
        • 코드업 (10)
      • Computer Science (3)
        • Operating System (2)
        • Computer Architecture (1)
      • Trouble Shooting 🚀 (0)
      • 회고 & 성장기록 (1)
      • 설계 📐 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    자바 입력
    Scanner
    비트
    2차원 배열
    코딩테스트
    docker
    구간합
    자바성능
    Java
    알고리즘입력
    배포
    2진수
    BufferedReader
    자바BufferedReader
    자바Scanner비교
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
싹난 감자🥔🌱
[Java] this()(생성자에서의 this 호출), this(참조변수로 자기 자신을 가리키는 경우)
상단으로

티스토리툴바