본문 바로가기
전산 관련 시험/프로그래밍(C, JAVA, Python)

[JAVA] 프로그래밍 언어 (ex. 28)

by 응_비 2024. 10. 15.
class A {
    private int a;                  // 변수 a는 private으로 선언됨

    public A(int a) {
        this.a = a;                 // this.a = a; (1번 빈칸)
    }

    public void display() {
        System.out.println("a=" + a);
    }
}

class B extends A {
    public B(int a) {
        super(a);                   // super(a); (2번 빈칸)
        super.display();            // 부모 클래스의 display() 호출
    }
}

public class Eunwoo {
    public static void main(String[] args) {
        B b = new B(50);            // B 클래스 객체 생성
    }
}



설명

1. 첫 번째 빈칸 (this.a = a;)
• A 클래스의 생성자에서 전달된 매개변수 a를 클래스의 인스턴스 변수 a에 할당해야 합니다. 이를 위해 this.a = a; 구문을 사용합니다. 여기서 this는 해당 클래스의 인스턴스 변수임을 명확히 하기 위해 사용됩니다.

2. 두 번째 빈칸 (super(a);)
• B 클래스는 A 클래스를 상속하고 있습니다. B 클래스의 생성자에서 super(a);를 호출하여 부모 클래스인 A의 생성자를 호출하고, 부모 클래스에서 a 값을 설정할 수 있도록 합니다.

3. 출력
• B b = new B(50);로 B 객체를 생성하면, B의 생성자가 호출됩니다. 이 때 super(a)를 통해 A 클래스의 생성자가 호출되어 a가 50으로 설정됩니다.
• 이후 super.display();가 호출되며 부모 클래스의 display() 메소드가 실행되어 a=50이 출력됩니다.

최종 코드:

class A {
    private int a;

    public A(int a) {
        this.a = a;  // (1번 빈칸) this.a = a;
    }

    public void display() {
        System.out.println("a=" + a);
    }
}

class B extends A {
    public B(int a) {
        super(a);    // (2번 빈칸) super(a);
        super.display();
    }
}

public class Eunwoo {
    public static void main(String[] args) {
        B b = new B(50);
    }
}



출력 결과:

a=50

this.a와 a는 클래스 내부에서 사용되는 변수이며, 그 중 **this.a**는 **인스턴스 변수(필드)**를 가리키고, **a**는 매개변수를 의미합니다.

1. this.a

• **this.a**는 클래스 A의 인스턴스 변수 a를 가리킵니다.
• 이 인스턴스 변수는 private으로 선언되어 있어 클래스 내부에서만 접근할 수 있습니다. this 키워드를 통해 클래스의 인스턴스 변수 a임을 명확히 구분합니다.
• 즉, 객체가 생성될 때마다 각 객체가 독립적으로 가지는 값입니다.

class A {
    private int a;  // 클래스 A의 인스턴스 변수 a (private)
    
    public A(int a) {   // 생성자의 매개변수 a
        this.a = a;     // this.a는 인스턴스 변수, a는 생성자의 매개변수
    }
}

여기서 this.a는 클래스 A의 인스턴스 변수 a를 나타내고 있으며, 생성자의 매개변수 a의 값을 인스턴스 변수 a에 할당합니다. this 키워드를 사용하지 않으면, 매개변수 a와 구분이 안 되기 때문에 this를 사용하여 인스턴스 변수임을 명시합니다.

2. a (생성자 매개변수)

• **a**는 생성자의 매개변수입니다. 이는 메소드나 생성자를 호출할 때 전달되는 값이며, 해당 메소드나 생성자 안에서만 사용 가능합니다.
• 즉, new A(50);으로 객체를 생성할 때, 전달된 50이 이 매개변수 a에 전달됩니다.

public A(int a) {   // 생성자의 매개변수 a는 호출 시 전달되는 값
    this.a = a;     // 매개변수 a 값을 인스턴스 변수 this.a에 저장
}

여기서 a는 생성자가 호출될 때 전달된 값이고, this.a는 객체의 인스턴스 변수로 그 값을 저장합니다.

요약:

• **this.a**는 클래스 A의 인스턴스 변수로, 클래스 내에서 선언된 필드입니다. 접근 지정자에 따라 접근 범위가 달라지며, 이 예제에서는 **private**로 선언되어 클래스 외부에서 직접 접근할 수 없습니다.
• **a**는 생성자의 매개변수로, 생성자가 호출될 때 전달된 값을 받는 변수입니다.

따라서, this.a = a;는 생성자의 매개변수 a 값을 인스턴스 변수 a에 할당하는 구문입니다.

댓글