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 |