중첩 클래스 

클래스 내부에 선언한 클래스, 사용하면 두 클래스의 멤버에 쉽게 접근 할 수 있고, 외부에 불필요한 관계 클래스 감춤으로써 코드의 복잡성 줄일 수 있음 
ex) class a {  class b {  }} class a{ interface i { }}

 

- 멤버 클래스 : 클래스의 멤버로서 선언되는 중첩 클래스 
ex) class a { class b{ }}  - 인스턴스 멤버 클래스 : a 객체 생성해야만 사용할 수 있는 b 중첩 클래스 
class a{   static class b {  }}  - 정적 멤버 클래스 : a 클래스로 바로 접근 할 수 있는 b 중첩 클래스

 

- 로컬 클래스 : 메소드내부에 선언되는 중첩 클래스

ex) class a{ void method(){ class b{ }}} : method()가 실행할 때만 사용할 수 있는 b 중첩 클래스

 

 




1. 인스턴스 멤버 클래스 

static 키워드 없이 선언된 클래스. 인스턴스 필드와 메소드만 선언 가능하고 정적 필드와 메소드는 선언 불가 
ex) A a = new A(); A.B b = a.new B();

2. 정적 멤버 클래스 

static 키워드로 선언된 클래스. 모든 종류의 필드와 메소드 선언 가능 
ex) A.c c = new A.C();

3. 로컬 클래스

중첩 클래스는 메소드 내에서도 선언 가능. 접근 지정자 + static 붙일 수 없음 -> 메소드 내부에서만 사용되므로 접근 제한 할 필요 없음 
ex) void method(){ class D{...} D d = new D();} -> 메소드 실행 될 때, 메소드 내에서 객체 생성 후 사용

 


 

- 중첩 인터페이스 

클래스 멤버로 선언된 인터페이스 -> why? 해당 클래스와 긴밀한 관계를 맺는 구현 클래스를 만들기 위해서, 특히 UI 이벤트 처리 위해 
 ex) class a{ interface B {...}}

 

- 익명 객체

이름 없는 객체, 단독으로 생성 불가, 클래스 상속하거나 인터페이스를 구현해야만 상속 가능. 
필드 초기값이나 로컬 변수의 초기값, 매개 변수의 매개값으로 주로 대입 -> UI 이벤트 처리 객체나 스레드 객체를 간편하게 생성할 목적으로 활용 
  ex) class A { Parent p = new Parent(){  ... // 필드 선언}} 

-> 익명 자식 객체 내부에서만 사용되고 외부에서 접근 불가 why? 익명 자식 객체는 부모 타입 변수에 대입되므로 부모 타입에 선언된 것만 사용할 수 있기 때문

 

- 익명 구현 객체 생성

구현 클래스 재사용 되지 않고 오로지 해당 필드와 변수의 초기값으로 사용 하는 경우 익명 구현 객체를 초기값으로 대입하는 것이 좋다 
       ex) 인터페이스 [필드|변수] = new 인터페이스(){  //인터페이스에 선언된 추상 메소드와 실체 메소드 선언;  }

 

 

-<이것이 자바다1>. 한빛미디어 

'JAVA' 카테고리의 다른 글

예외 처리  (0) 2019.06.18
중첩 클래스 예제  (0) 2019.06.18
인터페이스 예제  (0) 2019.06.18
인터페이스_2  (0) 2019.06.18
인터페이스_1  (0) 2019.06.18

+ Recent posts