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
- 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
|
- Programming Applet
- 2.1 Including an Applet into your page
- 2.2 Class Applet
- 2.3 Simple Applet Codes
|
- JDK
- 3.1 JDK란 무엇인가?
- 3.2 JDK에서 달라진 점들
- 3.3 AppletViewer
- 3.4 debugger
|
- Reference Pages
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
- Java는 C++과 매우 그 syntax가 유사합니다. 따라서 기존의 프로그래머가
별다른 노력 없이 Java를 사용할 수 있습니다. Java에는 auto garbage
collector가 있어서 프로그래머는 메모리 문제에 고민할 필요가 없습니다.
그리고 Java는 그 size가 작습니다. (기본 interpreter와 class는 약 40KB,
여기에 stand library와 thread 기능을 더하면 약 175KB가 더해집니다.)
Object-Oriented
Distributed
- Java에서는 HTTP나 FTP와 같은 protocol로 통해 URL로 지정되는 remote
object를 마치 local file system에 있는 듯이 access할 수 있습니다.
Interpreted
- Java로 짜여진 프로그램은 bytecode라는 중간 code로 compile이
되고, 이 code는 Java Interpreter에서 실행 됩니다.
filename.java는 그 안에 포함되어 있는 class별로 classname.class로
컴파일이 됩니다. 그리고 Applet은 바로 web page에 포함된 실행 가능한
class입니다.
Architecture Neutral
- 따라서 Java Interpreter는 하나의 가상 기계로 볼 수 있고, bytecode는
Java Interpreter가 설치된 어떤 platform에서도 실행될 수 있습니다.
MultiThreaded
- 또하나의 중요한 Java의 특징은 MultiThreading이 프로그램 언어 단계에서
지원이 된다는 것입니다. 이를 사용하면 보다 효율적인 프로그램을 작성할 수
있습니다.
Dynamic
- Java의 Class는 runtime-binding이 가능하고 동시에 runtime에 instance의
type을 알 수가 있습니다. 따라서 module 사이의 간섭이 최소화되게 됩니다..
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 응용프로그램을 말합니다.
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에서 달라진 점 두가지는 다음과 같습니다.
- applet의 attribute를 Param tag를 써서 지정합니다.
- Applet tag를 이해하지 못하는 브라우져가 대신 text를 표시할 수 있도록 합니다.
|
| 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()
- called just after the applet is created, this method is useful for resizing the applet's
display area, downloading resources, getting attribute values getting fonts and colors and
so on.
start()
- this method typically performs(or starts a thread to perform) the real work of the applet.
By default, this method is called every time the applet's page is visited, whether or not
the applet is visible. However, the user can specify that applet execution be delayed until
the user requests it.
paint()
- called automatically every time the applet's screen display needs to be drawn -- such as
when the applet's first becomes visible, when it's scrolled, or when the applet requests
to be repainted -- this method should simply draw the applet's representation onscreen.
stop()
- called when the user leaves the applet's page, this method should stop the applet's execution.
destroy()
- called when the applet is discarded(such as when the applet is reloaded, which requires
it to be unloaded first), this method should release the applet's resources.
그리고 Applet의 subclass로 구현된 class(실제의 프로그램)에서 method가 불려지는 순서는 다음과 같습니다.
- 맨처음에는 Applet subclass의 constructor와 class의 static statement가 실행됩니다.
- init() 이 실행되면서 Applet에 필요한 여러가지 resouce를 초기화시킵니다.
- applet의 program이 시작되면서 start()가 실행됩니다.
- applet이 expose되는 경우 repaint()가 자동으로 실행되면서 paint()가 실행됩니다. 단
paint()는 프로그램에서 직접 부를 수는 없고 repaint()를 통해 호출합니다.
- 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를 사용하는 방법에는 다음의 두 가지가 있습니다.
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
- Applet Viewer와 Java Debugger가 추가 되었습니다.
- interpreter의 option의 기능이 좀 달라졌습니다.
API changes
- class의 hierarchy의 상당부분과, API가 상당히 많이 개선(?)되었습니다.
가장 눈에 띄는 변화는 Applet이 panel의 subclass가 되었다는 점과,
AWT package가 좀더 깔끔해졌다는데 있습니다.
Java Language Changes
- 새로운 operator와 reserved word가 추가 되었으며, 그외에 이전에
있던 operator에 제약이 가해지거나 하는 변화가 있습니다.
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 language와 같이 debugger의 interface 역시 Object Oriented 이어야 한다.
- Java가 지원하는 thread나 monitor 등과 같은 runtime feature를 지원해야 한다.
- Remote debugging이 가능해야 한다.
- 정상적으로 동작되는 경우 security를 보장해야 한다.
이러한 요건을 만족하도록 Java Debugger API가 개발되어있습니다.
그리고 그 사용법은 dbx와 아주 비슷합니다.
appletviewer -debug URL
jdb에서는 기본적으로 다음과 같은 일을 할 수 있습니다.
help
- 간단한 online help입니다. 사용가능한 명령어를 나열합니다.
list
up/down
print obj_id
- obj_id에 해당하는 threadgroup의 내용을 print합니다.
print locals
threads
- 현재 실행중인 thread를 표시 할 수 있습니다.
stop in Class.method, stop at Class:line
clear Class:line
where
- 현재 실행되고 있는 stack 내용을 표시합니다.
classes
run, cont, step
- applet의 실행을 시작하거나, break된 상태에서 continue 혹은 한 step
을 실행합니다.
use, use path
- 현재 실행되고 있는 source file의 path를 표시하고, path를 바꿉니다.
quit
그림 5. jdb의 실행모습
참고가 될만한 resource의 소개