programming/java

[Java] 내부 클래스


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가지 요소가 필요한데,

이벤트소스: 이벤트의 대상(이벤트가 일어나는 장소라고 해야 할까요)

이벤트리스너: 이벤트 관찰자, 감시자

이벤트핸들러: 이벤트 처리기


이벤트소스.이벤트리스너(이벤트핸들러)

'''