디폴트 메서드
내부 클래스
클래스 안의 클래스
내부 클래스의 장점
- 내부 클래스에서 외부 클래스의 멤버들에 쉽게 접근 가능
- 코드의 복잡성 감소 (캡슐화)
내부 클래스의 종류와 특징
- 내부 클래스의 종류와 유효범위는 변수와 동일
내부 클래스 | 특징 |
인스턴스 클래스 | 외부 클래스의 멤버변수 선언위치에 선언하며, 외부 클래스의 인스턴스 멤버처럼 다루어짐. 주로 외부클래스의 인스턴스 멤버들과 관련된 작업에 사용될 목적으로 선언 |
스태틱 클래스 | 외부 클래스의 멤버변수 선언위치에 선언하며, 외부 클래스의 static 멤버처럼 다루어짐. 주로 외부 클래스의 static 멤버, 특히 static 메서드에서 사용될 목적으로 선언 |
지역 클래스 | 외부 클래스의 메서드나 초기화 블럭 안에 선언하며, 선언된 영역 내부에서만 사용 가능 |
익명 클래스 | 클래스의 선언과 객체의 생성을 동시에 하는 이름없는 클래스 (일회용) |
내부 클래스의 제어자와 접근성
- 내부 클래스의 제어자는 변수에 사용 가능한 제어자와 동일
원래 class는 (default) / public 두가지만 사용 가능하지만 내부 클래스는 private / protected / (default) / public 4가지 모두 사용 가능
< 예제 1 >
static 내부 클래스에서는 외부 클래스의 인스턴스 멤버에 접근 X
< 예제 2 >
< 예제 3 >
인스턴스 내부 클래스 : 외부 클래스의 private 멤버도 접근 가능 (같은 클래스니까)
스태틱 내부 클래스 : 외부 클래스의 인스턴스 멤버에 접근 X
지역 내부 클래스 : 지역 내부 클래스를 감싸고 있는 메서드의 상수만 사용 가능
* 외부 클래스의 지역변수는 final이 붙은 변수(=상수)만 가능했으나 JDK1.8부터 final이 없어도 변수인데 값이 안바뀐다면 상수로 간주하여 가능
< 예제 4 >
- 객체 생성할 때
인스턴스 내부 클래스 : 외부 클래스의 객체를 먼저 생성 ➔ 인스턴스 내부 클래스의 생성
스태틱 내부 클래스 : 외부 클래스 객체 생성 필요 X + (앞에 외부 클래스 이름 붙여주기)
- 상수 접근할 때
인스턴스 내부 클래스 : 외부 클래스 객체 생성 ➔ 내부 클래스 객체 생성 ➔ 사용
스태틱 내부 클래스 : 외부 클래스 객체 생성 X ➔ 내부 클래스 객체 생성 ➔ 사용
< 예제 5 >
지역 변수 lv : ~
내부 클래스 iv : this.~
외부 클래스 iv : 외부클래스이름.this.~
익명 클래스 (anonymous class)
이름이 없는 일회용 클래스
- 정의와 생성을 동시에
new 조상클래스이름 ( ) {
// 멤버 선언
}
또는
new 구현인터페이스이름 ( ) {
// 멤버 선언
}
< 예제 1 >
< 예제 2 >
'JAVA > 자바의 정석' 카테고리의 다른 글
[자바의 정석 - 기초편] 8. (2) 예외 발생시키기 / checked예외 / unchecked예외 / 사용자 정의 예외 / 예외 되던지기 / 연결된 예외 (0) | 2023.12.02 |
---|---|
[자바의 정석 - 기초편] 8. (1) 프로그램 오류 / 예외 처리 / Exception과 자손 / RunTimeException과 자손 / 멀티 catch블럭 (0) | 2023.12.02 |
[자바의 정석 - 기초편] 7. (11) 인터페이스 장점 (0) | 2023.12.01 |
[자바의 정석 - 기초편] 7. (10) 인터페이스 ( 선언 / 상속 / 구현 / 다형성 ) (0) | 2023.12.01 |
[자바의정석 - 기초편] 7. (9) 추상 클래스 / 추상 메서드 / 디폴트 메서드 (0) | 2023.12.01 |