Java Tutorial :

Making the Java Real !

305-350 대전광역시 유성구 가정동 161번지
한국전자통신연구소 멀티미디어표준연구실
신명기
E-mail : mkshin@pec.etri.re.kr
URL : http://pec.etri.re.kr/~mkshin/
Abstract:
자바는 인터넷을 위한 차세대 객체지향 언어로서, 웹에 적용되어 브라우저에 애니메이션, 인라인-사운드, 실시간 인터액티브 기능을 가능하게 했다는 눈에 보이는 장점외에도 새로운 데이타 타입과 프로토콜을 플러그-인 할 수 있고, 데이타 뿐만 아니라 코드를 다운로드 해서 사용할 수 있는 특징으로 인해 기존 컴퓨터 산업 전반에 걸쳐 커다란 혁명을 예고하고 있다.
본 자바 튜토리얼에서는 자바에 대한 전반적인 이해를 목적으로 자바의 개발 배경과 WWW의 적용 효과, 자바의 프로그램적인 기능들과 특징, 구문을 살펴보며, JDK 1.0과 자바 개발 환경, 최신 자바 응용기술인 자바스크립트에 대해 알아본다. 또한 자바로 가능한 프로그램의 네가지 유형인 자바 애플릿, 애플리케이션, 프로토콜 핸들러, 컨텐트 핸들러의 작성법과 간단한 프로그램 유형을 살펴본다.
Keywords:
Java, WWW(World Wide Web), JDK(Java Developers Kit), IDE(Integrated Development Environment), JavaScript, Applet, Application, Protocol Handler, Content Handler

1. 차세대 WWW 기술과 자바

WWW은 NCSA Mosaic, Netscape Navigator의 등장으로 그 기능은 단순히 정보검색 도구 차원을 넘어 인터넷상에서 사용되는 모든 서비스(응용)의 GUI로 점차 확산돠어 가고 있는 추세이며, 인터넷을 차세대 통신망으로 발전시킬 주요한 원동력으로 평가받고 있다. 1994년 ~ 1995년의 한해가 WWW 대중화에 앞장선 Netscape의 해였다면 1995년 ~ 1996년은 자바를 비롯한 차세대 WWW을 이끌어갈 새로운 기술들의 개발과 경쟁의 한해가 될 것으로 예측하고 있다. 최근 차세대 WWW을 결정지을 기술로서 평가받고 있는 분야는 다음과 같다.
WWW API는 크게 클라이언트, 서버쪽으로 구분하여 Client API, Server API로 나뉘며, 최근 Netscape에서 제공하는 플러그-인을 지원하기 위한 API인 Inline Plug-in API 기술도 이에 포함시킬 수 있다. Server API인 경우, Netscape Server에서 NSAPI(Netscape Server API)란 이름으로 제공하고 있으며, CGI의 단점을 보완하여 성능향상과 Security등 새로운 기능을 추가적으로 확장할 수 있다는 여러가지 장점을 가지고 있다. Client API는 WWW 브라우저와 사용자 응용 프로그램의 통합과 제어를 위해 사용되며 NCSA Mosaic에서는 CCI(Common Client Interface), Netscape에서는 NCAPI(Netscape Client API)란 이름으로 인터페이스를 제공한다. WWW Client API의 단점은 플랫폼 환경이 Unix, Windows, Mac에 따라 구현 방식이 달라지며, 플랫폼이 다른 환경에서는 각 응용간의 제어와 통합이 불가능하다는 점에 있다. Netscape에서 제공하는 NPAPI(Netsape Plugin API)는 인터넷상의 다양한 멀티미디어 데이타를 Netscape에서 외부 뷰어를 사용하지 않고 바로 브라우징 하기 위해 표준화된 API를 제공하는 것으로 현재 약 20여개의 제품이 이를 이용하여 Netscape에 플러그-인 되어 있으며 이를 이용하여 애니메이션, VRML 데이타 등을 WWW 브라우저 입장에서 손쉽게 처리할 수 있다.

VRML(Virtual Reality Modeling Language)은 실리콘 그래픽스에서 개발한 3차원 모델링 언어로 웹의 단점인 2차원적인 접근 방식의 문제점을 해결하기 위해 개발한 언어이다. VRML은 그 기능에 대한 우수성이 예전부터 높게 평가되고 있었으나 기존 HTML과의 호환의 문제점으로 인해 많은 장애를 가지고 있었다. 현재 지금은 Netscape에서 VRML을 지원하기 위해 몇가지 제품의 플러그-인을 제공하고 있으며, 자바 언어에서도 올 여름에 나올 JDK 1.1 API쪽에 VRML을 표현하기 위해 클래스 라이브러리가 확장될 예정이어서 결국 VRML과 자바는 동일 선상에 놓여질 것으로 기대되고 있다.

위에서 열거한 두가지 기술의 공통점은 결국 기존 웹이 가지는 단편적이고 평면적인 문제점들을 해결하기 위한 대안으로서 제안된 것임을 알 수 있다. 자바는 선 마이크로시스템즈에서 개발한 차세대 객체지향 언어로 출발점에서는 위의 두가지 기술들과 많은 차이는 있지만 자바 역시, 궁극적으로는 기존 웹의 단점을 보완하기 위한 프로그램 언어라고 볼 수 있다. 특히 자바는 언어 자체에서 분산환경을 지원하는 네트웍 언어임으로 WWW API와 같은 기능을 지원하면서도 플랫폼에 독립적인 환경을 구축할 수 있다는 장점을 가지고 있으며, VRML을 포함할 수 있다는 확장성으로 인해 위에서 열거한 두가지 차세대 기술력을 모두 포함하는 WWW의 주요한 기술로 인정되고 있다.

2. 자바, 그 무한의 잠재력

현재 자바의 가능성은 WWW에서 부터 정보 산업 전반에 걸쳐 무한한 잠재력이 있는것으로 평가되고 있다.

2.1 다이나믹한 WWW 브라우저

인터넷상의 데이터들은 점차 동화상, 사용자와의 상호작용을 요구하는 복잡한 데이타 포맷을 요구하는데 반해 기존의 웹 브라우저는 이미지와 텍스트를 나열하는 단순한 화면만을 보여줄 수 있다는 단점이 있었다 자바가 지원되는 브라우저에서는 이러한 문제점을 해결한다. 자바 애플릿을 사용하면 웹 브라우저내에서 애니메이션, 인라인 사운드, 실시간 상호작용이 가능하다. 자바는 기존 웹 브라우저를 다이나믹히게 만들었다.

그림 1은 자바 애플릿을 이용하여 네트웍을 통해 여러 사용자간의 실시간 시뮬레이션 게임의 예를 나타낸것이다.


그림 1 실시간 시뮬레이션 게임을 지원하는 자바

2.2 새로운 데이타 타입과 프로토콜의 플러그-인

점차 멀티미디어화 되는 데이타와 새로운 프로토콜의 확장을 위해 기존의 브라우저는 코드의 수정을 통한 소프트웨어 업그레이드 라는 과정이 요구되었다. 자바의 컨텐트 핸들러, 프로토콜 핸들러라는 개념을 이용하면 기존 브라우저 소프트웨어 코드의 아무런 수정없이 새로운 데이타 타입과 프로토콜의 처리 루틴을 추가로 확장할 수 있다.

그림 2는 VRML과 같은 새로운 데이타 타입의 플러그-인 뿐만 아니라 S-HTTP, Multicast과 같은 프로토콜도 플러그-인 할 수 있다. 참고로 Netscape의 플러그-인 기술은 데이타만을 플러그-인 할 수 있다.


그림 2 새로운 데이타 타입과 프로토콜의 플러그-인

2.3 소프트웨어 개발과정의 혁명 예고

기존 소프트웨어 벤더들의 가장 큰 고민은 계속적인 제품의 버젼관리와 업그레이드 문제였다. 기존의 소프트웨어 기술혁신과 사용자 증가의 사이클은 서로 반비례의 관계가 유지되곤 했었다. 즉, 개발된 기술의 사용이 확대될 수록, 더이상의 기술혁신은 어렵게 되는데. 그 이유는 계속적인 업그레이드 가 어려우며, 새로운 기술간의 상호운용성과 호환성을 보장하는 문제도 크기 때문이다. 자바 사용으로 인한 가장 큰 효과는 기술혁신의 과정이 사용자의 증가와 함께 그대로 유지된다는 점에 있다. 자바를 이용하면, 호환성과 상호운용성을 유지하는 동시에 새로운 기능을 추가적으로 실험할 수 있다.

그림 3 사용자의 증가와 함께 소프트웨어 기술혁신 싸이클도 함께 증가

2.4 네트웍 컴퓨터(Network Computer:NC)의 등장 ?

자바의 적용은 실제로 네트웍에 적용되어 인터넷에 보다 놀라운 일대 변 화를 가져온다. 그중에서 대표적인 것이 네트웍 컴퓨터의 등장이다. 네트웍 컴퓨터란 일반 클라이 언트는 서버로 부터 기존의 데이터 뿐만 아니라 응용 프로그램도 다운로드 받아 사용할 수 있도 록 하는 개념이다. 즉, 이제까지 CD-ROM이나 디스켓에 담아 제공하던 모든 소프트웨어 프로그 램은 네트웍 컴퓨터란 개념의 등장으로 없어지게 된다. Oracle에서는 곧 네트웍 컴퓨터 제품을 출시할 것으로 알려지고 있으며, SunSoft에서도 웹 브라우저를 장착한 자바터미널이라는 이름을 갖는 네트웍 컴퓨터를 개발중이다. 네트웍 컴퓨터의 성공여부는 적어도 아직까지 네트웍 부하의 문제로 많은 미결 과제가 남아있다.

그림 4 네트웍 컴퓨터의 개념

3. 자바 환경과 새로운 응용 기술

3.1 자바의 개발 배경

1990년 "그린 프로젝트"라는 이름으로 시작한 자바 개발의 뒷 모습은 지금까지의 WWW 기술과는 다른 일면을 보여준다. 1991년, 가전제품의 상호운용성 확보를 목표로(인터넷 시장이 아닌) 시작하여 오크(자바의 전신)라는 언어의 개발과 함께 1993년 인터엑티브 TV에 적용을 시도했었다. 웹이 이처럼 폭발적인 인기를 끌기이전, 가전제품에 대한 상호운용성의 확보는 소비자 측면에서 자바를 적용할 수 있는 좋은 환경으로 인식되어 있었 다. 인터엑티브 TV에 대한 적용이 기존 시장성의 문제로 인해 불가능하게 되자 자바의 개발자인 제임즈 고슬링은 자바의 새로운 적용 환경으로 WWW의 택하게 된다. 그렇게 4년이 넘게 엄청남 투자 비용과 연구 개발, 적용 환경의 시행 착오를 거듭하던 자바는 1995년 5월 선월드 '95에서 자바 브라우저인 핫자바와 함께 공식적으로 선보이게 됨으로서 그 놀라운 역사의 서막을 열게된다.

3.2 자바 언어의 특징

3.2.1 객체지향 언어의 장점을 갖는다(Object-Oriented)

자바는 캡슐화, 폴리모피즘 즘, 상속(inheritance)과 같은 C++, Smalltalk과 같은 기존 객체지향 언어의 특징들을 가지고 있다.
 
class Car {
   int door;

   public Car() {
        door = 4;
   }
   void number_of_door() {
        System.out.println(door);
    }
   int maxSpeed() {
        return 180;
    }
}
 
class Granduer extends extends Car {
   int maxSpeed() {
       return 220;
   }
}

위의 자바로 구현한 두 클래스간의 관계를 보면, Granduer는 extends로 정의되어 Car의 서브클래스이다. 즉 Car의 모든 속성(variable, 메소드 ..)들은 Porsche로 상속된다. 뿐만아니라 Porsche 클래스에서는 maxSpeed()를 다시 정의함으로서 메소드 오버라이드가 가능하다. 이러한 특징들은 일반적인 객체지향 언어가 가지고 있는 기능들이다.

3.2.2 단순하며 프로그래머에게 친숙한 언어다(Simple)

C++과 유사한 객체지향 언어이면서도 자바는 꼭 필요로 하는 기능만을 위해 불필요한 요소는 모 두 삭제했다. 예를들어 C 초보자들이 배우는데 가장 까다로운 포인터 연산을 사용하지 않으며, 스트럭트 타입과 같은 중복적인 기능을 삭제했다. 또한 C++에서 개념이 복잡하여 혼동을 유발하 곤 하는 연산자 오버로딩, 다중 상속, 자동 코션 등의 기능을 삭제했다.

또한 자바는 이러한 단순함을 가지면서도 C/C++에서 제공되지 않은 가비지 수집(garbage collection), 쓰레드 동기화, 풍부한 클래스 라이브러리 등 추가적인 기능을 제공한다. 자동적인 가비지 수집으로 메모 리 관리를 위해 사용자가 일일이 프리(free) 선언을 해 오던 불편함을 해소했으며, Xerox CeDAr/Mesa에서 따온 쓰레드 동기화는 멀티쓰레드 프로그램을 더욱 간단히 구성하도록 도와준 다. 또한 구문 자체가 단순해 진 반면, 사용자 인터페이스 그래픽, 네트워크 등을 지원하는 풍부한 클래스 라이브러리를 지원함으로서 사용자가 직접 프로그램해야 하는 로드를 많이 줄여준다.

3.2.3 분산환경에 알맞은 네트웍 언어다(Distributed)

자바는 네트웍상의 운영을 고려하여 설계된 언어로 소켓 바인딩과 같은 TCP/IP 프로토콜과 URL 처리와 같은 HTTP 프로토콜을 처리할 수 있다. 자바의 네트웍 패키지에는 이를 위한 Content Handler, InetAddress, ServerSocket, Socket, SocketImpl, URL, URL Connection, URLStreamHandler 클래스들이 포함되어 있다.

3.2.4 자바는 인터프리트 언어다(Interpreted)

C/C++과 같은 기존의 언어와는 달리, 자바 컴파일러는 소스 코드를 기종에 무관한 코드인 바이트 코드로 만들고, 이를 자바 런-타임 시스템(Virtual Machine)상에서 동작하도록 한다.

3.2.5 견고하다(Robust)

C/C++에서 사용하는 포인터의 개념은 디버깅이 어려운 런타임 오류를 많이 발생시킨다. 자바에서는 포인터 처리를 없앰으로서 런타임 에러를 줄일 수 있으며, 메모리 포인터의 사용으로 인한 주소 기억의 필요성을 없앴다.

3.2.6 플랫폼에 무관한 이식이 가능한 언어다(Platform Independent/Portable)

네트웍을 통해 프로그램을 다운받아 하드웨어에 관계없이 사용하기 위해서는 근본적으로 아키텍쳐에 독립적이고 이식성을 보장하는 구조가 요구된다. 자바는 이러한 문제를 해결하기 위해 하드웨어 아키텍쳐, 운영체제 인터페이스, 윈도우 시스템에 독립적인 바이트 코드를 사용한다. 자바 프로그램은 Windows95/NT, Solaris2.x, Mac OS7.5와 같은 자바가 지원되는 모든 플랫폼상에서 자바 컴파일러에 의해 바이트코드 형태로 컴파일되고, 인터프리터가 동작하는 자바 가상 기계에 의해 어떤 기종의 시스템에서도 쉽게 해석된다.

3.2.7 고성능 언어다(High Performance)

자바는 인터프리트 언어이므로 CPU 처리를 많이 요하는 프로그램의 경우, 20 ~ 30 배, 네트웍 프로그램의 경우 5 배정도 기존 프로그램보다 처리 속도가 느리다. 이러한 단점을 보완하기 위해 선 마이크로시스템즈에서는 올 여름 출시될 JDK 1.1에서 "just-in-time" 컴파일러를 도입하여 속도면에서 C/C++을 앞지를 것이라고 발표했다.

3.2.8 안전하다(Secure)

자바는 네트워크 환경에서 운영되는 언어임으로 다른 언어보다 안전성에 대한 중요성이 요구된다. 이러한 문제는 애플릿과 같은 프로그램의 다운로드시에 적절한 제제를 가하지 않으면 보안상 많은 문제를 야기시킬 수 있기 때문이다. 따라서 자바 코드는 바이러스, 화일의 삭제나 수정, 데이타 파 괴 작업이나 컴퓨터 오류 연산 등을 방지할 수 있는 환경에서 실행되도록 설계되었다.

3.2.9 멀티쓰레드를 지원한다(Multithreaded)

멀티쓰레드란 한 프로그램내에 여러개의 쓰레드가 존재하여 동시에 여러가지 일을 수행하는 것이다. 자바는 언어 자체에서 멀티쓰레드를 지원한다. 즉 하나의 단일 자바 프로그램은 여러개의 쓰레드 프로그램으로 구성될 수 있으며, 이 쓰레드는 독립적으로 다른 일을 연속적으로 할 수 있다.
public synchronized void stop() {
        if (kicker != null) {
             kicker.stop() ;
             kicker = null;
               }
}

private syncronized void startSort() {
        if (kicker ==null || !kicker.isAlive()) {
             kicker = new Thread(this);
             kicker.start();
               }
}
이 프로그램은 자바 멀티쓰레드 프로그램의 동기화에 대한 예제로서 한 프로그램내에 두 개의 메소드 stop()과 startSort()를 쓰레드로 구현한 것이다. stop()과 startSort(), 두 메소드는 kicker라는 공통된 변수를 공유하고 있다. 이 두 메소드는 syncronized 라고 선언되어 동시에 수행될 수 없다. 따라서 공유되는 변수 kicker의 모니터링을 통해 일정 순간에 한 메소드만이 수행되게 되어 kicker 변수의 값에 따른 연속적인 일을 수행하게 된다.

3.2.10 다이나믹하다(Dynamic)

자바는 런타임시까지 링크과정을 연기함으로서 응용들이 다이나믹하게 패치될 수 있도록 한다. 이러한 방식은 수퍼클래스가 수정되었을때 이의 서브클래스까지도 다시 컴파일해주어야 하는 "superclass problem"을 해결한다.

3.3 자바 개발 주변

3.3.1 자바와 핫자바, Netscape

자바는 선 마이크로시스템즈에서 개발한 차세대 객체지향 언어로, 현재 JDK 1.0까지 제공되고 있으며, 플랫폼으로는 Solaris2.x, Windows NT/95, MacOS 7.5 만을 사용할 수 있다. 핫자바는 선 마이크로시스템즈에서 개발한 자바로 만든 브라우저로서 현재 1.0 알파 3 버젼까지 제공하며, 플랫폼으로는 Solaris2.x, Windows NT/95만을 사용한다. Netscape는 선마이크로시스템즈와 자바 라이센스 체결함으로서 2.0 이후 버젼은 베타 이후(JDK 1.0) 애플릿만을 브라우징 할 수 있다. Solaris2.x, Windows NT/95, SunOS4.1.x, HP/UX, IRIX, Linux 등에서 사용할 수 있다.

자바와 핫자바의 관계는 핫자바가 자바로 만든 브라우저라고 이해하면 쉽게 입증되는 반면, WWW 브라우저의 75 %을 차지하는 Netscape와 최초의 자바 브라우저인 핫자바와는 그 의미부터 조금 다르다. 핫자바의 진정한 의미는 애플릿 브라우징에도 있지만, 실질적으로는 자바 애플리케이션 이라는 중요한 의미를 가지고 있다. 즉, 자바 애플릿(96년 2월 현재 알파 애플릿만을 지원)을 웹 브라우저에서 표현할 수 있다는 것외에도, 자바의 특징인 프로토콜의 동적인 결합, 새로운 데이타 타입의 확장이 가능한 브라우저로서 자바로 인한 기술혁신을 예고하는 자바 소트프웨어라는 의미를 갖고있다.

3.3.2 자바 애플릿과 애플리케이션

자바는 프로그램밍 언어임으로 이 언어로 작성된 프로그램은 단연히 자바 애플리케이션이 된다. 이렇게 구현된 애플리케이션은 하나의 main() 부분을 가지고 있으며 독립적인 프로그램이다. 반면, 현재 웹에서 자바를 사용하는 대부분의 방법은 자바 애 플릿을 작성하는 것이다. 애플릿이란 HTML 문서내에 포함될 수 있는 자바 프로그램을 가리킨 다.

애플릿은 다운로드되어 사용되어 진다. 따라서 클라이언트쪽의 안전성과 보안의 문제로 애플리케 이션과는 다른 다음과 같은 제약점을 가지고 있다.

3.3.3 JDK 1.0

자바 JDK란 자바 개발자를 위한 언어 입장에서의 툴 들을 가리킨다. 즉, 자바 애플릿 개발, 자바 애플리케이션 개발, 자바 디버깅을 위한 여러 가지 환경을 제공한다. 자바의 개발 환경은 알파 버젼에서 JDK 베타 버젼으로 전환되어 현재 JDK 1.0 버전이 발표된 상태이다. JDK 1.0 바이너리는 은 다음의 한국 공식 자바 미러링 사이트에서 무료로 제공된다.
        ftp://cair-archive.kaist.ac.kr/pub/WWW/Java/Javasoft/pub/*
JDK 1.0 버젼은 Netscape와 같은 자바-가능 브라우저에 의해 지원되며, 패키지내에는 핫자바 브라우저 대신 애플릿 뷰어만 포함되어 있다. 핫자바 JDK 1.0 버젼도 96년 상반기중에 발표될 예정이다. Solaris2.x용으로 제공되는 JDK 1.0은 다음과 같은 구성으로 되어있다. classes.zip 파일은 컴파일러와 인터프리터에 의해 사용되어 지는 클래스 라이브러들이며 Netscape에서 제공하는 자바 라이브러리인 moz_2.0.zip과 역할이 같다), src.zip 파일은 소스 파일을 가리킨다. 자바 애플릿 뷰어는 현재 핫자바 브라우저의 베타 버전이 제공되지 않음으로 HTML 브라우징 기능은 없고 단순히 애플릿 뷰잉만을 할 수 있다. 사용법은 다음과 같다.
	% appletviewer [option] URL | file
자바 프로그램의 디버깅을 위해서는 다음과 같이 애플릿 뷰어의 구동시에 디버거 옵션을 지정할 수 있다.
	% appletviewer -debug URL | file
자바 컴파일러는 자바 애플릿과 애플리케이션 프로그램을 컴파일할 때 사용되며,
	% javac Source_filename 
자바 인터프리터는 자바 컴파일러에 의해 생성된 바이트 코드를 수행하고자 할 때 사용된다.
 
	% java Byte_Code_filename 

3.3.4 APPLET 태그 사용법

JDK 1.0 APPLET 태그의 완전한 구문은 다음과 같다.
    <APPLET
        [CODEBASE = codebaseURL]
        CODE = appletFile
        [ALT = alternateText]
        [NAME = appletInstanceName]
        WIDTH = pixels HEIGHT = pixels
        [ALIGN = alignment]
        [VSPACE = pixels] [HSPACE = pixels]
    >
    [< PARAM NAME = appletAttribute1 VALUE = value >]
    [< PARAM NAME = appletAttribute2 VALUE = value >]
    . . .
    [alternateHTML]
    </APPLET>
각 태그 사용법에 대해 알아보면 다음과 같다.

3.3.5 자바 통합 개발 환경(IDE:Integrated Development Environment)

현재 자바 프로그래밍을 위한 개발 환경은 선 마이크로시스템즈의 "Workshop for Java"를 비롯하여 자바 라이센스를 맺은 여러 업체에서 자바 프로그램 개발을 위한 통합 한경을 개발중이다. TEA의 경우, DimensionX에서 개발한 프로그래머를 위한 자바 개발 환경으로 자바 클래스로 구현되어 있으며 따라서 Solaris2.x, Windows95/NT등 JDK 1.0이 지원하는 모든 플랫폼에 독립적으로 사용할 수 있다. 초기 화면 및 이미지 구성을 위한 pop-up 윈도우는 아래 화면과 같다.



3.3.6 자바 응용기술 : 자바스크립트

Netscape사에서는 자신의 Netscape Navigator에 프로그램적인 특징을 부과하는 것을 목적으로 LiveScript라는 이름의 스크립트를 Netscape 2.0 베타 버젼부터 선보이기 시작하여, 자바 언어와는 별도로, 선 마이크로시스템즈등과 자바스크립트 라이센스를 쳐결함으로서 이름을 자바스크립트라고 수정하였다. 자바스크립트는 자바의 구문과 built-in function을 따오기 했으나, 자바와는 독립적으로 구현된다. 즉, Windows3.1을 포함한 모든 Netscape 2.0 버젼에서 자바스크립트가 지원된다.

자바와 자바 스크립트의 차이점은 다음과 같다.

현재 자바스크립트는 Netscape 제품에서 Client-Side 와 Server-Side로 구분하여 사용할 수 있다.
3.3.6.1 Client-Side 자바스크립트
Client-Side 자바스크립트는 Netscape 2.0에 의해 사용되며, HTML내에 삽입되어 그 페이지가 로드된 후 Netscape Navigator에 의해 인터프리트된다. 자바스크립트의 functuin, variable은 <script> .. </script> 태그사에에 놓이게 된다.

자바스크립트에서 사용가능한 개체들은 다음과 같다.

다음의 예제는 CGI 프로그램과 함께 연동하여 입력 필드값의 오류를 검증하는 자바스크립트 예의 일부분이다.
<head>
...
<script language="javascript">
...
function isanum(s) { ... }
...
function qty_check(str) {
  if (!isanum(str) {
    alert("Please enter number for quantity");
    return false;
  }
  return true;
}
</script>
</head>
<body>
...
<form name="widget_order"
      action="foo.cgi" method="post">
How many widgets today?
<input type="text" name="quantity"
       onChange="qty_check(this.value)">
...
</form>
3.3.6.2 Server-Side 자바스크립트
Server-Side 자바스크립트는 Netscape LiveWire 환경에서 사용되며, HTML내에 삽입되어 그 페이지가 로드될때 서버와 LiveWire 툴에 의해 컴파일된 후 실행된다. functuin, variable은 <server> .. </server > 태그사이에 놓이게 된다.

자바스크립트에서 서용하는 객체들은 다음을 포할 수 있다.

4. 자바 문법

4.1 주석(comment), 식별자(identifier), 키워드(keyword)

주석은 다음과 같은 3가지 유형이 사용된다.
 
	// comment on one line
	/* comment on one or more lines */
	/** decumenting comment
식별자는 객체와 변수의 이름들을 지정하기 위해 사용되며, 일반 문자나 "_", 또는 "$"로 시작해야 한다.

자바에서 사용되는 키워드는 아래와 같으며, 이중에서 const, future, generic, goto, operator, rest, var 는 정의는 되었으나 JDK 1.0에서는 사용되지 않는다.

	abstrac     do         implements      package     throw
	boolean     double     import          private     throws
	break       else       inner           protected   transient
	byte        extends    instanceof      public      try
	case        final      int             rest        var
	cast        finally    interface       return      void
	catch       float      long            short       volatile
	char        for        native          tatic       while
	class       future     new             super
	const       generic    null            switch
	continue    goto       operator        synchronized
	default     if         outer           this

4.2 단순 자료형, 스트링, 배열

자바에서 사용되는 자료형은 단순 자료형과 복합 자료형으로 나눌 수 있으며, 단순 자료형은 정수형, 실수형, 문자형, 논리형으로 구분된다. 복합 자료형은 배열, 클래스, 인터페이스 등으로 나눌 수 있다. 스트링도 역시 객체로서 16비트 유니코드다.
	String hello = "Hello";
	String world = "World";
	System.out.println(hello + " " + world);
	int len = hello.length()
	String str = hello.substring(1, len);
	System.out.println("j" + str);
스트링은 자바 클래스 계층 구조상, java.lang.String 클래스에서 정의된 타입으로 일반 객체지향 언어와 동일하게 그 클래스에서 정의된 메소드를 사용할 수 있다. 예를들어 위의 예에서 사용한 length()는 스트링의 길이를 알아내는 메소드이며, substring(1, len)은 파라미터 값으로 주어진 인덱스에 맞는 스트링의 일부분만을 가져오는데 사용되는 메소드로 정의되어 있다. 위의 예에서 len 변수에는 5의 값이 할당된다.

배열은 다른 복합 자료형과 마찬가지로 new 연산자를 사용하여 생성되며, 첫번째 인덱스는 0에서 시작한다

        int rgb[] = new int[3];
        rgb[0] = 255;
        rgb[1] = 100;
        ....
배열도 마찬가지로 length라는 변수를 이용하며, 배열의 크기를 알아낸다. 사용된다.
       int avg = rgb[1] / rgb.length;
다중 배열을 사용하기 위해서는 배열의 배열을 사용할 수 있다.
        int a[][] = new int[10][3]
이때 a.length에는 10이 a[0].length에는 3이 할당된다.

4.3 제어문(control flow)

자바에서 사용되는 제어문으로는 if, for, while, switch 문 등이 사용되며 ANCI C 와 동일하다.

4.4 연산자

자바에서 사용되는 연산자의 우선순위가 높은 순서데로 나열하면 다음과 같다.
.     []     ()
++   --
!     ~    instanceof
*     /     %
+     -
<<    >>     >>>
<     >   <=    >=   ==     !=
&    ^    |
&&   ||
?:
=   op= ,

4.5 클래스

자바에서 새로운 클래스를 생성하기 위해서는 기존의 클래스로부터 서브클래스의 관계가 유지되도록 정의한다. 클래스 정의를 위해 사용되는 기본 문법은 다음과 같다.
        [Class Modifiers] class Classname              
                [extends Superclassname]              
                [implements Interface, {, Interface}]   
           { 
                   ClassBody                          
          }         
Class Modifier는 그 클래스를 접근할 수 있는 권한이나 특징 등을 부여하는 것으로 다음과 같은 Modifier가 사용된다. 자신의 수퍼클래스를 지정하기 위해서는 extends를 사용하며, 인터페이스와의 관계를 나타내기 위해서는 implements를 사용한다. ClassBody 부분에서는 메소드 정의와 같은 클래스 구현부가 정의된다.

메소드란 클래스에서 수행가능한 일(연산)을 나타내며, 메소드 정의 부분은 다음과 같이 선언한 다.

        [Modifier] returnType methodName (parameterList) {
           [method body]
        }
사용되는 메소드 modifier는 다음과 같다. 이중에서 native method 를 사용하여 C와 자바 프로그램을 통합시키는 방법을 살펴보자. 예제는 HelloWorld 를 사용했다.

native 메소드로 선언된 자바 코드(Helloworld.java)를 작성하고, native 메소드를 부르는 메인 프로그램(Main.java)을 작성한다.

        
       // Helloworld.java
       class HelloWorld {
              public native void displayHelloWorld();

              static {
                  System.loadLibrary("hello");
              }
          }

        // Main.java
        class Main {
              public static void main(String args[]) {
                new HelloWorld().displayHelloWorld();
               }
         }

자바 소스 코드를 컴파일한다.
          % javac HelloWorld.java
          % javac Main.java
자바 유틸리티인 javah를 이용하여 헤더 파일을 생성한다.
          % javah HelloWorld
javah를 이용하여 스텁 파일(HelloWorld.c)을 생성한다.
   	      % javah -stubs HelloWorld
C로 구현된 자바와 통합할 파일인 HelloWorldImp.c를 작성한다.
          // HelloWorldImp.c. 

          #include 
          #include "HelloWorld.h"
          #include 

          void HelloWorld_displayHelloWorld(struct HelloWorld *this) {
              printf("Hello World!\n");
              return;
          }
Loadable Library와 동적으로 컴파일 한다. UNIX인 경우에는
          % cc -G HelloWorld.c HelloWorldImp.c -o libhello.so
프로그램을 동작시키면 다음과 같은 결과가 출력된다.
         % java Main
          Hello World!

4.6 인터페이스

인터페이스는 실제 코드를 수행하지 않는 메소드들만의 집합으로서 클래스와 유사한 정의부를 가지고 있다. 인터페이스를 사용하는 이유는 각 클래스에서 투명하게 인터페이스 부를 공유할 수 있다는 점에 있다.
        public interface String {
                void freezeDry(stream s);
                void reconstitute(Stream s);
        }

        public class Image implements Storing, Painting {
                  ...
                void freezeDry(stream s) {
                  // JPEG compress image before storing
                 ...
                }
                void reconstitute(Stream s) {
                // JPEG compress image before reading
                 ...
                }
        }

4.7 패키지

패키지는 클래스와 인터페이스의 그룹을 가리키며, 네임 스페이스를 관리하고, 충돌을 방지하기 위해 사용된다. 자바 JDK 에서 지원하는 클래스 라이브러리도 모두 패키지 단위로 구현한 것이며, 각 패키지별로 필요한 것만을 import하여 자바 프로그램을 하도록 되어있다.

패키지를 import해서 사용하는 방식은 다음과 같이 세가지 유형이 존재한다.

4.7 자바 구문과 C/C++의 차이점

대부분의 프로그래머들은 C와 C++에 익숙하다. 자바의 장점이라면 위에서 설명했듯이 언어의 문 법 자체가 C/C++과 유사하여 새로운 언어임에도 사용자들이 덜 부담을 가지고 배울 수 있다는 점에 있다. 몇가지 C/C++과는 자바의 구문을 알아보자

4.7.1 자바는 포인터를 지원하지 않는다.

자바는 포인터 타입을 사용하지 않는 대신 레퍼런스를 사용한다. 이러한 방식은 포인터를 사용함 으로서 야기되는 복잡함을 해소하기 위한 것이다.

4.7.2 struct와 union을 지원하지 않는다.

자바는 struct와 union을 제공하지 않는 대신, 복합 구조를 갖는 타입의 생성을 위해 클래스나 인 인터페이스란 개념을 사용한다. 예를들어 C에서 employee 구조를 다음과 같이 선언했다면,
        struct employee
                char name[NAMESIZE];
                char address[ADRSIZE];
                int tag_number;
                double salary;
                double (*compute_raise) (double, double);
        };
다음과 같은 compute_raise() 함수를 정의해야 하고,
        compute_raise(double salary, double percent)
        {
        return salary *percent;
        }
이를 사용위해 C의 메인 프로그램은 다음과 같이 작성하여 사용한다.
        main()
        {
           struct employee Shin = {
             "Shin", "EXPO APT", 2419 
              2400.00, compute_raise
            };
           printf("raise = %f\n", Shin.compute_raise(George.salary, 0.10));
        }
자바를 사용하면 위와 같은 구조는 다음과 같이 간단히 프로그램된다. 우선 struct 문은 클래스내에 정의가 가능하며, 클래스내에 내에 compute_raise는 메소드로서 정의한다.
        class Employee {
               String name;
               String address;
               int tag_number;
               private double salary;
               double compute_raise(double percent) {
                   return percent * salary;
               }
               Employee(String a_name, String a_address, 
                       int a_tag_number, double a_salary){
                   name = a_name;
                   address = a_address;
                   tag_number = a_tag_number;
                   salary = a_salary;
                };
         }
이때 자바의 매인 클래스는 다음과 같이 정의하여 사용가능하다.
        class MainClass {
           public static void main(String args[]) {
            Employee shin = new Employee("Shin", "EXPO API", 2419, 2400.00);
               System.out.println("raise = " + shin.compute_raise(0.10));
               }
        }

4.7.2 커맨드 라인 아규먼트의 차이점

C와 C++에서는 다음의 두 파라미터를 사용하지만, 자바는 다음과 같이 하나의 파라미터만을 사용해도 가능하다. 아큐먼트의 인덱스를 지정하기 위해서는 배열에서 제공되는 length 변수를 사용한다.

4.7.3 그외의 다른점

그 외로 자바는 #define, typedef 등을 사용하지 않으며, C++에서 제공되는 다중 상속은 기본적으 로 제공되지 않는다(이것은 인터페이스를 사용하여 가능하다). goto 문도 키워드로 지정되어는 있 으나 현재 구현되어 있지 않으므로 사용할 수 없고, 연산자 오버 로딩과 자동 코션 등도 지원하 지 않는다.

5. 클래스 라이브러리

자바 API 패키지는 JDK 1.0에서 java.applet, java.awt, java.awt.image, java.awt.peer, java.lang, java.util, java.net 이 있으며, 그외에 선 마이크로시스템즈에서 자체적으로 제공하는 패키지들로 구분된다. 선 마이크로시스템즈에서 제공하는 패키지의 경우 자바 API 표준으로 정해지지는 않았으나 선 자체적으로 유용하다고 생각되는 클래스만을 따로 제공하는 것으로, 특히 알파 버전의 경우에 java.net에서 제공되던 유용한 클래스들이 베타 이후로 변환되면서 표준 API에서 삭제되고 고, sun.net 패키지로 옮겨왔다. 또 한가지 주의해야 할 점은 클래스 계층 구조와 클래스 패키지가 완벽히 일치하지는 않는다는 점이다. 그 이유는 베타 이후 버전부터 클래스 계층 구조에 따른 메소드 재사용을 최대화하기 위해 특히 예외 부분에 대한 내용들이 많이 수정되었기 기 때문이다. 그림에서 *로 표시된 부분은 클래스 계층 구조상 놓여있지만 그 패키지에는 속하지 않는 클래스들을 가리킨다.

패키지내에서 사용되는 클래스 계층도는 JDK 1.0을 기준으로 작성한 것이며,

        http://pec.etri.re.kr/java/JDK/class.ppt
각 패키지별 사용되는 메소드는 아래에 정의되어 있다.
	    http://java.sun.com/JDK-1.0/api/packages.html

5.1 java.applet 패키지

java.applet 패키지는 자바 애플릿 작성을 위해 꼭 필요한 생성 사이클에 관한 클래스로, 프로그램 으로 작성한 애플릿은 모두 수퍼클래스로 Applet을 선언한다. 애플릿을 프로그램하는데에는 이 클래스에서 정의된 메소드인 init(), start(), play(), stop(), destroy() 등을 재정의하여 사용하는 것이 이 일반적이다.


5.2 java.awt 패키지

AWT는 Abstract Window Toolkit의 약자로 자바는 Windows, Motif 환경에 무관한 윈도우 생성 툴을 지원한다. java.awt 패키지는 메뉴바, 스크롤 바, 버튼, 프레임, 체크 박스, 다이얼로그 박스, 폰트 등에 관련한 사용자 그래픽 환경 구성을 위한 클래스들로 구성되어 있다.


5.3 java.awt.image 패키지

java.awt.image 패키지는 화면상의 이미지 구성과 관련된 클래스들로 구성되어 있다.


5.4 java.awt.peer 패키지

java.awt.peer 패키지에는 클래스는 정의되어 있지 않고, AWT와 관련된 다음과 같은 인터페이스만 존재한다.


5.5 java.io 패키지

java.io 패키지에는 스트림 입출력, 파일 입출력 등에 관련된 클래스들이 모여있으며, 특히 입출력에 관련된 예외 처리를 위한 예외 클래스들이 포함되어 있다.


5.6 java.lang 패키지

java.lang 패키지에는 자바 구문과 관계된 클래스들이 모여있다. 자바 언어에 대한 여러가지 데이타 타입 등, 구문, 문법에 관한 클래스이다. 오류에 대한 클래스가 많고, 자바 문법을 처리하는 부분이므로 예외에 대한 처리 클래스가 많이 정의되어 있다. 특히 Runable 인터페이스는 공통된 프로토콜을 위해 많이 사용되는 인터페이스 부분이다.


5.7 java.net 패키지

네트웍에 관련된 클래스들로 소켓 연결과 URL 처리를 위한 클래스들로 구성되어 있다. 주의해야 할 점은 이전의 알파 버전에서 제공되었던 네트웍을 위한 NetworkClient/NetworkServer 클래스 들이 sun.net 패키지로 옮겨졌다는 점이다. 이와는 관계없이 이 클래스들을 사용하고 싶으면 java.net.*과 sun.net.*을 함께 import하여 사용하면 된다.


5.8 java.util 패키지

자바에서 사용되는 유틸리티들의 집합으로 시간 계산, 해쉬 테이블, 랜덤 함수 등 여러 가지 기능들이 들이 제공된다.



6. 자바 프로그램

6.1 자바 애플리케이션

6.1.1 애플리케이션 작성법

자바 애플리케이션은 자바로 구현된 독립적인 프로그램을 가리킨다. 자바 애플릿케이션을 작성하는 방법을 HelloWorldApp.java를 이용하여 단계별로 알아보자. 먼저 자바 애프리케이션을 위한 소스 프로그램인 HelloWorldApp.java을 작성한다.
        class HelloWorldApp {
            public static void main (String args[]) {
               System.out.println("Hello World!");
            }
        }
HelloWorldApp.java을 컴파일하면 HelloWorldApp.class라는 바이트 코드가 생성된다.
        % javac HelloWorldApp.java  
CLASSPATH 변수를 맞춰준다.
        setenv CLASSPATH home/classes
자바 인터프리터를 이용하여 자바 애플리케이션을 동작시킨다.
        % java HelloWorldApp
실행 결과는 다음과 같다.
         Hello World!

6.2 자바 애플릿

6.2.1 애플릿 작성법

자바 애플릿을 작성하는 방법을 Hello World 애플릿을 이용하여 단계별로 알아보자. 먼저, 자바 애플릿을 위한 소스 프로그램인 HelloWorldApplet.java을 작성한다.

	import java.applet.Applet;    
	import java.awt.Graphics; 
	public class HelloWorldApplet extends Applet {
  		public void init() {
        resize(150, 25);
         }
        public void paint(Graphics g) {
        g.drawString("Hello world!", 50, 25);
         }
    }
HelloWorldApplet.java을 컴파일하면 HelloWorldApplet.class라는 바이트 코드가 생성된다.
    % javac HelloWorldApplet.java  
자바 애플릿을 포함할 html 화일을 작성한다.
	<HTML>;
	<HEAD>
	<TITLE> Hello World </TITLE>
	</HEAD>

	<BODY>
	This is the applet:<P>
	<APPLET code="HelloWorldApplet.class" width=200 height=200 >
	</APPLET>
	</BODY>
	</HTML>
Netscape 2.0으로 애플릿을 포함한 그 HTML 문서를 로드하면 다음과 같이 Netscape 브라우저에 Hello World 란 문자가 출력된다.



6.2.2 애플릿 메소드들

6.2.2.1 애플릿 기본 메소드

애플릿을 동작시키는 기본 메소드들을 알아보기 위해 다음의 애플릿 예제를 살펴보자. 애플릿은 대부분 Applet 클래스에서 선언된 메소드를 오버라이드하여 사용한다 대부분의 애플릿은 주로 다음과 같은 흐름을 가지고 구성된다.
    import java.awt.Graphics;
    public class MyAppletClass extends java.applet.Applet {
        . . .
 	   public void init() { . . . }
       public void start() { . . . }
       public void stop() { . . . }
       public void destroy() { . . . }
       . . .
    }
기본적으로 사용되는 메소드들의 역할은 다음과 같다. 이러한 기본적인 애플릿 라이프 사이클 메소드 만으로 애플릿이 작성되지는 않는다. 애플릿은 웹 브라우저를 동적(애니메이션, 인라인 이미지, 상호작용 등)으로 만드는 역할을 해야함으로 이에 관한 여러 가지 필수적인 메소드를 필요로 한다.

6.2.2.2 애플릿 드로잉 메소드

애플릿은 Component 클래스에서 드로잉과 이벤트 처리에 괸한 메소드들을 상속받는다. 먼저 사용자 화면 구성을 위해 AWT 패키지에서 상속받은 대표적인 몇가지 메소드들을 알아보자. 애플릿 작성시에 화면 출력과 관계되어 오버라이드 되는 대표적인 메소드로 paint() 와 update()를 들 수 있다.
    public class Simple extends Applet {
      .....
      public void paint(Graphics g) { ... }
      public void update(Graphics g) { ... }
      ...
    }
위와 같은 드로잉 메소드는 이미지 처리를 위한 메소드와 함께 사용된다. 기본적으로 이미지 처리를 위해 사용되는 메소드는 getImage(), drawImage(), drawLine(), fillRect, drawString()등이 사용되며 이것은 paint() 메소드내에 정의되어진다. 현재 자바는 GIF, JPEG 만을 지원한다. getImage(), drawImage()를 이용한 예제는 다음과 같다.
	Image im;
	public void init() {
	  im = getImage(getDocumentBase(), "mkshin.gif");
	 }
	public vpid paint(Graphics g) {
	  g.drawImage(im,x,y,this);
	}
오디오 플레이를 위해서는 메소드는 play()를 사용한다.
 
    play(URL soundDirectory, String soundfile);
    play(URL soundDirectory);
예를들어 다음과 같이 시용할 수 있다.
    play(getDocumentBase(), "mkshin.au");

6.2.2.3 애플릿 오디오 메소드

오디오 클립을 로드하기 위해서는
 
    AudioClip sound = new AudioClip();
    sound = getAudioClip(getDocumentBase(), "mkshin.au");
저장 오디오를 플레이하기 위해서는
    sound.play();
    sound.loop();
등이 사용된다.

6.2.2.4 애플릿 이벤트 메소드

이벤드 처리를 위해서 오버라이드될 수 있는 대표적인 메소드들은 다음과 같다.

6.2.2.5 HTML 파라미터 값 처리

HTML 파라미터 값을 받기 위해서는 getParameter() 메소드를 사용한다.
	import java.applet.Applet;    
	import java.awt.Graphics; 
             
	public class DrawStringApplet extends Applet {

	  String input_from_page;

	  public void init() {
	    input_from_page = getParameter("String");
	  }
  
	  public void paint(Graphics g) {
	    g.drawString(input_from_page, 50, 25);
	  }
	}
HTML 문서는 다음과 같이 PARAM 태그를 사용하여 정의할 수 있다.
<HTML>
<HEAD>
<TITLE> Draw String 
</HEAD>

<BODY>
This is the applet:<P>
<APPLET code="DrawStringApplet.class" width=200 height=200>
<PARAM name="String" value="Anyone there!">
</APPLET>
</BODY>
</HTML>

6.3 프로토콜 핸들러(알파 3 버젼)

프로토콜 핸들러란 핫자바에 새로운 프로토콜을 간단히 확장시키는 기술이다. 지금까지는 JDK 1.0을 기준으로 설명했으나, 핫자바 JDK 1.0 버전이 아직까지 제공되지 않는 관계로, 핫자바 알파 버젼을 기준으로 설명함을 유의한다. 예를들어 multicast 라는 프로토콜 핸들러 이름을 갖는 멀티케스팅이 지원되는 핫자바를 구현해 보자.

작성된 프로그램이 위치할 디렉토리 구조는 다음과 같다(자바 알파 버전임을 유의).

classes  --- net  --- www --- protocol --- multicast --- handler.java
                                                         handler.class
먼저 프로토콜 핸들러를 위한 디렉토리를 만든다.
          classes/net/www/protocol/multicast
대부분 작업을 하는 디렉토리의 처음 시작은 그 이름에 관계없으나(본 예제에서는 classes로 시작했다.) 그 아래 디렉토리 이름은 반드시 net/www/protocol을 사용해야 한다. 마지막 디렉토리 이름인 multicast는 프로토콜 핸들러의 이름이다.

run 디렉토리 아래에 멀티캐스트 프로토콜 처리를 위한 코드인 handler.java 프로토콜 핸들러 소스를 작성한 후 컴파일한다.

       % cd net/www/protocol/run
       % javac handler.java
CLASSPATH 환경 변수를 셋팅한다.
        setenv CLASSPATH .:/home/classes
이미 핫자바 브라우저가 띄워져 있더라도 CLASSPATH 환경 변수를 세팅한 후에는 다 시 핫지바를 구동시킨다. 핫자바의 URL 입력란에 multicast:URL 형식으로 입력하면 특정 문서의 로드시에 멀티캐스팅 프로토콜이 적용되게 된다.

6.4 컨텐트 핸들러(알파 3 버젼)

컨텐트 핸들러는 특별한 MIME 타입의 테이타를 브라우징 하기 위해 핫자바 브라우저를 확장할 수 있는 기술로 예를들면, image/mpeg과 같은 타입의 데이터를 외부 뷰어 없이도 인라인으로 브라우징 할 수 있도록 확장시켜 준다. 지금까지는 JDK 1.0을 기준으로 설명했으나, 핫자바 JDK 1.0 버전이 아직까지 제공되지 않는 관계로 핫자바 알파 버젼을 기준으로 설명함을 유의한다. 예를들어 image/mpeg 컨텐트 핸들러로 하여금 MPEG 데이타를 외부 뷰어없이 브라우징 할 수 있도록 핫자바를 구현해 보자. 먼저 파일들이 위치할 디렉토리 구조는 다음과 같다.
classes ----  net -- www - content - mpeg - handler.java
                                            handler.class
먼저 디렉토리를 만든다.
      classes/net/www/content/mpeg
프로토콜 핸들러와 미찬가지로 작업을 하는 디렉토리의 처음 시작을 classes로 정의했으며, 그 아래 디렉토리 이름은 반드시 net/www/content을 사용해야 한다. 마지막 mpeg 디렉토리 이름은 켄텐트 핸들러의 이름이다.

mpeg 데이타 처리를 위한 코드(handler.java)를 작성한 후 컴파일 한다.

     % javac handler.java
CLASSPATH 환경 변수를 셋팅한다.
      setenv CLASSPATH .:/home/classes
image/mpeg의 처리를 위한 mailcap 파일을 수정한다. 이미 핫자바 브라우저가 띄워져 있더라 CLASSPATH 환경 변수를 세팅한 후 다시 띄운다. 이제 컨텐트 핸들러는 image/mpeg MIME 타입으로 된 문서를 로드할 때마다 자동적으로 불려지게 되어 처리된다.

7. 인터넷과 자바의 미래

자바는 현재 인터넷상의 차세대 객체지향 언어로서 사실상 인터넷 국제 표준언어의 역할을 한다 고 해도 과언이 아니다. WWW 브라우저의 75% 이상을 점유하고 있는 Netscape에서 자바를 사용하고 있으며, 마이크로소프트사도 자사의 인터넷 표준으로 자바를 채택하고 있다(이는 자바 가 업체 표준이 되었을때를 대비한 일종의 보험 성격이 강하지만). 또한 최근에는 실리콘 그래픽 스와 선 마이크로시스템즈는 차세대 가상현실 모델링 언어인 VRML(Virtual Relality Modeling Lanugage)를 자바에서 포함 할 수 있도록 계약을 체결하였다. 이밖에 IBM, SGI, Toshiba, Oracle, Boland, Adobe, Macromedia, Spyglass 등도 자바 라이센스를 계약하여 자사 제품에 자바를 지원한 새로운 제품울 현재 개발중이며, 자바스크립트 역시, 약 25개의 회사들이 공동으로 계약을 체결한바 있다. 이와 같은 현상은 인터넷의 미래가 곧 자바로 인해 결정된다는 것을 보여주는 한 단면이라고 하겠다.

자바는 WWW으로 성공적인 출발을 장식했다. 자바는 정보 창고인 인터넷의 활용 범위를 넓힐 수 있는 가이드라인을 제시했으며, 컴퓨터 벤더와 사용자 모두에게 상호운용성의 문제에 대한 해 결책을 제시하였다. 소프트웨어 측면에서도 자바가 있는 웹은 플러그-인 기능을 이용한 차세대 통합 응용 환경을 창출했으며, 이를 통해 인터넷은 더욱 더 확장 발전될 것으로 보인다.

자바 이전의 정보망 관점에서 보면, 현재 대분분의 정보 서비스 모델인 클라이언트-서버 모델은 사용자의 증가에 따라 보다 복잡한 메스 형태의 구조를 가지게 되고 이에 대한 애플리케이션과 서비스의 원할한 제공이 커다란 문제점으로 안고있었다. 결국 또한 자바로 인해 변화된 인터넷은 이러한 문제들의 모든 해결책을 제시한다. 사용자는 자신의 시스템에 핫자바와 같은 하나의 프로 그램만을 인스톨하면 (이것은 모든 플랫폼의 사이의 일관된 환경을 제공하게 된다), 새로운 애플 리케이션을 인스톨하거나, 그 페이지에 내장된 애플릿과는 무관하게 브리우징을 통해서 새로운 서비스를 제공받을 수 있다. 서비스 제공자 입장에서는 WWW 서버내에 애플릿을 포함시킴으로 서 일반 클라이언트의 기종에 관여할 필요가 없으며, 업그레이드도 용이하다. 이것은 데이타뿐만 아니라 코드를 함께 다운로드받음으로서 가능해진다.

이처럼 자바를 이용한 컴퓨터 세상은 궁극적인 네트웍 플랫폼으로 인터넷을 선택하게 되며, 컴퓨 터 산업 전반에 걸쳐 새로운 기술 혁신을 가져오게 될 것으로 기대된다.

참고문헌(References)

[Sun 95a]
Sun Microsystems, Java, The Language(Presentation material), 1995.
[Sun 95b]
Sun Microsystems, The Java Language Environment, A White Paper, 1995.
[Sun 95c]
Sun Microsystems, The Java Language Specification Version 1.0 Beta, 1995.
[Sun 95d]
Sun Microsystems, Java Application Programming Interface(API) User's Guide(JDK 1.0), 1996.
[Sun 95e]
Sun Microsystems, The Java Language Tutorial : Object-Oriented Programming for the Internet,
URL: http://java.sun.com/tutorial/index.html
[SunService 96]
SunService, The Java Language Tutorial : Your First Jolt and Second Jolt,
URL: http://www.sun.com/sunservice/suned/javaday
[Frank 96]
Frank D. Greco, Java (in plain English): An Introduction, JavaWorld 1996. 3
URL: http://http://www.javaworld.com/
[Nelson 96]
Nelson Yu, The AWT Tutorial,
URL: http://ugweb.cs.ualberta.ca/~nelson/java/AWT.Tutorial.html
[Gosling 95]
James Gosling, Java & HotJava :A Platform for Building Safe Distributed Applications(Presentation matirial), 1995.
[Elliotte 96]
Elliotte Rusty Harold, Brewing Java: A Tutorial, 1995.
URL: http://sunsite.unc.edu/javafaq/javatutorial.html
[Hecker 96]
JavaScript, 1995.
URL: http://www.access.digex.net/~hecker/netscape/majug/javascript/