1. 내부 클래스
내부 클래스란?
클래스 내에 선언되어 있는 클래스를 의미한다.
외부 클래스와 내부 클래스 간의 밀접한 관계가 있을 때 주로 사용한다.
public class Outer {
class Inner {
....
}
}
1.1. 내부 클래스의 장점
- 내부 클래스에서 외부 클래스의 멤버들을 쉽게 접근 할수 있다.
- 서로 관련 있는 클래스를 묶어서 표현함으로써 코드의 캡슐를 증가시킨다.
- 외부에서 내부 클래스를 접근할 수 없음으로 코드의 복잡성을 줄일 수 있다.
2. 내부 클래스의 종류와 특징
2.1. 정적 클래스 (static class)
static 키워드를 분인 클래스로 멤버 변수 위치에 선언되며 static 멤버처럼 다루어 진다. 조로 static 메서드에서 사용한다.
2.2. 인스턴스 클래스 (instance class)
static 키워드를 붙이지 않은 클래스로 멤버 변수 위치에 선언되며 인스턴스 멤버들과 관련된 작업을 진행할 때 사용한다.
2.3. 지역 클래스 (local calss)
메서드나 초기화 블럭에서 선언된다. 지역 클래스는 선언된 블록 안에서만 사용된다.
2.4. 익명 클래스 (anonymous class)
클래스 선언과 객체의 생성을 동시에 하는 단 하나의 객체만을 생성하는 일회성 이름 없는 클래스이다. 일회성이다 보니 생성자를 구현할 수 없으며, 단 하나의 클래스, 단 하나의 인터페이스를 상속받거나 구현할 수 있을 뿐인다.
익명 클래스는 매우 제한적인 용도로 사용되며, 구현해야 하는 메서드가 적거나 변수가 적을 때 사용한다.
* 익명 클래스 컴파일 시 파일 명
- Outer.class
- Outer$1.class
- Outer$2.class
public interface Able {}
public class Parent {}
public class Outer {
public Able a = new Able() {
public int a;
}
public Parent a = new Parent() {
public int a;
}
}
3. 내부 클래스의 선언
public class Outer {
class InstanceInner {} // instance 클래스
static class StaticInner {} // static 클래스
void method() {
class LocalInner {} // local 클래스
}
}
4. 내부 클래스의 제어자와 접근성
- final, abstract, private, protected와 같은 제어자 사용 가능하다.
- instance, local 내부 클래스에서는 static 키워드를 사용할 수 없다.
- 모든 내부 클래스에서 final static 키워드를 사용할 수 있다.
- static 내부 클래스에서만 static을 사용할 수 있다.
- static과 instance의 효과를 그대로 사용한다.
- static은 instance 사용 불가
- instance는 static 사용 가능 - 인스턴스 내부 클래스를 생성하려면 외부 클래스의 인스턴스부터 생성해야 한다.
* final은 상수이기 때문에 어떤 경우라도 static이 붙는 게 가능하다.
Outer oc = new Outer();
oc.new InstanceInner(); // Outer 클래스 생성 후 InstanceInner 클래스 생성
* 컴파일 시 생성되는 파일 명
- Outer.class
- Outer$InstanceInner.class
- Outer$StaticInner.class
- Outer$1LocalInnter.class
- Outer$2LocalInner.class
'개발 언어 > Java' 카테고리의 다른 글
[Java] Enum to Class (0) | 2021.09.07 |
---|---|
[Java] 예외 처리 (0) | 2021.08.27 |
[Java] 인터페이스 (0) | 2021.08.27 |
[Java] 추상 클래스&추상 메서드 (0) | 2021.08.26 |
[Java] 다형성 (0) | 2021.08.25 |