12. 내부 클래스
가. 내부(중첩) 클래스(inner class, nested class)
'웹 개발자들은 내부 클래스를 쓸 일이 거의 없지만, 안드로이드 프로그래밍은 자주 사용하고, 윈도우즈 프로그래밍도 종종 사용합니다.
'''
자바는 decompile이 가능합니다.
compile: source → object code(기계어)
decompile: object code → source
(= disassemble)
ex. A.java → A.class (x)
A.class → A.java (o)
내부 클래스를 쓰면 좀 숨겨집니다.
'''
1) 내부 클래스의 정의
클래스 안에 선언된 클래스
특정 클래스 내에서만 주로 사용되는 클래스를 내부 클래스로 선언한다.
GUI 애플리케이션(AWT, Swing)의 이벤트 처리에 주로 사용됨
내부 클래스도 클래스이기 때문에 외부클래스$내부클래스.class로 컴파일됨
2) 장점
내부 클래스에서 외부 클래스의 멤버들을 쉽게 접근할 수 있다.
코드의 복잡성을 줄일 수 있다.
3) 단점
코드의 재사용이 어려움
내부(중첩) 클래스(inner class, nested class)
(image)
나. 무명 내부 클래스(anonymous inner class)
1) 이벤트 처리 등 1회성으로 사용하는 간단한 코드에 자주 사용
e.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
2) 클래스의 종류
가) 이름이 있는 클래스 - 재사용이 가능함
class 클래스이름 {
}
나) 이름이 없는 클래스 - 재사용을 할 수 없음
이름이 없는 일회용 클래스.
new 클래스이름() { }
new 인터페이스이름() { }
3) 무명 내부 클래스는 이름이 없기 때문에 외부클래스$번호.class로 컴파일됨
외부클래스.class
외부클래스$번호.class
interface Cookable {
public void cook();
}
class Food {
// Implementation of the Interface
Cookable p = new Cookable() {
public void cook() {
System.out.println("Cook implementer");
}
};
}
다. 실습문제
1) InnerClass.java 01;54;21
2) StaticInner.java 01;58;50
3) InnerFinal.java 02;02;19
4) Flyer.java 02;12;53
5) InnerUse.java
'이벤트 처리란 사용자의 요청(request)에 시스템이 응답(response)하는 것을 말합니다.
이벤트 처리를 하기 위해서는 3가지 요소가 필요한데,
이벤트소스: 이벤트의 대상(이벤트가 일어나는 장소라고 해야 할까요)
이벤트리스너: 이벤트 관찰자, 감시자
이벤트핸들러: 이벤트 처리기
이벤트소스.이벤트리스너(이벤트핸들러)
'''