반응형
남궁성님의 자바의 정석 기초편을 보면서 혼자 공부하는 공간입니다. 참고 부탁드립니다.
내부 클래스 (inner class)
- 클래스 안의 클래스
class A { // 외부 클래스
class B { // 내부 클래스
...
}
}
내부클래스의 장점
- 내부 클래스에서 외부 클래스의 멤버들을 쉽게 접근할 수 있다.
- 코드의 복잡성을 줄일 수 있다. (캡슐화)
- 내부 클래스의 종류와 유효범위(scope)는 변수와 동일
class Outer {
int v = 0 ;
static int cv = 0;
void myMethod() {
int lv = 0;
}
}
class Outer {
class InstanceInner {}
static class StaticInner {}
void myMethod() {
class LocalInner{}
}
}
내부 클래스 | 특징 |
인스턴스 내부 클래스 | 외부 클래스의 멤버변수 선언위치에 선언하며, 외부 클래스의 인스턴스 멤버처럼 다루어진다. 주로 외부 클래스의 인스턴스멤버들과 관련된 작업에 사용될 목적으로 선언 |
스태틱 내부 클래스 | 외부 클래스의 멤버변수 선언위치에 선언하며, 외부 클래스의 static 멤버처럼 다루어진다. 주로 외부 클래스의 static멤버, 특히 static메서드에서 사용될 목적으로 선언 |
지역 내부 클래스 | 외부 클래스의 메서드나 초기화 블럭 안에 선언하며 선언된 영역 내부에서만 사용될 수 있다. |
익명 클래스 | 클래스의 선언과 객체의 생성을 동시에 하는 이름없는 클래스 (일회용) |
내부 클래스의 제어자와 접근성
- 내부클래스의 제어자는 변수에 사용 가능한 제어자와 동일
( 클래스 앞에는 default, public만 가능 / 내부클래스 앞에는 default, public, private, protected 가능)
익명 클래스 (anoymous class)
- 이름이 없는 일회용 클래스. 정의와 생성을 동시에
new 조상클래스이름() {
// 멤버선언
}
new 구현인터페이싀름() {
// 멤버선언
}
익명 클래스 사용 예제
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
import java.awt.Button;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
class Ex7_18 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Button b = new Button("Start");
b.addActionListener(new EventHandler());
}
}
class EventHandler implements ActionListener{
public void actionPerformed(ActionEvent e) {
System.out.println("ActionEvent occurred!!!");
}
}
|
cs |
위의 내용을 아래처럼 익명클래스로 바꿀 수 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
import java.awt.Button;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
class Ex7_18_2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Button b = new Button("Start");
b.addActionListener(new ActionListener() {
// 클래스의 정의와 객체 생성을 동시에
public void actionPerformed(ActionEvent e) {
System.out.println("ActionEvent occurred!!!");
}
});
}
}
|
cs |
반응형
댓글