어제 오늘 내일

[Java] this 키워드 사용법 본문

IT/Java

[Java] this 키워드 사용법

hi.anna 2025. 12. 26. 00:55

 

Java에서 this 키워드는 현재 객체(instance) 를 가리키는 참조입니다.
클래스 내부에서 객체 자신의 변수, 메서드, 생성자를 명확하게 구분하거나 호출할 때 사용됩니다.
this는 객체지향 프로그래밍에서 매우 중요한 개념이므로 정확히 이해하는 것이 좋습니다.

 

1. this로 멤버 변수와 지역 변수 구분하기

메서드나 생성자 안에서 매개변수 이름과 멤버 변수 이름이 같을 때, 구분하기 위해 this를 사용합니다.

예제

class Person {
    String name;

    Person(String name) {
        this.name = name; // this.name = 멤버 변수, name = 매개변수
    }
}

설명

  • this.name → 객체의 멤버 변수
  • name → 생성자의 매개변수
  • 동일한 이름을 구분하기 위해 this 사용

 

2. this로 현재 객체의 메서드 호출하기

클래스 내부에서 자신의 메서드를 호출할 때 사용할 수 있습니다.

class Person {
    void hello() {
        System.out.println("Hello");
    }

    void sayHello() {
        this.hello(); // 현재 객체의 hello() 호출
    }
}

this는 생략 가능하지만, 명확성을 위해 사용되기도 합니다.

 

3. this()로 같은 클래스의 다른 생성자 호출하기

this()는 현재 클래스의 다른 생성자를 호출할 때 사용됩니다.
단, 생성자의 첫 번째 줄에만 사용할 수 있습니다.

예제

class Person {
    String name;
    int age;

    Person() {
        this("Unknown", 0); // 다른 생성자 호출
    }

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

설명

  • 생성자 코드 중복을 막고 일관된 초기화 방식 유지
  • 반드시 생성자 첫 줄에서 호출해야 함

 

4. this로 현재 객체 참조 전달하기

메서드의 인자로 자신의 객체를 넘길 때 this를 사용할 수 있습니다.

class Person {
    void introduce() {
        Helper.print(this); // 현재 객체 넘기기
    }
}

이런 방식은 이벤트 처리, 콜백, 객체 비교 등에 자주 사용됩니다.

 

5. this는 정적(static) 문맥에서 사용할 수 없다

static 메서드나 static 블록에서는 this를 사용할 수 없습니다.

class Test {
    static void testMethod() {
        // this.name; // ❌ 오류: this는 인스턴스가 있어야 사용 가능
    }
}

이유

  • static은 객체 없이 사용되는 문맥
  • this는 “현재 객체”를 의미하므로 static에서는 존재하지 않음

 

6. 전체 예제

class Car {
    String model;
    int year;

    Car(String model) {
        this(model, 2024); // 다른 생성자 호출
    }

    Car(String model, int year) {
        this.model = model; // 멤버 변수와 매개변수 구분
        this.year = year;
    }

    void printInfo() {
        System.out.println("모델: " + this.model + ", 연식: " + this.year);
    }
}

public class Main {
    public static void main(String[] args) {
        Car c = new Car("Sonata");
        c.printInfo();
    }
}

출력:

모델: Sonata, 연식: 2024

 

7. 정리

  • this는 현재 객체를 가리키는 참조
  • 멤버 변수와 매개변수를 구분할 때 사용
  • 자신의 메서드 또는 생성자를 호출할 때 사용
  • static 문맥에서는 사용 불가

 

 

반응형
Comments