자바

자바 - 중첩 선언과 익명 객체

록's 2023. 1. 17. 12:07
728x90
반응형

중첩 클래스 

 

 

중첩 클래스

  • 클래스 내부에 선언한 클래스. 클래스의 멤버를 쉽게 사용할 수 있고 외부에는 중첩 관계 클래스를 감춤으로써 코드의 복잡성을 줄일 수 있음
  • 멤버 클래스 : 클래스의 멤버로서 선언되는 중첩 클래스
  • 로컬 클래스 : 메소드 내부에서 선언되는 중첩 클래스
선언 위치에 따른 분류 선언 위치 객체 생성 조건
멤버 클래스 인스턴스
멤버 클래스
Class A {
    class B { ... }
}
A 객체를 생성해야만
B 객체를 생성할 수 있음
정적
멤버 클래스
Class A {
   static class B { ... }
}
A 객체를 생성하지 않아도
B 객체를 생성할 수 있음
로컬클래스 Class A {
  void method() {
    class B { ... }
  }
}
method가 실행 할 때만
B 객체를 생성할 수 있음

 

 

 

 

인스턴스 멤버 클래스

 

 

인스턴스 멤버 클래스

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

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

 

 

 

정적 멤버 클래스

 

정적 멤버 클래스

  • static 키워드와 함께 A 클래스의 멤버로 선언된 B 클래스

  • 정적 멤버 클래스는 주로 default 또는 public 접근 제한을 가진다.

 

 

로컬 클래스

 

 

로컬 클래스

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

로컬 변수(생성자 또는 메소드의 매개변수 또는 내부에서 선언된 변수)를 로컬 클래스에서 사용할 경우 로컬 변수는 final 특성을 갖게 되므로 값을 읽을 수만 있고, 수정 할 수 없게 된다.
이것은 로컬 클래스 내부에서 값을 변경하지 못하도록 제한하기 때문이다.

 

 

 

 

바깥 멤버 접근

 

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

  • 정적 멤버 클래스 내부에서는 바깥 클래스의 필드와 메소드를 사용할 때 제한이 따름
  • 정적 멤버 클래스는 바깥 객체가 업어도 사용 가능해야 하므로 바깥 클래스의 인스턴스 필드와 인스턴스 메소드는 사용하지 못함
구분 바깥 클래스의 사용 가능한 멤버
인스턴스 멤버 클래스 바깥 클래스의 모든 필드와 메소드
정적 멤버 클래스 바깥 클래스의 정적 필드와 정적 메소드

바깥 클래스의 객체 접근

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

 

 

 

 

중첩 인터페이스

 

중첩 인터페이스

  • 해당 클래스와 긴밀한 관계를 맺는 구현 객체를 만들기 위해 클래스의 멤버로 선언된 인터페이스

  • 안드로이드와 같은 UI 프로그램에서 이벤트를 처리할 목적으로 많이 활용

 

 

 

익명 객체

 

익명 객체

  • 이름이 없는 객체. 명시적으로 클래스를 선언하지 않기 떄문에 쉽게 객체를 생성할 수 있음
  • 필드값, 로컬 변수값, 매개변수 값으로 주로 사용

익명 자식 객체

  • 부모 클래스를 상속 받아 생성되는 객체
  • 부모 타입의 필드, 로컬 변수, 매개변수의 값으로 대입할 수 있음

익명 구현 객체

  • 인터페이스를 구현해서 생성되는 객체
  • 인터페이스 타입의 필드, 로컬변수, 매개변수의 값으로 대입할 수 있음
new 부모생성자(매개값, ...) {
//필드
//메소드
}
  • 안드로이드와 같은 UI 프로그램에서 이벤트를 처리하는 객체로 많이 사용
new 인터페이스() {
// 필드
// 메소드
}

 

 

 

 

 

 

728x90
반응형

'자바' 카테고리의 다른 글

자바 - 예외 처리  (0) 2023.01.18
자바 - 라이브러리와 모듈  (0) 2023.01.17
자바 - 인터페이스  (0) 2023.01.16
자바 - 상속  (0) 2023.01.12
자바 - 클래스 - 02  (0) 2023.01.11