2008년 09월 29일
내부 클래스와 무명 클래스.
이번 글에서는 자바 AWT 이벤트 글에서 다뤘던 내부 클래스와 함께 무명 클래스에 대해서 이야기 해봅시다.
일단 내부 클래스에 대해서 이야기 하기 전에 소스 부터 보도록 합시다.
import java.awt.*; import java.awt.event.*; public class WinExit extends Frame{ public WinExit(){ super("프로그램 종료 이벤트"); this.setVisible(true);//화면에 보이도록 설정 this.setSize(400, 550);//창 크기 this.setLocation(200, 200);//창 배치 위치 this.setResizable(false);//사이즈 조정 불가능 설정.
}
new WinExit(); } // 윈도우 이벤트 클래스 class WinEvent implements WindowListener{ public void windowActivated(WindowEvent e){} public void windowClosed(WindowEvent e){} public void windowClosing(WindowEvent e){ System.exit(0);// X를 누르면 종료된다. } public void windowDeactivated(WindowEvent e){} public void windowDeiconified(WindowEvent e){} public void windowIconified(WindowEvent e){} public void windowOpened(WindowEvent e){} } } |
위에서 붉게 표시 된 부분이 내부 클래스입니다. 일반적으로 보기에는 소스에 클래스를 추가한 형태지만 저것은 메인 메소드와 같은 레벨이라 볼 수 있습니다. 이렇게 말하면 잘 이해가 안되므로 조금 풀어서 말하면 클래스 안는 생성자와 메소드(메인메소드도 포함)가 존재 하는데 내부 클래스는 말 그대로 생성자와 메소드와 같은 위치에 클래스가 존재하게 된다는 말입니다. 크게 어려울 것은 없다고 봅니다.
!!! 나머지 메소드 들은 모두 추상 메소드를 구현하기 위해서 써줘야 하는 것입니다. API 참고 하세요.
내부 클래스의 특징을 보면 컴파일을 하게 되면 WinExit, WinExit$WinEvent 클래스파일이 생성 됩니다. 첫번째 파일은 메인 클래스 파일이고 두번 째 파일은 $ 표시를 이용해 WinExit 안에 WinEvent 가 존재하고 있다는 것을 알 수 있게 하죠.
그리고 내부 클래스는 내부 클래스를 소유하고 있는 클래스(외부클래스)에서 생성자나 메소드에서 객체를 생성해서 사용이 가능하다는 특징을 갖습니다.(단! 메인메소드에서는 불가능합니다. 가능하게 하려면 static class 로 선언해야 하죠~)
그럼 내부 클래스는 다른 클래스에서 접근을 하지 못하는 것인가? 제가 갖고 있는 지식으로써는 일반적으로는 불가능 하다 라는게 답입니다. 물론 방법이야 있습니다. 가장 먼저 생각할 수 있는 방법은 상속이겠죠? 상속을 통해서는 다른 클래스에 존재하는 내부 클래스를 이용이 가능합니다. 그외에는 패키지나 import를 이용하는 방법이 있을 것 같기도 하지만 일단 오늘은 여기까지 알아두는 정도로 하는 것이 좋을 듯 합니다. 내부 클래스에 대해서 더 많은 내용이 필요 할 떄는 내부 클래스에 관한 글로 다시 쓰도록 하겠습니다.
그럼 다음으로 넘어가서 내부 클래스에 이름이 없는 특징을 갖는 내부 무명클래스에 대해서 알아봅시다.
이 역시 소스 부터 보고 들어갑시다.
import java.awt.*; import java.awt.event.*;
public WinExit(){ super("프로그램 종료 이벤트"); this.setVisible(true);//화면에 보이도록 설정 this.setSize(400, 550);//창 크기 this.setLocation(200, 200);//창 배치 위치 this.setResizable(false);//사이즈 조정 불가능 설정.
public void windowClosing(WindowEvent e){ System.exit(0); } public void windowActivated(WindowEvent e) {} public void windowClosed(WindowEvent e) {} public void windowDeactivated(WindowEvent e) {} public void windowDeiconified(WindowEvent e) {} public void windowIconified(WindowEvent e) {} public void windowOpened(WindowEvent e) {} });// 윈도우 이벤트 }
new WinExit(); } } |
무명 클래스라는 것은 자바를 배우면서 돌연변이 같아 보이기도 합니다. 생성자 뒤에 딱 붙어서 클래스 선언 없이 클래스 내에 내용들을 오버라이딩을 하기 때문입니다. 위에서 사용된 내부 클래스는 추상메소드 이므로 모두 구현해야 하기 때문에 내용이 많습니다. 보통 무명클래스는 좀 짬뽕 같은 느김이 듭니다. 여기서는 아직 다루지 않았는데 지역클래스 라는 것도 있는데 지역클래스와 무명클래스를 이용해서 한 클래스 안에 내부클래스와 로컬클래스에 무명클래스를 마음대로 써 넣어 쓸 수 있다는 것이 특징이죠.
느낌상 정말 변종 같습니다. 예습이다 보니 정보도 부족하고 이해가 덜 된 부분이 많아서 크게 알려드릴만한 정보가 없다는게 조금 아쉽습니다.
그리고 무명 클래스는 일종에 메소드 처럼 동작을 한다는 것을 알 수 있는데 한번만 실행 된다는게 특징입니다.
우에서는 닫기를 누르면 프로그램이 종료 되는 내용을 무명클래스로 이벤트를 처리해줬는데, 여기서 한번만 실행 된다는 이야기는 다른데서 무명 클래스를 못 가져가 쓴다는 뜻으로 해석이 됩니다.(접근 방법이 있는지는 더 공부해보면 알겠죠-_-;)
그리고 위에서 잠깐 언급을 했던 지역클래스 라는 것이 있습니다.
간단히 말하면 지역 클래스는 메소드 내에서 클래스를 만들어 버리는 겁니다.
내부 클래스와 비슷한 형태로 만드는 것이죠..특이한 점은 메소드가 클래스를 갖고 있다는 것이겠죠?
자 이렇게 이번글은 예습이다 보니 내용이 많이 부실한 듯 합니다.
다음 글에서 조금 더 발전 된 내용으로 다시 쓰도록 하죠.
이 글과 관련있는 글을 자동검색한 결과입니다 [?]
- 9월 22일 by 단쉐
- 9월 23일 by 꽉꽉
- 5월 27일 by 단쉐
- 3주차 두번째 일기 by selju
- 자바 AWT - Abstract Window Toolket. by 만성피로
# by | 2008/09/29 23:43 | 정리할 자료들 | 트랙백 | 덧글(1)





☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]