본문 바로가기

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

로컬 클래스

로컬 클래스

  • 생성자 또는 메소드 내부에서 다음과 같이 선언된 클래스
  • 생성자와 메소드가 실행될 동안에만 객체를 생성할 수 있음


    출처, 이것이 자바다


package ch09.sec04.exam01;

/*
 * 로컬 클래스 : 생성자, 메소드 내부에 정의한 클래스.
 * 생성자, 메소드 호출시에만 로컬 클래스 객체 생성이 이루어진다.
 */

public class A {

    //생성자
    A() {
        class B {}

        B b = new B();
    }

    //메소드
    void method() {
        class B {}

        B b = new B();
    }
}

package ch09.sec04.exam02;

/*
 * 로컬 클래스 예제
 */

public class A {

    //메소드
    void useB() {

        //로컬 클래스
        class B {
            int field1 = 1;

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

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

        //로컬 객체 생성
        B b = new B();

        System.out.println(b.field1);
        b.method1();
    }
}

package ch09.sec04.exam02;

public class AExample {

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

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

    }

}

package ch09.sec04.exam03;

/*
 메소드내의 로컬 변수, 매개변수를 로컬 클래스에서 사용할 경우 로컬 변수및 매개 변수는 final특성을 갖게된다.
 로컬클래스에서 사용 안 할 경우에는 final 특성이 없다. Java7이하에서는 final키워드 사용해야 함.
 * 
 */

public class A { // A a = new A();  a.method1(10);

    public void method1(int arg) { // final int arg;
        //로컬 변수(지역 변수)
        int var = 1; //final int var = 1;

        //로컬 클래스
        class B {

            //메소드
            void method2() {
                System.out.println("arg: " + arg);
                System.out.println("var: " + var);
            }
        }

        B b = new B();
        b.method2();

        //로컬변수 또는 매개변수 값 수정불가.
//        arg = 3;
//        var = 3;
    }
}

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

익명 객체  (0) 2023.01.25
바깥 멤버 접근  (0) 2023.01.25
정적 멤버 클래스  (0) 2023.01.25
중첩, 인스턴스 멤버 클래스  (0) 2023.01.25