본문 바로가기

객체 지향 프로그래밍 - 중첩 선언과 익명 객체

바깥 멤버 접근

바깥 클래스의 멤버 접근 제한

  • 정적 멤버 클래스 내부에서는 바깥 클래스의 필드와 메소드를 사용할 때 제한이 따름


    출처, 이것이 자바다


  • 정적 멤버 클래스는 바깥 객체가 없어도 사용 가능해야 하므로 바깥 클래스의 인스턴스 필드와 인스턴스 메소드는 사용하지 못함

package ch09.sec05.exam01;

public class A {

    //new 연산가가 힙영역에 메모리 생성시 사용.
    int field1;
    void method1() {}

    //JVM이 A클래스가 사용시, 먼저 단 1번만 메소드영역에 메모리 생성
    static int field2;
    static void method2() {}

    //인스턴스 멤버 클래스   A a = new A();   A.B b = a.new B();   b.method();
    class B {
        void method() {
            field1 = 10;
            method1();

            field2 = 10;
            method2();
        }
    }

    //정적 멤버 클래스  A클래스 객체 생성 없음.   A.C c = new A.C();  c.method();
    static class C {
        void method() {
            //C클래스 입장에서 A클래스 객체 생성 하지않고, 독립적으로 생성되었기 때문
//            field1 = 10;
//            method1();

            field2 = 10;
            method2();
        }
    }
}

바깥 클래스의 객체 접근

  • 중첩 클래스 내부에서 바깥 클래스의 객체를 얻으려면 바깥 클래스 이름에 this를 붙임


    출처, 이것이 자바다


package ch09.sec05.exam02;

/*
 * 인스턴스 클래스에서 바깥 클래스 멤버 호출시   클래스명.this.멤버 호출
 */

public class A {

    String field = "A-field";

    void method() {
        System.out.println("A-method");
    }

    //A a = new A();  A.B b = a.new B();  b.print();
    class B {

        String field = "B-field";

        void method() {
            System.out.println("B-method");
        }

        void print() {
            //B객체의 필드와 메소드 사용
            System.out.println(this.field);
            this.method();

            //A객체의 필드와 메소드 사용
            System.out.println(A.this.field);
            A.this.method();
        }
    }

    //A클래스의 메소드
    void useB() {
        B b = new B();
        b.print();
    }
}

package ch09.sec05.exam02;

public class AExample {

    public static void main(String[] args) {
        //A 객체 생성
        A a = new A();

//        A.B b = a.new B();

        //A 메소드 호출
        a.useB();

    }

}

'객체 지향 프로그래밍 - 중첩 선언과 익명 객체' 카테고리의 다른 글

익명 객체  (0) 2023.01.25
로컬 클래스  (0) 2023.01.25
정적 멤버 클래스  (0) 2023.01.25
중첩, 인스턴스 멤버 클래스  (0) 2023.01.25