Java Programming Environment

김 영일
대전 광역시 유성구 궁동 373-1
한국과학기술원 전산학과
E-mail: cutty@monami.kaist.ac.kr
URL : http://elf.kaist.ac.kr/~cutty

Abstract:
본 내용은 2nd WWW Workshop의 Technical Session의 Java에 관련된 HTML 화일입니다.
Keywords:
WWW, Java, HotJava, Workshop

  1. Java programming environment의 구조
    • 1.1 Java의 architecture와 개념
    • 1.2 Dynamic features of Java
    • 1.3 HotJava란 무엇인가?
    • 1.4 HotJava와 WWW
    • 1.5 Java application vs Applet
  2. Programming Applet
    • 2.1 Including an Applet into your page
    • 2.2 Class Applet
    • 2.3 Simple Applet Codes
  3. JDK
    • 3.1 JDK란 무엇인가?
    • 3.2 JDK에서 달라진 점들
    • 3.3 AppletViewer
    • 3.4 debugger
  4. Reference Pages

1. Java programming environment의 구조

Java란 Sun Microsystems에서 개발한 network based programming environment입니다. 현재 1.0 alpha-3 version에서 막 1.0 pre-beta version이 release되었습니다.
HotJava란 Java로 짜여진 일종의 WWW browser으로 Java Applet이라는 Dynamic Content를 web page상에서 실행시킬 수 있는 특징을 가지고 있습니다.

1.1 Java의 architecture와 개념

Java Programming Environment는 Java라는 프로그래밍 언어를 사용하여 프로그램을 작성하는데 제공되어지는 tool들을 말합니다.

Java는 개략적으로 다음과 같은 architecture를 지니고 있어서 다음에 설명할 여러가지 특징들을 지니게 되고 이러한 특징들은 변화하고 있는 Networked Environment에서 Java가 조명을 받을 수 밖에 없는 이유가 됩니다.

그림 1. Java archietecture

Java는 Network이라는 환경을 염두에 두고 다음과 같은 특징을 가지도록 디자인된 언어입니다.

Simple

Object-Oriented

Distributed

Interpreted

Architecture Neutral

MultiThreaded

Dynamic

Robust, Secure, Portable, High-Performance

1.2 Dynamic features of Java

Java의 dynamic한 성격은 다음과 같은 일을 가능하게 합니다.

Java로 작성된 프로그램은 distributed environment에서 server로부터 library에서 program의 executable code까지의 다양한 object들을 access할 수 있습니다. 또한 program에서 참조되는 모든 object들은 memory address가 아닌, symbolic handle을 사용해서 참조되므로, dynamic run-time buding이 지원된다.

1.3 HotJava란 무엇인가?

HotJava는 Java로 짜여진 Web browser입니다. Java는 HTML 외에 Java로 만들어진 Applet을 실행할 수 있습니다. Java Applet은 사운드와 애니메이션과 같은 Dynamic Content를 포함하는 생동감 있는 web page를 구성할 수 있게 하여줍니다. Java의 dynamic한 feature는 network을 통해서 어떤 object라도 access할 수 있게 해주므로 상당히 유연한 program을 작성할 수 있습니다.

그림 2. java 의 dynamic loading

위의 그림은 HotJava가 web을 browsing하는 도중에 처리할 수 없는 Object를 만났을 경우 어떻게 이를 처리하는 가를 보여주고 있습니다. 만일 server가 이 object를 처리할 수 있는 routine의 위치를 알고 있다면, HotJava는 그 resource를 access해서 그 object를 runtime에 handling할 수 있습니다. 그러나 다른 browser의 경우에는 그 object를 처리할 수 있는 routine을 작성한 다음 다시 compile하여야 하므로 이런 hard-coded 환경보다 훨씬 유연하게 확장이 가능한 것을 알 수 있습니다.
그리고 앞으로는 program의 install의 개념도 상당히 많이 달라지게 될 것입니다. Java를 기반으로 한다면, 기본적으로 compatibility의 문제가 사라지게 되고, 사용자는 단지 web page를 browsing하는 것으로 install 없이 프로그램을 사용할 수 있게 되는 것입니다.

1.4 HotJava가 WWW 상에서 가지는 강점

정적인 web page에 생동감 넘치는 애니메이션과 사운드를 곁들일 수 있으며, Dynamic feature는 변화하는 환경에 유연하게 적응해 나가는 HotJava의 강점을 보여줍니다.


그림 3. http://www.sun.com

위의 그림은 Sun Microsystems의 web page의 모습입니다. 만일 HotJava가 install되어 있다면, http://www.sun.com을 방문해 보십시오. 그러면 얼마나 다양한 interactivity를 Java가 제공하는지 알 수 있을 것입니다.

1.5 Java application과 Applet

Java를 이용하면 두가지 부류의 응용프로그램을 작성할 수 있는데 이들이 바로 Java application과 Java Applet입니다.

1.5.1 Java Application

Java Application은 Java로 짜여진 응용프로그램이며, Java runtime System이 있는 어떤 platform에서도 실행될 수 있습니다. 기본적으로 network에 분산되어 있는 여러가지 다양한 자원을 access할 수 있으며 심지어, remote host에 있는 library 까지 access하여 사용할 수 있습니다.

1.5.2 Java Applet

Java Applet은 web page에 include 된 Java 응용프로그램을 말합니다.

2. Programming Applet

Applet을 web-page에 include 하는 방법과 프로그램에 대한 parameter 처리를 설명하고, Applet class에 관한 설명과 이를 응용한 간단한 Applet program의 source code를 예로 들어 설명합니다.

2.1 Including an Applet into your page

web page에 Applet을 집어넣는 일은 IMG 를 집어 넣는 것과 기본적으로 같습니다. 그런데 alpha-3 release와 pre-beta release에서 차이가 있습니다. 실은 pre-beta release가 나오면서 SGML을 따르도록 하기 위해서 App tag는 Applet tag로 바뀌었습니다.
Applet tag에서 달라진 점 두가지는 다음과 같습니다.
alpha-3 release pre-beta release
형식 < APP SRC="path" CLASS="classname" AppletAttribute=... > < APPLET CODEBASE="path/classes" CODE="classname.class"> < PARAM NAME=attr-name VALUE=attr-value>...< /APPLET>
예 < APP CLASS="myclass" width=200 height=100 > < APPLET CODEBASE="classes" CODE="myclass.class" width=200 height=100> < BLOCKQUOTE> < hr> it can be seen in a java enabled browser only. < hr> < /BLOCKQUOTE> < /APPLET>

alpha-3 release에 해당하는 applet을 page에 포함시키는 방법은 다음 을 참고하십시오.

2.2 Class Applet

앞서 언급한 바와 같이, filename.java라는 Java 프로그램을 컴파일하면 filename.java 안에서 정의된 class들에 해당하는 classname1.class, classname2.class...의 Bytecode가 생성되며 이 class를 web page에 Applet tag를 사용하여 포함할 수 있습니다.

Java Applet은 Class Applet 의 subclass로서 구현됩니다. 현재 HotJava에서 실행가능한 Java API(alpha-3 release)와 JDK(pre-beta release)에서 제안된 API에는 약간의 차이가 있지만, 일단은 alpha-3 release에 대해 설명하겠습니다.

기본적으로 Applet class는 다음의 중요한 method(주석: C++의 member function)를 가지고 있습니다.

init()

start()

paint()

stop()

destroy()

그리고 Applet의 subclass로 구현된 class(실제의 프로그램)에서 method가 불려지는 순서는 다음과 같습니다.

  1. 맨처음에는 Applet subclass의 constructor와 class의 static statement가 실행됩니다.
  2. init() 이 실행되면서 Applet에 필요한 여러가지 resouce를 초기화시킵니다.
  3. applet의 program이 시작되면서 start()가 실행됩니다.
  4. applet이 expose되는 경우 repaint()가 자동으로 실행되면서 paint()가 실행됩니다. 단 paint()는 프로그램에서 직접 부를 수는 없고 repaint()를 통해 호출합니다.
  5. applet page를 떠나는 경우 stop()이 실행됩니다.
Class Applet 에 관한 API manual link를 참조하십시오.

2.3 Simple Applet Codes

간단한 Applet code를 예로 들어 설명하고 이 Java code를 compile하는 법에 대해 설명하겠습니다. Java로 짜여진 프로그램은 javac으로 compile합니다. 단 Java source code는 *.java로 끝나야 합니다. 그리고 source code 내에 정의된 class별로 classname.class의 file이 생성됩니다. 이 생성된 *.class file은 Bytecode 형식으로 되어있고, browsing하는 사용자의 Java runtime system의 interpreter애서 실행되게 됩니다. compile 방법은 다음과 같습니다.

 javac [-options] filename.java 
HotJava는 특별히 지정하지 않는 한, Applet을 포함하고 있는 page가 있는 path에서 path/classes이라는 directory에서 appletname.class를 찾습니다.(실은 Java가 install되어 있는 system directory에서 같은 이름의 class file을 먼저 찾고나서 현재 base directory의 subdirectory로서 classes를 찾습니다.) 이제 간단한 HelloWorld.java라는 source code를 살펴보면,

    import browser.Applet;    
    import awt.Graphics; 
    class HelloWorld extends Applet {
        public void init() {
	    resize(150, 25);
        }
        public void paint(Graphics g) {
	    g.drawString("Hello world!", 50, 25);
        }
    }

이 프로그램은 applet page에 "Hellow World!"라는 string을 찍습니다.

2.4 Syntax

프로그램의 구조를 보면,
package 선언부분
import pkg는 Java가 지원하는 library package를 import하는 부분입니다. Java에서는 library를 class hierachy에 따라 하나하나의 class에서 전체 Java system library를 다 import하여 사용할 수 있습니다.
class 선언부분
여기서는 Class Applet의 subclass인 HelloWorld라는 class를 정의 하고 있습니다. 이외에도 프로그램에서 필요한 class를 사용자가 정의하여 사용할 수 있습니다.
Java에서는 C++과 다르게 Class와 프로그램의 control flow가 분리되어 있지 않습니다. 따라서 C/C++에서 사용하는 main()이라는 method가 없습니다. 이외에도 몇가지 C/C++과 다른 점을 보면, 전역변수의 개념이 없고, preprocessing을 하지 않기 때문에 #define이나 #include와 같은 feature가 지원되지 않습니다. 그리고 한가지, Java에서는 pointer가 아예 없습니다.

2.5 Class

2.6 Interface

Java는 OOP이지만 multiple inheritance가 지원이 되지 않는데, 이와 같은 기능을 지원하기 위해 Interface라는 일종의 virtual method를 지원합니다. 각 class는 여러가지 Interface를 implement할 수 있고, 이를 통해 multiple inheritance와 같은 효과를 낼 수 있습니다. 예를 들어 서로 다른 superclass를 가지는 두 class가 동일한 interface를 implement하는 것을 생각해보면 알 수 있습니다.

2.7 Package

2.8 Thread

Java에서는 language level에서 multithreading이 지원됩니다. Thread를 사용하는 방법에는 다음의 두 가지가 있습니다.

3. JDK

release 된 JDK에 관한 설명을 간단히 합니다. 이전 Alpha 3버전에서 달라진 부분과 JDK를 이용한 프로그래밍과 디버깅에 대해 간단히 설명합니다.

3.1 JDK란 무엇인가?

JDK는 Java Developers Kit의 약자로 현재까지는 pre-beta release로 Java-enabled Browser를 위한 applet을 개발하는데 도움을 주려는 목적을 가지고 있습니다. 이전의 alpha-3 release에서 보다 개선된 API를 지원하며, 약간의 bug들도 해결했습니다.

JDK는 다음의 component로 구성됩니다.

Java Applet Upgrade Utility
새로운 API로 이전의 code를 변환해주는 utility입니다. 그러나 그리 만족스러운 수준은 아니고, 아직 수작업이 필요한 부분이 있습니다.
Java Applet Viewer
작성한 applet을 test하고 실행시키기 위해 새롭게 추가된 applet viewer입니다. HotJava와는 다르게 web page browser 기능은 없습니다.
Java Debugger API and Prototype Debugger
java.tools.debug API와, 이 API를 사용하는 command-line 방식의 최초의 debugger입니다.
Java Compiler
Java Interpreter

3.2 JDK에서 달라진 것

이전의 Alpha-3 release에서 상당히 많은 부분이 개선(?)되었는데, 달라진 내용은 다음의 세가지로 요약할 수 있습니다.

Java Tool changes

API changes

Java Language Changes

Changes since the last release를 참조하십시오.

3.3 AppletViewer의 사용법

appletviewer 는 WWW browser의 범주에서 벗어나 applet만을 실행시킬 수 있도록 하여줍니다. 사실 아직까지는 pre-beta release를 지원하는 HotJava가 없으므로 JDK를 사용하여 작성한 Applet program은 appletviewer으로 밖에 실행 시킬 수 없지만, 조만간 Netscape 다음 버전에서 Java-enabled browser를 내놓울 것입니다.

사용법은 아주 간단합니다.

	appletviewer [option] URLS...

그림 4. appletviewer의 실행모습

3.4 debugger의 사용법

JDK에서 제공하는 debugger는 다음과 같은 요건을 갖추도록 만들어졌습니다.

이러한 요건을 만족하도록 Java Debugger API가 개발되어있습니다.

그리고 그 사용법은 dbx와 아주 비슷합니다.

	appletviewer -debug URL

jdb에서는 기본적으로 다음과 같은 일을 할 수 있습니다.

help

list

up/down

print obj_id

print locals

threads

stop in Class.method, stop at Class:line

clear Class:line

where

classes

run, cont, step

use, use path

quit

그림 5. jdb의 실행모습


4. Reference Pages

참고가 될만한 resource의 소개