본문 바로가기
Java Study

this 키워드와 super 키워드

by xogns93 2024. 7. 15.

this 키워드

 

자바와 같은 객체 지향 프로그래밍 언어에서 사용되는 특수한 키워드입니다. this는 현재 객체를 가리키는 참조(Reference)를 의미하며, 주로 다음과 같은 상황에서 사용됩니다.

 

1.  현재 객체의 인스턴스 변수에 접근

this 키워드를 사용하여 현재 객체의 인스턴스 변수에 접근할 수 있습니다. 이는 특히 메서드의 매개변수와 인스턴스 변수의 이름이 같을 때 유용합니다.

public class MyClass {
    private int x;

    public void setX(int x) {
        this.x = x;  // this를 사용하여 인스턴스 변수에 접근
    }
}

위 예제에서 setX 메서드의 매개변수 x와 인스턴스 변수 x의 이름이 같기 때문에 this를 사용하여 인스턴스 변수에 접근합니다.

 

2.  다른 생성자 호출

한 생성자에서 다른 생성자를 호출할 때 this 키워드를 사용할 수 있습니다. 이러한 기능을 생성자에서만 사용할 수 있으며, 객체를 초기화하는 데 유용합니다.

public class MyClass {
    private int x;
    private int y;

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

    public MyClass(int x, int y) {
        this.x = x;
        this.y = y;
    }
}

위 예제에서 MyClass() 생성자는 this(0, 0);을 통해 다른 생성자 MyClass(int x, int y)를 호출하여 코드의 중복을 줄입니다.

 

 

주의사항

  • this는 인스턴스 메서드에서만 사용할 수 있습니다. 정적(static) 메서드에서는 this를 사용할 수 없습니다.
  • this는 현재 객체의 참조를 가리키므로, 객체가 생성되어야 사용할 수 있습니다. 생성자 내부에서 this를 사용할 때는 반드시 다른 생성자 호출이나 인스턴스 변수에 접근을 해야 합니다.

 


super 키워드

 

super 키워드는 Java에서 부모 클래스의 멤버(변수, 메서드)를 참조하거나 부모 클래스의 생성자를 호출할 때 사용됩니다. 이를 통해 자식 클래스에서 부모 클래스의 기능을 확장하거나 재사용할 수 있습니다.

 

super 키워드의 사용 방법

  1. 부모 클래스의 멤버 변수 참조:
    • 부모 클래스와 자식 클래스에 동일한 이름의 변수가 있을 때, super 키워드를 사용하여 부모 클래스의 변수를 참조할 수 있습니다.
  2. 부모 클래스의 메서드 호출:
    • 부모 클래스와 자식 클래스에 동일한 이름의 메서드가 있을 때, super 키워드를 사용하여 부모 클래스의 메서드를 호출할 수 있습니다.
  3. 부모 클래스의 생성자 호출:
    • 자식 클래스의 생성자에서 부모 클래스의 생성자를 명시적으로 호출할 때 사용됩니다. 이는 부모 클래스의 멤버 변수를 초기화하거나 설정하는 데 유용합니다.

 

슈퍼키워드 사용 예제

// 부모 클래스
class Parent {
    // 부모 클래스의 변수
    int number = 10;

    // 부모 클래스의 메서드
    void showNumber() {
        System.out.println("Parent number: " + number);
    }

    // 부모 클래스의 생성자
    Parent() {
        System.out.println("Parent Constructor");
    }

    // 부모 클래스의 매개변수가 있는 생성자
    Parent(int num) {
        this.number = num;
        System.out.println("Parent Constructor with parameter");
    }
}

// 자식 클래스
class Child extends Parent {
    // 자식 클래스의 변수
    int number = 20;

    // 자식 클래스의 메서드
    void showNumber() {
        System.out.println("Child number: " + number);
        System.out.println("Parent number using super: " + super.number);
    }

    // 자식 클래스의 생성자
    Child() {
        // 부모 클래스의 기본 생성자 호출
        super();
        System.out.println("Child Constructor");
    }

    // 자식 클래스의 매개변수가 있는 생성자
    Child(int num) {
        // 부모 클래스의 매개변수가 있는 생성자 호출
        super(num);
        System.out.println("Child Constructor with parameter");
    }

    // 자식 클래스에서 부모 클래스의 메서드 호출
    void showParentNumber() {
        super.showNumber();
    }
}

public class SuperKeywordExample {
    public static void main(String[] args) {
        // 자식 클래스 객체 생성
        Child child = new Child();
        child.showNumber();
        child.showParentNumber();

        System.out.println();

        // 자식 클래스의 매개변수가 있는 생성자 호출
        Child childWithParam = new Child(30);
        childWithParam.showNumber();
        childWithParam.showParentNumber();
    }
}

코드 설명

  1. 부모 클래스 Parent:
    • number 변수를 가지고 있으며, 이를 출력하는 showNumber 메서드와 두 가지 생성자를 가지고 있습니다.
  2. 자식 클래스 Child:
    • 부모 클래스의 number 변수와 같은 이름의 변수를 가지고 있으며, 이를 출력하는 showNumber 메서드를 재정의합니다.
    • 기본 생성자와 매개변수가 있는 생성자를 가지고 있으며, 이들 생성자에서 super 키워드를 사용하여 부모 클래스의 생성자를 호출합니다.
    • showParentNumber 메서드를 통해 부모 클래스의 showNumber 메서드를 호출합니다.
  3. SuperKeywordExample 클래스의 main 메서드:
    • Child 객체를 생성하고, showNumber와 showParentNumber 메서드를 호출하여 super 키워드의 사용을 보여줍니다.
    • 매개변수가 있는 생성자를 호출하여 부모 클래스의 매개변수가 있는 생성자를 호출하는 예제를 보여줍니다.

 

 

이와 같이 super 키워드를 사용하여 부모 클래스의 멤버와 생성자를 쉽게 참조하고 호출할 수 있습니다.