자바 내부클래스
JAVA Inner class
일단 내부 클래스를 정리하기 앞서 부족한 점이 있으면 알려주세요~
자 그럼 Start~
일단 내부클래스 모양부터 한번 살짝 보자고요~
// 내부 클래스에서 외부 클래스 변수를 사용
// class 안에 class 가 있죠~ 요래서 내부 외부 클래스~ ㅎ
class MyOuterClass {
private int x; // 외부 클래스의 인스턴스 변수 x
class MyInnerClass {
void go() {
x = 7; // x 를 내부 클래스의 변수처럼 사용
}
} // 내부 클래스 끝
} // 외부 클래스 끝
Instance (인스턴스) - 일반적으로 어떤 집합에 대해서, 그 집합의 개별적인 요소. - naver
내부클래스는 위에서 노는것 처럼 외부의 인스턴스를 내부에서 가져다 쓰는군요~ 좋다~ ㅎ
그렇다면 외부에서 내부 클래스의 인스턴스를 가지고 놀려면??
class MyOuterClass {
private int x;
// 내부 클래스의 인스턴스를 만듭니다.
MyInnerClass inner = new MyInnerClass();
public void check() {
// 외부 클래스의 check 호출시 x 값 출력
System.out.printf(" I'm Outer Class :D and x = %d ", x);
inner.print(); // 내부 클래스의 메소드를 호출!!
}
class MyInnerClass {
void print() {
x = 10; // x 를 내부 클래스의 변수처럼 사용
// 내부 클래스의 print 호출시 x 값 출력
System.out.printf(" I'm Inner Class :D and x = %d ", x);
}
} // 내부 클래스 끝
public static void main(String args[]) {
MyOuterClass outcl = new MyOuterClass();
outcl.check();
}
} // 외부 클래스 끝
결과값 :
I'm Outer Class :D and x = 0
I'm Inner Class :D and x = 10
위의 소스를 작성하다보니 느낀점이 한가지 작업에 대한 다양한 기능을 부여 할 때 편하겠다라는 생각이 드네요~
내부 클래스는 이벤트 처리에서 특히 내부 클래스의 개념이 많이 사용되는것을 알 수 있었습니다.
내부 클래스 특징
1. 반드시 인스턴스를 생성해야한다.
2. 내부 맴버 클래스는 외부 클래스의 맴버 변수와 메서드에 접근이 가능하다.
3. 외부 클래스의 인스턴스가 먼저 생성되어야 한다.
일반적으로 자바 클래스에서 한 메소드를 2번 이상 구현 할 수 없습니다... ok?
그런데 내부 클래스를 사용하여 여러 번 구현 할 수 있죠~!
그런데 왜 쓰는거지?
예로 이벤트 핸들러를 생각해보면, 버튼 세개가 있는데 각각 서로 다른 기능을 구현하기 위해서 ActionListener를 구현하는 내부 클래스 세개를 만들면 각 클래스마다 다른 기능이 구현 가능합니다.
Dog 면서 동시에 Button 일 수는 없다. A는 B다 성립이 안됨.
하지만 Dog 객체가 때때로 Button 역할을 해야 한다면 ??
Dog 클래스에 Button 클래스를 확장해서 Dog 대신 Button 역할을 하는 내부 클래스를 집어 넣으면 된다.
그리고 Button 이 필요할 때마다 Dog 에서는 그 내부 객체인 Button 객체를 대신 보내면 된다.
x.takeButton(this) 대신 Dog 객체에서 x.takeButton(new MyInnweButton()) 와 같은 방식으로 하면 된다.
-HeadFirst