프로그래밍/JAVA

[Java] 중첩 선언과 익명 객체

daykim 2023. 10. 4. 08:56
이것이 자바다 도서 정리

목차

  • 중첩 클래스
  • 인스턴스 멤버 클래스
  • 정적 멤버 클래스
  • 로컬 클래스
  • 바깥 멤버 접근
  • 중첩 인터페이스
  • 익명 객체

 

중첩 클래스


  • 클래스가 여러 클래스와 관계를 맺는 경우엔 독립적으로 선언하는 좋다.
  • 그러나 특정 클래스만 관계를 맺을 경우, 중첩 클래스로 선언하는 것이 유지보수에 도움이 되는 경우가 많다.

 

중첩 클래스

클래스 내부에 선언한 클래스

  • 클래스 멤버를 쉽게 사용할 수 있다.
  • 외부엔 중첩 관계 클래스를 감추어, 코드의 복잡성을 줄일 수 있다.
  • 멤버 클래스 : 클래스의 멤버로서 선언되는 중첩 클래스
  • 로컬 클래스 : 메소드 내부에 선언되는 중첩 클래스

 

 

인스턴스 멤버 클래스


[public] class A {
    [public || private] class B{
    }
}
  • 위와 같이 클래스 A의 멤버로 선언된 B를 인스턴스 멤버 클래스라고 한다.
  • private class B{} : A 클래스 내부에서만 B 클래스를 사용할 수 있다.
  • 물론 A 객체가 있어야 B 객체도 생성할 수 있다. 즉, B를 A 내부 어디에서나 생성할 수 없다.

 

A a = new A();
A.B b = a.new B();
  • B 객체를 A 외부에 생성하기

 

 

정적 멤버 클래스


[public] class A {
    [public || private] static class B{
    }
}
  • 정적 멤버 클래스는 static 키워드와 함께 선언된 것이다.
  • B를 A의 어디에서나 생성할 수 있다.

 

A.B b = new A.B();
  • A 객체 생성 없이 A 클래스로 접근해 B 객체를 생성할 수 있다.

 

 

로컬 클래스


[public] class A {
    public A() {
        class B {}
    }
    
    public void method() {
        class B {}
    }
}
  • 생성자 또는 메서드 내부에 위와 같이 선언된 클래스
  • 로컬 클래스는 생성자와 메소드가 실행될 동안에만 객체를 생성할 수 있다.
  • 로컬 클래스 내부에는 필드, 생성자, 메소드 선언이 올 수 있다.

 

[public] class A {
    public void method1(int arg) {
        int aaa = 1;
        
        class B {
            // aaa = 2; (X)
            // arg = 4; (X)
        }
    }
    
    // aaa = 2; (X)
    // arg = 4; (X)
}
  • 로컬 변수를 로컬 클래스에서 사용할 경우, 값을 읽을수만 있고 수정할 수 없다.

 

 

바깥 멤버 접근


 

 

 

 

중첩 인터페이스

익명 객체

'프로그래밍 > JAVA' 카테고리의 다른 글

[Java] 인터페이스  (0) 2023.09.13
[Java] 상속  (0) 2023.09.12
[Java] Static  (0) 2023.06.30
[JAVA] 클래스  (0) 2023.01.14
[JAVA] 참조 타입  (2) 2022.11.08