Recommanded Free YOUTUBE Lecture: <% selectedImage[1] %>

Contents

Introduction to Java

지금까지의 장들에 컴퓨터 하드웨어와 컴퓨터 소프트웨어, 비트와 바이트 , 기계어, 컴파일, 인터프리터 그리고 가상기계에 대해서 알아보았다. 이번장부터 우리가 알고자하는 자바에 대해서 본격적으로 다루게 될 것이다.

이번장에서 다루는 내용들
  • Java 5.0 설치하기
  • Hello World 프로그램
  • Java 바이트코드
  • 편집기를 이용해서 소스프로그램 만들기
  • 자바 프로그램 실행하기
이 문서는 Java 2 Standard Edition version JSE 5.0 혹은 그 이상의 버전을 기준으로 작성되었다. 가능하면 이 버전을 이용해서 문서를 읽기 바란다. 문제 자바를 얻는데 얼마의 비용이 필요한가.

자바 설치하기

http://chortle.ccsu.edu/java5/Notes/chap05/ch05_2.html

자바는 다음과 같은 컴퓨터 환경을 필요로 한다.
  • Windows XP
  • Windows 2000
  • 모든 버전의 Unix(:12)(리눅스와 솔라리스 포함)
  • Mac OS가 설치된 Apple 컴퓨터
자바를 설치하기 위해서는 250메가 바이트 이상의 여유공간을 가진 하드디스크를 필요로 한다. 애플컴퓨터와 리눅스가 설치된 컴퓨터는 자바가 아마도 자바가 이미 설치되어 있을 것이다. 이 경우 오래된 버젼의 자바가 설치되어 있을 수도 있는데, 버전이 5.0 이상인지 확인하도록 하자.

이 문서는 리눅스(:12)와 Java 5.0을 기준으로 작성할 것이다. 윈도우즈 환경에서 문서를 읽는다면 약간의 차이가 있을 수 있을 것이다. 그렇지만 언어자체에 있어서는 차이점이 없으니 큰 문제는 없을 것이다. 그렇다 하더라도 가능하면 리눅스(:12)를 설치하기 바란다.

문제 모뎀을 이용해서 자바를 다운로드 받을 수 있을까 ?

자바 설치하기

윈도우즈 환경 기준

리눅스 환경

http://java.sun.com/javase/downloads/index.jsp 에서 다운로드 받을 수 있다. RPM과 인스톨스크립트 두가지 방식으로 배포하는데, 여기에서는 인스톨스크립트를 기준으로 설명하도록 하겠다.

인스톨 스크립트에 다음과 같이 실행권한을 주고 실행하도록 한다.
# chmod +x jdk-6-linux-i586.bin
# ./jdk-6-linux-i586.bin

그러면 현재 디렉토리에 jdk1.6.0이란 디렉토리가 만들어지고, 이 밑에 자바프로그램들이 깔리게 된다. 이제 이 디렉토리를 적당한 위치로 옮기면 된다. /usr/local/java로 옮기도록 하자.
# mv jdk1.6.0 /usr/local/java

각종 자바 실행 프로그램들은 /usr/local/java/bin 밑에 설치가 된다.

리눅스 운영체제는 환경변수 PATH에 지정된 경로에 대해서 실행파일을 찾는다. 그러므로 /usr/local/java/bin이 환경변수(:12) PATH에 등록되어 있어야 여러가지 자바 프로그램들을 실행시킬 수 있다. 우선 설정되어 있는 PATH 변수에 어떤 경로가 지정되어 있는지 확인해 보도록 하자.
$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/bin/X11

환경변수에 Java 실행경로가 지정되어 있지 않으니, 다음과 같은 방법으로 PATH에 추가시키도록 한다.
# export PATH=$PATH:/usr/local/sbin

패스경로가 제대로 지정되어 있는지 확인하기 위해서 직접 자바 프로그램을 실행시켜 보도록 하자.
$ javac
Usage: javac <options> <source files>
where possible options include:
  -g                         Generate all debugging info
  -g:none                    Generate no debugging info
  -g:{lines,vars,source}     Generate only some debugging info
...

간단한 자바프로그램 작성

자바 소프트웨어를 설치했으니, 이제 간단한 프로그램을 만들어 보도록 하자. 다음 프로그램은 컴퓨터 모니터에 Hello World!!!를 출력시키는 일을 한다. 자세한 설명은 나중에 하도록 하겠다.
class Hello
{
  public static void main ( String[] args )
  {
    System.out.println("Hello World!!!");
  }
}
프로그램은 vi(:12)와 같은 편집기를 통해서 작성하도록 하자. 만약 vi가 익숙치 않다면 노트패드와 비슷한 환경을 제공하는 kate, gedit와 같은 프로그램을 사용할 수 도 있다. 다음은 kate에디터를 이용한 편집 화면이다. 가능하면 vi를 이용하는게 여러모로 편할 것이다.
보내는 사람 Java

이제 이 소스 프로그램을 하드디스크에 파일 형태로 저장하도록 하자. 파일의 이름은 Hello.java로 한다. 반드시 이 이름으로 저장해야 한다는 점에 주의 하도록 한다.

소스 프로그램은 텍스트 파일로 프로그래밍 언어로 씌여진 문자들을 포함한다. 이 파일은 문자 정보들을 가지고 있기 때문에 컴퓨터 시스템에 의해서 바로 실행될 수 없다.

문제 소스 프로그램이 컴퓨터 시스템에서 실행되기 위한 두가지 방법을 나열하시오.

ByteCodes

소스 프로그램은 Translation과정과 Interpretation두 가지 방식을 통해서 실행될 수 있다. 자바는 두가지 방법을 결합해서 사용한다. 자바 소스 프로그램은 실행되기 전에 bytecodes로 변환 (translated)이 된다. 자바 바이트코드는 자바 프로세서를 위한 machine instruction이다. 즉 가상의 기계를 만들고 그 위에서 가상의 기계를 위한 바이트 코드를 해성하는 방식이다. 이 자바로된 가상기계를 보통 자바가상머신이라고 부른다. 이러한 디자인은 자바가상머신이 설치되어 있다면, 컴퓨터 프로세스나 운영체제의 종류에 관계없이 프로그램이 실행될 수 있다는 장점을 가진다.

자바 프로그램은 자바 프로세서 위에서 작동을 한다. 그러므로 우리는 소스 프로그램을 바이트코드로 변환해야만 한다. 아래의 그림은 Hello.java가 바이트코드로 변환되는 과정을 보여주고 있다. 변환된 바이트 코드는 Hello.class라는 이름의 파일로 하드디스크에 저장된다.

attachment:Figure05-1.gif

그림에서 소스 프로그램인 Hello.Javajavac라는 프로그램에 넘겨진다. javac는 소스프로그램을 바이트코드로 변환하기 위한 컴파일러(translator)로 소스프로그램을 바이트코드로 변환해서 Hello.class라는 이름의 파일로 저장한다.

자바 컴파일러는 Intel System 이든지, Macintosh 시스템이든지에 관계 없이 동일한 바이트코드를 만들어내며, 이러한 특징으로 Intel 컴퓨터에서 만들어진 바이트코드라 할지라도 다른 종류의 컴퓨터에서 그대로 실행될 수 있다.

문제 당신의 컴퓨터에 자바 프로세서가 설치되어 있다면, 바이트코드로 된 프로그램을 실행시킬 수 있습니까 ?

Java Virtual Machine

http://chortle.ccsu.edu/java5/Notes/chap05/ch05_10.html

여러분이 자바 프로세서라는 하드웨어를 가지고 있는 건 아니다. 여러분은 PC 혹은 Apple 컴퓨터를 가지고 있을 뿐이다.

여기에서 확실해 해 두어야 할 것은 자바 프로세서는 하드웨어가 아닌 소프트웨어라는 점이다. 이 소프트웨어는 소스 프로그램을 읽어 들여서 바이트코드로 변환하는 일을 한다. 이렇게 변환된 자바 바이트코드는 자바 interpreter에 의해서 실행이 된다. 다음은 이러한 과정을 보여주는 그림이다.

attachment:Figure05-2.gif

그림에서 Java Interpreter는 컴퓨터 시스템에서 실행되는 프로그램이며, 각각의 컴퓨터 시스템 마다, 거기에 맞는 자바 인터프리터를 가지고 있다. Actual Processor은 컴퓨터 프로세서의 하드웨어 칩이다.

자바 인터프리터는 컴퓨터 시스템 위에서 작동하는데, 하드웨어 프로세서 처럼 자바 바이트코드를 번역한다. 이렇게 기계처럼 작동하는 특징 때문에, 이것을 자바 가상 머신 혹은 자바 가상 기계라고 부른다.

자바 인터프리터가 설치되어 있다면, 컴퓨터의 종류에 관계없이 자바 바이트코드를 실행할 수 있다. 이것은 자바 인터프리터가 컴퓨터 시스템에 맞도록 만들어져있기 때문이다.

문제 새롭게 구입한 애플컴퓨터에서 자바 프로그램을 실행시킬려고 한다. 이때 필요한 것은 무엇인가 ?

Portability

애플컴퓨터가 인터프리터를 가지고 있다면, 모든 자바프로그램을 실행시킬 수 있다. 여기에는 다른 어떤 프로그램도 필요하지 않다.

컴퓨터의 종류에 관계없이 동일한 바이트코드 프로그램을 실행시킬 수 있다는 이런 점 때문에, 자바 프로그램을 Portable 하다고 말한다. 또한 소스 프로그램역시 자바 컴파일러가 설치되어 있다면, 어디에서든지 바이트 코드를 생성해 낼 수 있다. 역시 동일한 소스 프로그램을 어떠한 변경도 하지 않고 다른 컴퓨터에서 그대로 사용할 수 있다.

컴퓨터나 운영체제의 종류에 따라서 프로그램이 실행되거나 실행되지 않는 다른 프로그래밍언어에 비해서 자바가 가지는 두드러진 특징이라고 할 수 있다.

문제 바이트코드를 인터넷을 통해서 다른 컴퓨터로 전송할 수 있는가 ?

Applets

applet는 웹브라우저에서 실행되는 자바 바이트코드 프로그램이다. 최신의 모든 웹 브라우저는 자바 인터프리터를 포함하고 있다. 웹브라우저를 통해서 웹페이지를 호출하게 되면, 웹서버 컴퓨터는 웹 페이지와 함께 자바 바이트코드를 넘겨준다. 그러면 웹브라우저에 내장된 인터프리터가 자바 바이트코드를 실행하게 된다.

애플릿은 실시간 상호작용이 가능한 유저 인터페이스, 그래픽, 애니메이션등을 위해서 사용한다. 애플릿에 대한 자세한 내용은 후반에 다루도록 할 것이다. 웹 브라우저에서 실행되는 애플릿과 달리 당신의 키보드를 통해서 입력을 받고 그 출력결과를 모니터에 출력하는 프로그램을 자바 프로그램이라고 한다. 자바 프로그램은 자바 애플리케이션 프로그램이라고 부르기도 한다.

문제 자바는 애플릿과 자바 프로그램을 만들기 위해서 같은 방법을 사용하는가 ?

자바 소스 프로그램의 작성

이제 vi(:12) 에디터를 이용해서 Hello.java 프로그램을 만들어 보도록 하자. 이 소스 프로그램은 다음과 같은 문자들을 포함하고 있다. 키보드로 부터의 입력을 전달하기 위해서, 리눅스는 터미널 프로그램을 제공한다. xterm 과 konsole와 같은 프로그램들로, 이들 프로그램을 실행시키면 아래와 같은 창이 뜨고, 프롬프트를 이용해서 사용자의 입력을 대기하게 된다.

attachment:konsole.jpg

vi 로 Hello.java 파일 열기
# vi Hello.java

Hello.java 파일의 내용
class Hello
{
  public static void main ( String[] args )
  {
    System.out.println("Hello World!");
  }
}

최근의 리눅스 운영체제는 윈도우즈와 마찬가지로 GUI 화면을 제공해 주므로, 메뉴를 브라우징해서 터미널 프로그램과 같은 응용 프로그램을 실행시킬 수 있다. 또한 바탕화면에 클릭시 바로 실행할 수 있는 단축아이콘을 등록할 수도 있다.

터미널을 통한 명령 실행

attachment:konsole.jpg

위의 그림은 컴퓨터와 상호작용하기 위한 터미널 프로그램중 하나인 konsole이다. 터미널 프로그램을 실행시키면 사각형의 조그마한 상자가 대기 하고 있는걸 볼 수 있는데, 이를 프롬프트라고 한다. 프롬프트가 있다는 것은 현재 터미널이 사용자의 키보드입력을 받아들일 준비가 되어있다는 것을 의미한다. 여기에서 실행한 명령을 입력하고 엔터키를 누르면 입력된 문자열이 전달되고 실행경로에 해당 문자열과 동일한 이름을 가진 실행파일이 있는지 찾아서 실행하게 된다.

예를 들어서 /home 디렉토리로 이동하고 있다면, cd /home을 입력하고 엔터키를 누르면 된다. 문제 새로운 디렉토리를 생성할 수 있습니까 ?

vi의 실행

터미널 프로그램을 실행시키고 프롬프트 상에서 vi를 입력하고 엔터키를 누르면 된다.
# vi Hello.java
그러면 다음과 같은 실행화면을 보게 될 것이다.

attachment:konsole2.jpg 문제 리눅스 명령과 vi에 대한 더욱 자세한 내용이 필요합니까 ?

vi

vi를 실행시키고 코드를 제대로 입력했다면, 다음과 비슷한 화면을 볼 수 있을 것이다.

attachment:konsole3.jpg

vi의 사용법을 잘 모르겠다면, vi 사용하기문서를 먼저 읽어 보기 바란다.

문제 파일을 열고, 내용을 입력하고 저장할 수 있습니까 ?

프로그램의 실행

이제 당신은 터미널 프로그램을 실행시킬 수 있으며, 프롬프트가 의미하는 바를 알고, vi를 실행시켜서 소스 프로그램을 작성할 수 있게 되었다. 이제 /home/UserID/java 디렉토리로 이동해서 Hello.java 소스 프로그램을 만들어 보도록 하자. UserID는 시스템 계정이름이다. 당신이 wow라는 시스템 계정을 가지고 있다면, /home/wow 로 이동하면 된다. java라는 디렉토리는 mkdir(1) 이라는 시스템 명령을 통해서 생성해야 한다.
# cd /home/wow
# mkdir java
# cd java

이제 ls(1) 명령을 이용해서 현재 디렉토리에 어떤 파일이 있는지 확인해 보도록 하자.
# ls -al *
-rw-r--r-- 1 onnet onnet 103 2007-01-23 20:24 Hello.java

이제 javac컴파일러를 이용해서 소스 프로그램으로 부터 바이트코드를 생성하도록 한다.
# javac Hello.java

성공적으로 바이트코드가 생성되었다면, java인터프리터를 이용해서 바이트코드를 실행시킬 수 있다.
$ java Hello
Hello World!
문제 이 프로그램이 어떤일을 하는지를 기술하시오.

예제 자바 프로그램의 분석

만약 당신이 실행시킨 프로그램이 컴파일 과정에서 에러가 발생했다면, 거의 분명히 오타에 의한 때문일 것이다. 아마도 ", (, {을 잘못 처리했을 가능성이 높다. 혹시 오타가 있는지 확인해 보기 바란다.

지금은 원문과 비교해서 어디에 오타가 있는지 정도를 확인하는 정도로 소스 프로그램을 잘못짯는지 확인할 수 있을 뿐, 왜 그게 문제가 되는지는 아직 정확히 이해하지 못할 것이다. 차차 알아나가게 될테니 이에 대해서 걱정할 필요는 없을 것이다.