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


다음 페이지 색인


자바 - 웹 프로그래밍의 진한 커피향

 

자바는 커피 전문점 이름이다. 이 이름이 어느날부터인지 많은 프로그래머들과 인터넷 사회의 관심을 모으기 시작했다.
이제 인터넷을 아는 사람이라면 자바를 접해보지 못한 사람은 거의 없을 것이다. 자바는 월드와이드웹(WWW) 상에서 프로그램을 실행할 수 있는 네트웍 기반의 아주 특별한 언어로 인터넷 프로그래밍 언어의 표준으로 자리잡아가고 있다.
자바가 각광을 받게 된 데에는 여러 가지 이유를 들 수 있겠지만 그 무엇보다도 인터넷 상에서 실행되는 프로그램이라는 특성이 인터넷의 대중화에 힘입어 대중적 확산에 기여한 점을 주목할 수 있다. 게임의 모습으로 동적인 그래픽의 모습으로 인터넷 사용자에게 보여준 화려하고도 친숙한 첫모습이 급속한 확산을 부채질했음이 분명하다.
또한 일단 프로그램을 작성하면 여러 운영 체제를 가로질러 거의 동일한 모습으로 실행될 수 있다는 "Write once, run everywhere"라는 슬로건도 여간 매혹적인 특성이 아닐 수 없다.
프로그래머의 입장에서 보자면 이 매력적인 프로그래밍 언어 혹은 프로그램 운영 환경(왜 자바가 프로그램 운영 환경이기도 한지에 대해서는 나중에 논의해보자.)이 기존의 대중적인 프로그래밍 언어 C/C++와 문법적으로 거의 동일하다는 점에서 어색하지 않고 쉽게 배울 수 있어서 받아들이는 데 많은 시간을 들이지 않아도 되었다. (이 간단한 튜토리얼은 C/C++ 문법에 이해가 있는 사람을 가정하고 자바로의 이전에 작은 도움을 줄 수 있도록 구성하었다.)
자바는 재미있다.
자바는 쉽다.
이 두 가지를 확신하면서 시작해보자.
먼저 한 깜찍한 애플릿을 소개한다.
어느 웹 사이트에 들어 있는 자바 애플릿(애플릿은 뒤에 가서 설명하겠지만 작은 프로그램이란 뜻이다)이다. 이 애플릿은 고전적인 다중 쓰레드(쓰레드는 뒤에서 다시 다룬다)의 동기화 문제를 다룬 것으로 자바의 멀티 쓰레딩 기능을 잘 예시하는 프로그램이다. 귀여운 철학자들의 모습이 프로그래머들을 자바의 세계로 끌어들인다.
[그림] 고전적인 동기화 문제를 애플릿으로 만든 '철학자들의 만찬'

자바의 홈페이지(http://java.sun.com)에 한 번이라도 가 본 사람은 끓고 있는 커피 로고를 보았을 것이다. 따뜻한 한잔의 커피와 함께 하는 인터넷, 바로 자바의 세계이다.

자바의 특징

자바는 인터프리터형 프로그래밍 언어이다.
즉, 자바는 실행 시에 코드를 읽어들여 기계어로 번역하면서 수행되는 프로그램을 만드는 언어이다.
그렇다면 C나 C++, 파스칼 등과 같이 미리 기계어로 번역하여 변환된 바이너리를 수행하는 컴파일형 프로그래밍 언어에 비해 수행 속도가 현저하게 떨어지는 인터프리터 방식을 채택한 자바가 어떻게 살아남을 수 있을 것인가 걱정이 되지 않을까?
자바는 베이직과 같은 방식의 언어일까?
일단 그 대답은 '아니다' 쪽이다.
자바는 컴파일과 인터프리팅이 혼재하는 모델을 채택하고 있다.
컴파일을 하여 가상적인 이진 코드(좀더 정확하게 표현하여 자바에서는 바이트코드(bytecode)라고 부른다. 비트 단위가 아니라 바이트 단위의 문자로 구성되는 파일이기 때문이다.)로 변환한 다음에 그 이진 코드를 번역하면서 수행하는 방식이다.
가상적인 이진 코드는 플랫폼에 독립적인 형태로 번역이 용이하도록 설계된 자바만의 독특한 형식을 가진다. 자바는 이러한 방식을 통해 플랫폼 독립성과 수행 성능이라는 두 마리 토끼를 잡으려 하고 있다. 하지만 아직은 만족할 만한 수행 성능을 보여주지 못하고 있는 것이 현실이다.
 

자바의 프로그래밍 모델

  • 기존의 프로그래밍 모델(C)
    컴파일->링크->실행 파일(바이너리) 
  • 자바의 프로그래밍 모델
    컴파일->실행 파일(바이트코드)->인터프리팅

자바는 인터프리터형 언어이지만 수행 성능과 보안, 아키텍쳐 독립성 등의 이유로 인터프리팅에 앞서 컴파일을 거치는 독특한 형태를 지니고 있다. 

 

자바의 특징에 대하여 자바를 만든 썬 마이크로시스템즈 사의 주장을 들어보자. 자바의 기반 철학을 이해하는 데 큰 도움을 얻을 수 있다.
다음은 자바 공식 문서(Java White Paper)에서 발췌 번역한 것이다.

1) 간단하다. 객체 지향이다. 친숙하다.

자바의 주된 특징으로 기존 소프트웨어 개발자들이 큰 프로그래밍 교육 없이 프로그램을 할 수 있는 간단한 언어임을 들 수 있다.
자바의 기본 개념을 쉽게 이해할 수 있어서 프로그래머들은 시작부터 효율적인 프로그래밍을 할 수 있다.
또 자바는 밑바닥에서부터 객체 지향적이다.
객체 기술은 30년 간의 형성 기간을 거쳐 마침내 자바를 통해 프로그래밍의 주류로 들어설 수 있게 된 것이다.
우연하게도 자바에서는 분산 환경, 클라이언트-서버 기반 시스템의 요구가 객체 기반 소프트웨어의 캡슐화된, 메시지 전달 패러다임과 함께 만나고 있다.
점점 더 복잡해지는 네트웍 기반 환경에서 프로그래밍 시스템은 반드시 객체 지향 개념을 채택해야 한다.
자바는 간명하고 효율적인 객체 기반 개발 환경을 제공한다.

자바를 사용하는 프로그래머는 기본 데이터 유형으로부터 I/O, 네트웍 인터페이스, 나아가 그래픽 사용자 인터페이스 툴킷에 이르는 기능을 제공하는 검증된 객체 라이브러리를 기본 제공받는다. 또 이 라이브러리들을 확장하여 새로운 기능을 추가할 수도 있다.
비록 C++를 채택하지는 않았지만 자바를 C++와 가능한 한 유사하게 보이도록 함으로써 자바는 불필요한 C++의 복잡성을 제거하면서도 친숙한 언어가 될 수 있었다.
자바가 수많은 객체 지향 특징과 C++의 외양을 그대로 유지하였기 때문에 프로그래머들은 손쉽게 자바로 이전하여 빠르게 생산성을 갖출 수 있다.

2) 신뢰성과 보안성이 있다.

자바는 높은 신뢰도를 가진 소프트웨어 제작에 맞게 설계되어 광범위한 컴파일 시 검사와 실행 시 검사를 제공한다.
또 언어의 여러 특성들이 프로그래머를 신뢰도 있는 프로그래밍 습관으로 이끈다.
포인터와 포인터 연산을 사용하지 않는 메모리 관리 모델은 C/C++ 프로그래머를 미치게 하는 프로그래밍 에러들을 제거해버렸다.
자바 언어 코드를 개발할 때에는 시스템이 재빨리 에러들을 찾아줄 것이며 제품 코드가 선적된 후에도 커다란 문제들이 잠복해 있지는 않음을 확신할 수 있을 것이다.

자바는 분산환경에서 작동하도록 설계되었다. 이것은 보안이 아주 중요함을 뜻한다.
자바는 언어와 런타임 시스템 안에 보안 기능이 설계되어 있기 때문에 외부로부터 침해받지 않는 프로그램을 개발할 수 있게 해준다. 자바 응용 프로그램은 네트웍 환경에서 물밑에 숨어서 바이러스를 만들거나 파일 시스템을 침해하려는 권한 없는 코드의 침해로부터 안전하다.

3) 아키텍쳐 중립적이며 이식성이 높다.

자바는 이질적인 네트웍 환경으로 배치될 수 있는 프로그램을 지원하도록 설계되었다. 이같은 환경에서는 응용 프로그램들이 다양한 하드웨어 아키텍쳐 위에서 실행될 수 있어야만 한다.
이런 다양한 하드웨어 플랫폼 안에서는 응용 프로그램들이 다양한 운영 체제 위에서 다수의 프로그래밍 언어 인터페이스와 상호 작용하면서 실행되어야 한다.
다양한 운영 체제를 수용하기 위해 자바 컴파일러는 바이트코드(다수의 하드웨어 및 소프트웨어 플랫폼에 효율적으로 코드를 전송하기 위해 설계된 아키텍쳐 중립적인 중간 형태)를 생성한다.
자바의 인터프리팅 속성은 바이너리 배포의 문제와 버전 문제를 한꺼번에 해결한다.
즉, 동일한 자바 언어 바이트코드가 모든 플랫폼 위에서 실행되는 것이다.

아키텍쳐 중립성은 진정한 이식 가능 시스템의 단지 한 부분일 뿐이다.
자바는 기본 언어 정의를 엄격하게 함으로써 이식성에서 한 단계 더 나아간다.
기본 데이터 유형의 크기와 그 연산자의 행동을 확고하게 규정한다. 프로그램들은 모든 플랫폼에서 동일하다.
데이터 유형의 하드웨어 혹은 소프트웨어 아키텍쳐 차이에 따른 비호환성은 존재하지 않는다.

자바의 아키텍쳐 중립적이고 이식 가능한 언어 환경은 자바 가상 기계(Java Virtual Machine)로 알려져 있다.
이것은 자바 언어 컴파일러들이 코드를 생성할 대상이 되는 추상화된 기계의 명세이다.
특정 하드웨어와 소프트웨어 플랫폼을 위한 특정한 자바 가상 기계의 구현이 가상 기계의 구체적인 구현을 제공한다.
자바 가상 기계는 주로 이식 가능한 시스템 인터페이스의 산업 표준을 정의하는 POSIX 인터페이스 명세에 기반한다.
새로운 아키텍쳐에서 자바 가상 기계를 구현하는 것은 대상 플랫폼이 다중 쓰레딩(multi-threading)과 같은 기본적인 요건을 만족하는 한 상대적으로 수월한 일이다.

 

자바의 플랫폼적 속성

  • 자바 프로그램이 플랫폼 혹은 아키텍쳐 독립적으로 수행될 수 있는 비결은 자바의 독특한 플랫폼적 속성에 있다. 
  • 자바는 기존의 운영 체제 위에 자바 프로그램을 수행할 수 있는 독특한 소프트웨어 플랫폼인 자바 가상 기계(Virtual Machine)를 필요로 한다. 
  • 자바의 이식(port) 작업은 본질적으로 자바 VM의 이식.
    자바는 멀티 쓰레딩을 지원하는 대부분의 현대 운영 체제로 이식되었으며 또 여러 운영 체제에서 실행되는 넷스케이프 브라우저는 자바 애플릿 실행을 위하여 각각 별도의 자바 VM을 구현하고 있다.

 

4) 높은 수행성능

수행 성능은 언제나 고려 대상이다.
자바는 인터프리터가 런타임 환경을 검사할 필요 없이 실행될 수 있는 구성을 채택하여 뛰어난 성능을 얻는다.
리소스 관리기(garbage collector)가 메모리가 필요할 때에만 사용가능함을 최대한 보장하기 위해, 자동으로 낮은 우선순위의 백그라운드 쓰레드로 실행되어 나은 수행 성능으로 이끈다.
막대한 컴퓨팅 능력을 요구하는 프로그램은 컴퓨팅이 많은 부분을 본래의 기계 코드로 재작성하여 자바 환경과 인터페이스하게 할 수 있다.
일반적으로 사용자들은 대화형 응용 프로그램은 비록 인터프리팅되고 있음에도 불구하고 빠르게 반응한다고 느낄 것이다.

 

5) 인터프리터형이다. 쓰레드를 지원한다. 동적 연결에 기반하여 수행한다.

자바 인터프리터는 인터프리터와 런타임 시스템이 이식(port)된 모든 기계 위에서 자바 바이트코드를 직접 실행할 수 있다.
자바 시스템과 같은 인터프리팅 환경에서는 프로그램의 링크 단계가 간단하고, 증가식이며, 부담이 적다.
전통적으로 부담이 큰 컴파일, 링크, 검사 주기에 비해 프로토타입 작업, 실험, 신속한 개발이 일반적인 경우가 되므로 훨씬 더 빨라진 개발 주기를 만끽할 수 있다.

핫자바(HotJava) 월드와이드웹 브라우저와 같은 현대의 네트웍 기반 프로그램은 전형적으로 동시에 몇 가지 일을 할 필요를 가진다.
핫자바를 사용하는 사용자는 이미지를 다운로드받으면서 페이지를 스크롤하는 동시에 몇 가지 애니메이션을 실행시킬 수 있다.
자바의 다중 쓰레딩 기능은 동시에 많은 쓰레드를 실행시킬 수 있는 프로그램을 만들 수단을 제공한다.
다중 쓰레딩(mutil-threading)은 이렇게 최종 사용자와 높은 수준의 상호 작용을 가능하게 해준다.

자바는 정교한 동기화 기본 함수들을 추가하여 언어 수준에서 다중 쓰레딩을 지원한다.
언어 라이브러리에는 Thread 클래스가 있으며 런타임 시스템은 모니터와 조건 잠금 원시 함수를 제공한다.
이에 더하여, 라이브러리 수준에서 높은 수준의 자바 시스템 라이브러리는 안전하게 쓰레드를 사용할 수 있도록(thread-safe) 작성되었다.
즉, 라이브러리가 제공하는 함수들을 동시에 실행되는 다수의 쓰레드 환경에서 충돌 없이 사용할 수 있다.

자바 컴파일러는 컴파일 시에 엄격하게 정적인 검사를 하지만 언어와 런타임 시스템은 동적으로 링크를 수행한다.
클래스들은 필요할 때에만 링크된다.
새로운 코드 모듈을 필요에 따라 다양한 원천으로부터 링크할 수 있으며 심지어 네트웍 너머의 원천으로부터도 링크할 수 있다.
핫자바 브라우저와 유사한 응용 프로그램의 경우, 대화형의 실행 코드를 어느 곳으로부터든지 적재할 수 있어서 응용 프로그램을 투명하게 갱신할 수 있다.
즉, 끊임없이 진화하는 온라인 서비스가 가능하다는 것이다.
계속 혁신적이고 참신하게 갱신할 수 있어 많은 고객을 모을 수 있으며 인터넷 상에서의 전자 상거래 성장을 촉진시킬 것이다.

 

옛날 이야기-자바의 탄생

자바의 탄생 배경을 알면 자바 언어의 특성에 대한 이해가 쉬워진다.
자바는 가전 제품에 들어갈 소프트웨어를 만들기 위해 탄생했다. 자바를 개발한 사람은 선 마이크로시스템즈 사의 제임즈 고슬링(James Gosling)으로 그는 특정한 컴퓨터 칩에 대해 컴파일하여야 하는 C 언어의 문제점, 또 가전 제품의 긴 수명으로 인한 완벽한 호환을 가진 소프트웨어의 개발 요구, 가전 제품에 사용될 소프트웨어의 높은 신뢰성 필요 등의 문제들에 봉착했다.
이 문제들의 해결책으로 탄생한 것이 C와 C++의 불필요한 부분이나 문제가 될 부분들을 제거한 새로운 언어인 자바였다. 최초로 자바를 이용한 프로젝트는 가전 제품과 전기 기기들을 통합하여 가정 환경에 새로운 인터페이스를 제공하는 그린 프로젝트(Green Project)였다. 그러던 1993년, 그래픽 기반의 월드와이드웹이 발표되고 자바의 개발자들은 곧 이러한 웹 기반의 응용 프로그램에는 자바와 같은 기계 중립적인 언어가 이상적이라는 것을 발견하였다. 그리하여 그들이 개발한 것이 나중에 핫자바(HotJava)로 이름이 바뀐 웹러너(WebRunner)라는 웹 브라우저였다. 이것이 최초로 자바를 지원한 웹 브라우저가 되었다. 자바라는 이름은 지역의 어느 커피점 안에서 얻었다. 그래서 지금은 웹 페이지에서 항상 끓고 있는 커피를 볼 수 있다.
자바가 원래 가전 기기 제어를 위해 고안되었다는 사실은 현재 이러한 기기용으로 자바의 부분집합이라 할 수 있는  PersonalJava(네트웍 연결 가능한 개인용 소비 기기의 자바 소프트웨어 플랫폼), EmbeddedJava(Embedded 장치-이동 전화, 삐삐, 사무실 주변 기기, 네트웍 라우터, 스위치 등의 장치- 전용 자바 소프트웨어 플랫폼)가 각광을 받고 있는 현실을 잘 설명해준다.

객체, 클래스, 클래스 파일

시작에 앞서 자바에서 가장 먼저 부닥치게 되는 개념을 설명하고자 한다.
자바는 C++ 유사하게 클래스 개념으로 하나의 객체를 표현한다. C++의 클래스가 멤버 변수와 멤버 함수로 구성이 되듯이 자바의 클래스도 멤버 변수에 해당하는 필드와 멤버 함수에 해당하는 도구(method)로 구성되어 있다.
클래스 개념에 익숙하지 않은 C 프로그래머라면 확장된 구조체(struct)라고 생각해도 좋다. 즉 구조체는 변수들만으로 구성되어 있지만 클래스는 변수에다 함수를 추가한 개념이다.
 

객체와 클래스

일반적으로 객체는 상태와 행위로 구성된다. 예를 들어 에어콘이라는 객체를 생각해보자. 
에어콘 객체는 전원의 ON/OFF 상태, 냉방 강도, 현재 온도 등 몇 가지 상태 정보를 가진다. 
이것을 필드로 볼 수 있다. 
그리고 메소드에 해당하는 것으로 전원끄는 행위와 냉방 수행 행위를 들 수 있다. 
자바의 문법으로 에어콘 객체를 표현해보면 다음과 같이 될 것이다. 

class AirCon {
    // 아래 세 가지는 멤버 필드로 상태 정보를 가진다.
    boolean isPowerOn; // 전원이 켜지면 true 값을 꺼지면 false 값을 가진다.
    int coolingLevel; // 냉방 강도에 따라 1에서 5의 값을 가진다.
    int currentTemperature; // 현재 온도
    // 아래는 이 객체의 세 가지 메소드이다. 
    void setPower(boolean on) {
        isPowerOn=on; // on 인자가 true이면 전원을 켜고 false이면 전원을 끈다.
    }

    void setCoolingLevel(int level) { 
        coolingLevel=level; // 현재의 냉방 강도를 설정한다. 
    } 

    void runCooling() { 
        /* 실제 냉방 행위가 여기에 들어간다. 
           현재 온도를 측정하고 지정된 냉방강도에 맞게 냉방 모터를 더 빨리 돌릴 것인지 
           여부를 결정한다. 
        */ 
    } 
}

모든 자바 프로그램은 인터프리터가 기계 독립적인 바이트 코드 파일을 읽어들여 실행시키는데 이 바이트 코드 파일 하나에는 하나의 클래스가 대응된다. 즉, 자바의 바이트 코드 파일은 각각이 하나의 클래스를 대표하고 실제로 그 파일의 확장자는 .class이다. 텍스트로 된 소스 파일은 확장자가 .java이다. 만약에 하나의 자바 소스 파일에 몇 개의 클래스가 선언이 되어 있다면 이 소스 파일을 컴파일하면 세 개의 바이트 코드 파일이 생성되고 각자의 이름은 각 클래스 이름에 .class 확장자가 붙은 모양이 된다. 자바의 실행 파일이라 할 수 있는 이들 바이트 코드 파일을 통상 클래스 파일이라 부른다.
자바로 만든 프로그램은 소스 파일이 없더라도 이들 클래스 파일만 있으면 실행할 수 있다.

자바 설치

자바를 자신의 시스템에 설치하자.
썬에서는 JDK(Java Development Kit, 자바 개발 도구)라는 이름으로 컴파일러, 인터프리터 등의 여러 자바 환경 도구들 배포고 있다. 자바는 이론적으로 거의 모든 시스템에 이식 가능하지만 썬의 자바 홈페이지(http://java.sun.com)에서 바로 구할 수 있는 JDK는 솔라리스 2.x 스팍 버전과 Win32(윈도우95와 윈도우NT), 그리고 맥 OS용(시스템 7.5)이다. 여기서는 윈도우95를 기준으로 설명한다.
1998년 5월 현재 1.1.6 버전이 나와 있다.
압축을 풀어 설치하면 \jdk1.1 디렉토리가 생성된다.
[그림] 윈도우95에 설치된 JDK 디렉토리
autoexec.bat 파일에 \jdk1.1\bin 디렉토리를 경로로 지정하면 JDK 설치는 끝나는 셈이다. 설치한 후에 'Cannot find class ...' 에러가 발생하는 경우엔 다음과 같이 클래스 경로를 autoexec.bat 파일에 함께 지정한다. C:\jdk1.1 디렉토리에 JDK를 설치한 예이다.

set PATH=%PATH%;c:\jdk1.1\bin;
set CLASSPATH=c:\jdk1.1\lib\classes.zip;.;

클래스 경로를 지정할 때 현재 디렉토리(.)를 함께 지정한다.
솔라리스에서는 설치한 디렉토리가 /usr/java인 경우 다음과 같이 클래스 경로를 지정한다.

PATH=${PATH}:/usr/java/bin
export PATH
CLASSPATH=/usr/java/lib/classes.zip:.
export CLASSPATH
set path=( ${path} /usr/java/bin )
setenv CLASSPATH /usr/java/lib/classes.zip:.

JDK 설치가 끝나면 필수적인 자바 프로그래밍 환경은 갖춘 것이다.

자바 환경 도구의 사용법

자바 환경 도구란 /java/bin 디렉토리에 들어 있는 여러 가지 실행 프로그램들을 말한다. 자바는 앞에서도 설명한 대로 컴파일과 인터프리트를 모두 수행해야 하는 언어이므로 컴파일러, 인터프리터를 포함한 몇 가지 환경 도구를 제공한다. 윈도우95에서 환경 도구들을 실행하려면 도스 창 프롬프트에서 실행한다. 실제로 다음 예제 파일을 이용해서 자바 환경 도구를 사용해보자. 이 자바 프로그램은 간단하게 도스 창에서 "안녕, 자바"라는 텍스트를 출력한다.

HelloApp.java
 

1) javac : 자바 컴파일러이다. 텍스트 소스 파일인 *.java 파일을 기계 독립적인 바이트 코드, *.class로 컴파일해준다. 인자는 자바 소스 파일 이름이다. 일반적으로 다음 예와 같이 사용한다.
사용 예 : javac HelloApp.java
필요에 따라 선택사항을 지정해야 하는 경우가 있다.
① -classpath '경로' : javac가 클래스를 검색할 경로를 지정한다. 이 값을 지정하면 이미 지정된 CLASSPATH 환경 변수 값은 오버라이드된다. 디렉토리 구분은 세미 콜론(;)으로 한다.
사용 예 : javac -classpath .;C:\java\lib\classes.zip HelloApp.java
② -d '디렉토리' : 클래스 계층 구조의 루트 디렉토리를 지정한다.
사용 예 : javac -d C:\java\demo\hello HelloApp.java
③ -g : 디버깅 테이블을 생성하게 해준다. 디버깅 테이블은 줄 번호와 지역 변수 정보-자바 디버깅 도구에 의해 사용되는 정보-를 포함하고 있다. 최적화(-O) 선택사항이 함께 주어지지 않으면 단지 줄 번호만 생성된다.
④ -nowarn : 경고 메시지를 출력하지 않는다.
⑤ -O : static, final and private 도구들에 인라인 기법을 사용하여 최적화한다. 이렇게 되면 클래스 파일은 크기가 커진다. (C++의 inline 예약어와 같은 방법이다. 이 방법은 함수 점프의 오버헤드를 막기 위해 컴파일 시에 실제 코드를 각 함수 대신에 직접 삽입하는 방법을 쓰는 것이다.)
⑥ -verbose : 컴파일러와 링커에게 현재 컴파일되고 있는 소스 파일과 적재되는 클래스 파일의 이름을 출력하게 한다.

2) java : 자바 인터프리터이다. 클래스 파일을 실행한다. 클래스 이름을 인자로 받는다.
사용 예 : java HelloApp
javaw : 같은 자바 인터프리터이지만 콘솔(윈도우 95에서 도스 창)에서 독립된 윈도우를 만들어낸다. 콘솔로의 출력은 행하지 않는다. 예를 들어 애플릿뷰어를 다음과 같은 방법으로 실행해서 두 결과를 비교해 보라.
java(w) sun.applet.AppletViewer example1.html
javaw로 실행한 경우에는 콘솔로 출력을 하지 않을 것이다.
3) javadoc : class 파일의 패키지, 계층 구조, 도구 등을 HTML 문서로 만들어준다. 클래스 이름을 인자로 받는다.
사용 예 : javadoc HelloApp
4) javah : 해당 애플러케이션의 C 스텁 헤더 파일을 생성해준다. 인자로 클래스 이름을 받는다.
사용 예 : javah HelloApp
5) javap : 자바 역어셈블러이다. 클래스 파일을 원시 코드로 역어셈블해준다. 완전한 소스 파일을 구할 수는 없다. 인자로 클래스 이름을 받으며 역어셈블한 결과를 표준 출력(콘솔)으로 내보낸다.
사용 예 : javap -c HelloApp > HelloApp.txt
6) jdb : 자바 디버거이다. 유닉스의 디버거인 dbx와 유사한 기능을 갖고 있으며 인자로 클래스 이름을 받는다. 디버거 프롬프트에서 help를 입력하면 사용가능한 명령어들을 알 수 있다. 디버거를 제대로 사용하려면 클래스 파일을 컴파일할 때 dbx의 경우와 같이 -g 옵션으로 컴파일해야 한다.(예 : javac -g HelloApp.java)
사용 예 : jdb HelloApp
jdb
에서 사용되는 명령어는 다음 링크를 참조한다. JDB Command List
통합 디버깅 환경이 필요하다면 상용 자바 개발 환경을 구입하라. (볼랜드 J빌더, 시맨텍 비주얼 까페, 썬 자바워크샵, MS 비주얼J++ 등이 있다.)
7) appletviewer : HTML 문서에 포함되어 있는 애플릿을 실행시켜준다. 일종의 웹 브라우저로서 <applet> 태그만 찾아서 애플릿을 보여준다. 인자로 URL이나 HTML 문서 파일 이름을 받는다.
다음 그림은 JDK의 java/demo/TumblingDuke 디렉토리에서 애플릿뷰어를 실행한 결과이다.
[그림] 애플릿뷰어 실행 예
사용 예 : appletviewer example1.html

이외에도 여러 가지 환경 도구가 JDK에 함께 제공되므로 좀더 자세히 알고 싶으면 http://java.sun.com/products/jdk/1.1/docs/tooldocs/ 사이트를 참고하.



다음 페이지 색인