본문 바로가기

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

중첩, 인스턴스 멤버 클래스

중첩 클래스

  • 클래스 내부에 선언한 클래스. 클래스의 멤버를 쉽게 사용할 수 있고 외부에는 중첩 관계 클래스를 감춤으로써 코드의 복잡성을 줄일 수 있음
  • 멤버 클래스: 클래스의 멤버로서 선언되는 중첩 클래스
  • 로컬 클래스: 메소드 내부에서 선언되는 중첩 클래스


    출처, 이것이 자바다


인스턴스 멤버 클래스

  • A 클래스의 멤버로 선언된 B 클래스


    출처, 이것이 자바다


  • 인스턴스 멤버 클래스 B는 주로 A 클래스 내부에서 사용되므로 private 접근 제한을 갖는 것이 일반적

package ch09.sec02.exam01;

/*
 * 중첩클래스 : 클래스 내부에 클래스를 정의하는 개념.
 */

public class A {
    //인스턴스 멤버클래스. new가 사용 안함.
    class B { /* 내용 */ }
    //인스턴스 필드사용
    B field = new B(); //new가 힙영역에 메모리 생성

    //생성자
    A () {
        B b = new B();
    }

    //인스턴스 메소드 : new가 메소드 코드만 정보를 저장.
    void method() {
        B b = new B(); 
    }
}

package ch09.sec02.exam01;

public class AExample {

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

        //B 객체 생성
        A.B b = a.new B();

    }

}

package ch09.sec02.exam02;

public class A {

    //인스턴스 멤버 클래스
    class B {
        //인스턴스 필드
        int field1 = 1;

        B() {
            System.out.println("B-생성자 실행");
        }

        //인스턴스 메소드
        void method1() {
            System.out.println("B-method1 실행");
        }

    }
        //인스턴스 메소드
        void useB() {
            B b = new B();
            System.out.println(b.field1);
            b.method1();
    }
}

package ch09.sec02.exam02;

public class AExample {

    public static void main(String[] args) {
        A a = new A();

        a.useB();

    }

}

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

익명 객체  (0) 2023.01.25
바깥 멤버 접근  (0) 2023.01.25
로컬 클래스  (0) 2023.01.25
정적 멤버 클래스  (0) 2023.01.25