개발저장소
[Java] 이너 클래스와 이너 인터페이스 본문
1. 이너 클래스
클래스 내부에 포함되는 클래스
- 인스턴스 이너 클래스
- 정적 이너 클래스
- 지역 이너 클래스 (메서드 내부에서 정의)
인스턴스 이너 클래스는 아우터 클래스의 모든 필드와 메서드에 접근 가능하다.
A 클래스 내에 B 이너 클래스가 존재한다면, A a = new A(), A.B b = a.new B()와 같이 아우터 클래스를 선언해야 사용할 수 있다. 마찬가지로 A.this.필드명 같은 방법으로 참조 가능하다.
정적 이너 클래스도 마찬가지로 static의 속성에 맞게 사용 가능하다. 정적 이너 클래스는 아우터 클래스의 정적 필드와 메서드만 사용 가능하다.
지역 이너 클래스
메서드 내에서 정의된 클래스이다. 지역 변수처럼 메서드 내부에서만 사용할 수 있으므로, 지역 이너 클래스는 선언 후 바로 객체를 생성해 사용하고, 메서드가 호출될 때만 메모리에 로딩된다. 지역 이너 클래스에서 사용되는 지연 변수는 반드시 final로 선언되어야 한다.
2. 익명 이너 클래스
말 그대로 이름을 알 수 없는 이너 클래스이다. (anonymous)
interface C {
public abstrat void bcd();
]
class A {
C b = new C() {
public void bcd() {
// 바로 사용할 수 있다
}
};
void abc() {}
}
C 타입의 생성자를 호출하고 중괄호 안에 인터페이스의 추상 메서드 bcd()를 구현하였다.
인터페이스 C를 상속 받아 추상 메서드를 구현한 클래스를 내부적으로 생성한 후, 해당 클래스로 인스턴스를 생성해 참조 변수에 대입한다. 이것이 익명의 이너 클래스이다.
익명 이너 클래스는 항상 부모 타입으로만 선언할 수 있다.
3. 이너 인터페이스
이너 인터페이스는 클래스 내부에 인터페이스를 정의하는 것이다. 단, 정적 이너 인터페이스만 가능하다.
일반적으로 사용자 인터페이스의 이벤트 처리에 가장 많이 사용되며 보통 '리스너'라고 한다.
그리고 마찬가지로 두가지 방법으로 활용할 수 있다.
- 인터페이스 구현 클래스 생성 및 인터페이스 생성
- 익명 이너 클래스 사용
사용자 인터페이스에서 이벤트 처리 기능이 이너 인터페이스로 구현되어 있다.
class Button {
OnClickListener ocl;
void setOnClickListener(OnClickListener ocl) {
this.ocl = ocl;
{
interface OnClickListener {
public abstract void onClick();
}
void click() {
ocl.onClick();
}
}
내부에 onClickListener라는 이너 인터페이스가 정의되어 있고, ocl은 이 인터페이스 타입이다. setOnClickListener() 메서드는 이 인터페이스 객체를 입력 매개변수로 넘겨받아 필드를 초기화하는 기능을 수행한다.
Button 기능은 내부에서 정해지는 것이 아니라 외부에서 정해 입력받는 것이다. 같은 클릭이라도 다른 기능을 수행하는 것이다.
'Programming Language > Java' 카테고리의 다른 글
[Java] 스레드 - 1 (0) | 2024.05.13 |
---|---|
[Java] 예외 처리 (0) | 2024.05.10 |
[Java] 추상 클래스와 인터페이스 (0) | 2024.05.08 |
[Java] 상속 (0) | 2024.05.03 |
[Java] 클래스 - 2 (0) | 2024.04.30 |