1996년 3월 19일 첫 출판, 1998년 5월 31일 최종 갱신


앞 페이지 뒷 페이지 색인


애플릿 클래스

이제 실제 java.applet 패키지를 이용하여 애플릿 프로그래밍을 해보자. 먼저 애플릿의 주요 메소드들을 살펴보자.

자바 지원 브라우저와 애플릿 기본 메소드

현재 자바를 지원하는 브라우저는 넷스케이프 2.0 이후 버전과 마이크로소프트 인터넷 익스플로러 3.0 이후 버전, 그리고 JDK에 포함되어 있는 애플릿뷰어이다. 이들 브라우저와 자바 런타임 환경이 애플릿을 메모리에서 관리하는 방법은 대체로 다음과 같다. (각 브라우저에 따라 약간의 차이가 있을 수 있다.)

  1. 특정한 URL의 입력에 따라 HTML 문서가 요청된다.
  2. 브라우저는 HTML 문서를 읽어들여 <APPLET> 태그를 찾는다.
  3. <APPLET> 태그를 찾으면 브라우저는 애플릿 바이트코드 즉, 클래스 파일을 읽어들인다.
  4. 브라우저는 애플릿을 자바 런타임 인터프리터에 넘겨준다.
  5. 자바 인터프리터는 바이트코드의 보안 위반 여부를 검사한다. 바이트코드가 안전하다고 판단되면 런타임 시스템은 클래스를 메모리로 적재한다.
  6. 브라우저는 적재된 애플릿 클래스에 정의가 되어 있을 경우 해당 클래스의 init() 메소드를 실행한다. 이 메소드는 변수를 초기화하고 화폭 크기를 재조정하거나 필요한 다른 리소스들을 찾는 데 주로 사용된다.
  7. 브라우저는 HTML 문서를 번역하여 디스플레이 창에 보여주기 시작한다. 그 다음 브라우저는 정의가 되어 있을 경우 애플릿의 start() 메소드를 실행한다.
  8. 다음으로 브라우저는 휴식을 취하면서 기다린다.
  9. 사용자가 현재의 HTML 문서를 떠나면 브라우저는 정의가 되어 있을 경우 stop() 메소드를 실행한다. 이 메소드는 애플릿의 모든 활성화된 실행 쓰레드를 종료시킨다.
  10. stop()이 종료하면 브라우저는 destroy() 메소드를 부름으로써 런타임 시스템에 애플릿이 중지되었음을 알린다.
  11. 그러면 런타임 시스템은 메모리에서 애플릿을 제거한다. 이제 애플릿은 실행을 중지하고 메모리 공간을 반환한다.

애플릿의 실행에 필요한 기본 메소드는 위에서 나온 네 가지이다. 이들 메소드는 모두 java.applet 패키지의 Applet 클래스에 선언되어 있으며 반드시 오버라이드하여 재정의할 필요는 없다. 각 메소드의 주된 역할은 다음과 같다.

init() 메소드: 애플릿을 초기화한다. 애플릿이 처음 적재될 때, 한 번만 시스템에 의해서 자동으로 호출된다. 애플릿에 사용되는 여러 가지 초기화를 수행하기에 좋은 메소드이다.
start() 메소드 : 애플릿이 시작될 때 호출된다. 애플릿이 포함되어 있는 문서를 방문할 때 호출된다.
stop() 메소드 : 애플릿 실행을 중지시킬 때 호출한다. 브라우저 화면에 해당 문서가 없을 때 호출된다. 반드시 destroy() 호출 전에 불려진다.
destroy() 메소드 : 열려진 모든 리소스들을 청소한다. 그리고 쓰레드를 사용하는 애플릿은 이 메소드에서 쓰레드를 파괴해야 한다.

위의 메소드들은 모두 브라우저에 의해서 자동으로 호출된다. 애플릿의 다른 메소드에서 직접 호출할 필요가 없다.
넷스케이프와 같은 브라우저는 실행 효율을 위해 일단 적재된 애플릿은 다른 페이지로 이동해가더라도 stop() 메소드만 호출하고 destroy() 메소드는 호출하지 않고 있다가 Back 혹은 Forward 버튼에 의해 다시 애플릿이 있는 페이지로 이동하게 되면 init() 메소드 호출 없이 start() 메소드만 다시 호출하는 방식을 사용한다. 실제로는 애플릿에 init()과 start()를 혼돈해서 사용하고 stop()과 destroy()를 구별하지 않고 사용하는 경우가 종종 있는데 이러한 경우 애플릿이 초기화가 제대로 되지 않거나 오동작할 수 있다.

이럴 때 가장 좋은 방법은 실제 사용하게 될 브라우저들을 가지고 테스트를 해보는 것이다.

 

java.applet.Applet 클래스의 주요 메소드들

애플릿 클래스에는 위의 네 개의 메소드 외에도 애플릿 구현에 중요한 많은 메소드들을 제공한다. 애플릿 프로그래밍에 가장 빈번하게 사용되는 메소드들인 셈이다. 하나씩 살펴보자.

public URL getCodeBase() : 애플릿의 URL을 구한다. 이 메소드는 실제 적재된 애플릿 클래스 바이트코드의 기준 URL을 돌려준다.
public URL getDocumentBase() : <APPLET> 태그를 포함하고 있는 HTML 문서의 URL을 돌려준다.
public String getParameter(String name) : 문서에 지정되어 있는 애플릿의 변수 값을 돌려준다. 변수가 문서에 지정되어 있지 않으면 null을 돌려준다. 이 메소드는 사용자가 문서를 통하여 초기값을 지정할 수 있는 중요한 수단이다. 애플릿의 초기값을 코드 안에 하드 코딩하지 않고 HTML 문서에서 다양하게 지정할 수 있기 때문에 애플릿의 유연성을 높여준다.

예를 들어 http://java.freehosting.co.kr/~yoonforh/index.html 문서에 다음과 같은 <APPLET>태그가 포함되어 있다고 하자.

<APPLET CODEBASE="Blinking" CODE="Blink.class" WIDTH=320 HEIGHT=120> 
<PARAM NAME=lbl VALUE="반짝반짝">
<PARAM NAME=speed VALUE="4">
</APPLET>

<APPLET> 태그에서 반드시 필요한 것은 CODE, WIDTH, HEIGHT 필드이다. WIDTH, HEIGHT 필드는 <IMG> 태그에서처럼 애플릿이 브라우저에 표시될 때 폭과 높이를 지정하는 것이다. CODE는 애플릿에 해당하는 클래스 이름으로 확장자인 ".class"는 생략해도 무방하다. CODEBASE 필드는 애플릿이 문서와 다른 URL에 위치할 때 그 위치를 지정하기 위한 필드이다. 위의 예에서는 문서 파일이 위치하는 디렉토리의 서브 디렉토리인 Blinking 디렉토리에 Blinking.class 파일이 있음을 지정하고 있다.

이 예에서 getCodeBase()의 반환값은 "http://java.freehosting.co.kr/~yoonforh/Blinking/"이고 getDocumentBase()의 반환값은 "http://java.freehosting.co.kr/~yoonforh/index.html"이다.
getParameter("lbl")의 반환값은 <PARAM> 태그에서 지정한 대로 "반짝반짝"이 되고 마찬가지로 getParameter("speed")의 반환값은 "4"가 된다. 참고로 애플릿을 넘겨줄 변수 이름을 지정하는 NAME 값은 대소문자 구별을 하지 않지만 변수 값이 들어갈 VALUE 값은 대소문자 구별을 한다. 그리고 따옴표는 여타 HTML 태그에서 값을 지정하는 것과 마찬가지로 있어도 좋고 없어도 좋으나 값 가운데에 빈 칸이 들어갈 경우에는 반드시 따옴표를 사용해야 한다.

다음은 이미지 파일과 오디오 파일을 얻는 메소드들이다.

public Image getImage(URL url) : 절대 경로 URL로 이미지 파일을 얻는다.
public Image getImage(URL url, String name) : URL과 상대 경로를 지정한 문자열을 조합하여 구한 절대 경로 URL로 이미지 파일을 얻는다.
public AudioClip getAudioClip(URL url) : 절대 경로 URL로 오디오 파일을 얻는다.
public AudioClip getAudioClip(URL url, String name) : URL과 상대 경로를 지정한 문자열을 조합하여 구한 절대 경로 URL로 오디오 파일을 얻는다.
public void play(URL url) : 절대 경로 URL로 오디오 파일을 찾아 연주한다.
public void play(URL url, String name) : URL과 상대 경로를 지정한 문자열을 조합하여 구한 절대 경로 URL로 오디오 파일을 찾아 연주한다.

그 외 자주 사용되는 애플릿 메소드는 다음과 같다.

public void resize(int width, int height) : 애플릿의 크기를 재조정한다.
public void resize(Dimension d) : 애플릿의 크기를 재조정한다.
public void showStatus(String msg) : 브라우저의 상태 바에 메시지를 나타낸다.
public AppletContext getAppletContext() : 애플릿의 환경(주로 브라우저)에 관계되는 인터페이스인 애플릿 컨텍스트에 대한 핸들을 돌려준다. 애플릿 컨텍스트의 메소드인 public abstract void showDocument(URL url)를 사용하면 브라우저의 현재 화면에 지정된 URL이 표시되게 할 수 있다.

다음은 간단한 애플릿 예제 프로그램 소스 파일과 실행 결과이다. HTML 문서에서 변수를 입력받아서 변수에 해당하는 그림을 애플릿 윈도우에 출력하고 반복해서 오디오 파일을 연주한다.

AppletEx1.java

 

<AppletEx1.html>

<HTML><HEAD><TITLE> Applet Example 1 </TITLE></HEAD>
<BODY>
<APPLET CODE=AppletEx1 WIDTH=300 HEIGHT=300>
<PARAM NAME=image VALUE=yoonkg.gif> <! IMAGE 변수값을 yoonkg.gif로 지정>
<PARAM NAME=audio VALUE=hello.au> <! AUDIO 변수값을 hello.au로 지정>
</APPLET>
</BODY></HTML>


오디오 파일을 실행하는 데 사용되는 AudioClip의 메소드는 모두 세 가지뿐이다.

public abstract void play() : 오디오 파일을 연주한다.
public abstract void loop() : 오디오 파일을 반복해서 연주한다.
public abstract void stop() : 오디오 파일 연주를 중단한다.

위 예제에서는 loop()와 stop()이 사용되었다.    


앞 페이지 뒷 페이지 색인