![]() Jose M. Fernández 차 례: 들어가는 글 기원 JAVA를 얻고 설치하기 개발환경 특징 JAVA의 첫 번째 프로그램 요약 |
자바로하는 프로그래밍 1부![]() 요약: 이글은 Java 프로그래밍연재의 첫번째입니다. 먼저 언어로서의 자바와 그 일반적인 특징 및 적절한 정보를 어디에서 찾아 볼 수 있는가를 이야기합니다. 들어가는글Java 프로그래밍 언어와 개발환경을 설명할 연재를 시작한다. 첫 목표로서 언어, 마이크로웨이브, 세탁기의 기록에 대하여 중요하게 여기지 않을 것이다(다중 출판물, 재밌는 문학을 읽는 것 조차 흥미를 일으켜진다해도). 마림바 리듬에 맞춰 손을 흔드는 거대한 코와 삼각형 모양의 몸체를 가진 작은 남자인 듀크(Java 마스코트)와 예전 미국 공상과학영화를 생각하는 것으로부터 역시 신경을 쓰지 않을 것이다. Java 현상은 약간을 변화가 있다. 그것에 대한 가치는 모든 컴퓨터 매거진에 쓰여지고, Java 애플릿을 발전시킨 제품을 판매하는 많은 소프트웨어 회사가 있고, 몇몇 web 사이트가 Java 애플릿이나 그 이상을 가지고 있지 않다. 이 연재를 통하여, 기본적인 것은 간단하지만 동시에 아주 복잡하고, 끊임없이 발전하고 있기 때문에 어려운 이 프로그래밍 언어를 폭넓게 배우기 위해 가능한 한 많이 조사하려고 노력할 것이다. 첫번째 연재의 목표는 일반적으로 언어의 기술을 제공된 후에 애플릿, network 관계 프로젝트, JDBC등과 같은 깊은 주제는 심도있게 조사할 것이다. Java가 범용 언어라는 것은 web페이지를 위한 애플릿을 매우 인기 있게 만든다 할지라도 배타적으로 사용되지 않는다는 것을 강조한 것이다. Java 애플릿보다 더 흥미를 끌수 있는 많은 다른 대체 때문에 단지 자바의 관점을 강요할 수가 없다. 이 첫번째 연재는 실제적이라기 보다는 기술적이다. 다음의 글에서 언어와 개발환경의 기본적인 특성들을 탐구할 것이다. 단지 하나의 자바의 프로그래밍 예를 끝에서 볼 것이다. 기원Java는 1991년 처음 18개월 동안 Sun Microsystem Inc.에 있는 James Gosling, Patrick Naughton, Chis Warth, Ed Frank, Mike Sherindan에 의해 착상되어 졌다. 1992년과 1995년 사이에 Bill Joy, Arthur Van Hoff, Jonathan Payne, Frank Yellia, Tim Lindolm은 초기 프로트타입(prototype)의 공동으로 연구하여 완성하였다. >위 날짜들로부터, Java가 WWW에 이전이거나 적어도 동시에 만들어진 것은 분명하다. -- 1991년이 될 때 까지 Tim Berner Lee는 HTML언어를 개발하지 않았다. Java의 구문이 C와 매우 비슷하고 객체 지향 특성을 지닌 C++ 역시 비슷하다. Java는 응집성과 논리적으로 일관되는 프로그래밍 언어이다. C와 C++이 가진 유사성들은 Java가 인터넷을 위한 C++의 버전인 인상을 줄 수도 있지만, 중요한 이론과 실제적인 차이는 있다. 특히, Java는 C++과 비교한 후, 개체지향 법례을 개선하고 순화하였다. 인터넷은 일반적으로 알려진 언어로 만들어 자바를 시작했고 동시에, 자유로이 사이버스페이스에서 이동될 수 있는 오브젝트의 범위를 넓힌 이후로 자바는 인터넷에 깊은 효과를 가지게 되었다(동적인 자동 실행 프로그램). JAVA를 얻고 설치하기Java 프로그래밍을 하기위해 결정적인 도구가 있다. 부수적으로 항상 GNU/LINUX 환경을 참조한다.(잃어버리게 된 경우에): 현재의 ELF를 기본으로 요구하는 Linux 커널 1.2.13이나 그 이후 버전 설치한다. JDK(Java Development Kit)환경과 넷스케이프 버전 2.0.14나 그 이후 버전, 텍스트 편집으로 좋은 Xemacs를 이용할 것이다. 항상 Xwindows 상에서 작업을 할 것이다. 그것은 항상 필요하지 않을지라도, 개발된 애플릿과 그래픽적인 인터페이스와 관련된 프로그램은 어느 때라도 요구하게 된다. 다음의 웹사이트로부터 JDK배포판을 내려 받을 수 있다: 이 사이트로부터 파일들을 빨리 내려 받기 위해서는 편리한 미러를 차례로 선택할 수 있다. 몇 달 전, 최신 버전은 JDK-1.1.3(이 기사를 위해 사용된 버전)이었지만, 마지막으로 방문하였을 때는 이미 거기에서 버전 1.19를 보았다. 모든 것을 내려 받는다면 24Mb인 것을 주목! 그럼에도 불구하고 단지 엄격하게 필요한 것은 대략12Mb(인내!)를 내려받는다. gunzip형태의 file은 압축을 푼 뒤에 문제없이 시작할 수 있다. 보통 디렉토리 /usr/local에서 배포판을 설치하며, 서버디렉토리 /JDK1.1.3에 다음과 같은 것을 새로 만들어진다: /doc HTML 형식의 공식 문서 /demo 자바 프로그램 데모 /lib 라이브러리 /bin 이 디렉토리는 적당한 JDK의 도구들은 있다. /lib 디렉토리 안에, "classes.zip"(이 파일은 압축을 풀지 않는다)이라는 파일을 있으며, 그것은 JDK에 의해 사용될 수 있는 편집된 모든 클래스들을 포함합니다. 루트 디렉토리 안에 "src.zip"이라는 파일이 있으며, 그것은 classes.zip에 포함된 소스파일로 포함한다. 그들은 편집되지 않고, 단지 정보적인 목적으로 배포판이 제공된다. 개발환경앞에서 언급된 것처럼 개발 도구들은 /bin디렉토리에 위치한다: javac : Java 소스들을 bytecode로 변형시키는 Java 컴파일러. Java : Java 해석 프로그램. Java bytecode를 실행한다. jre : Java와 비슷한 다른 해석 프로그램이지만, 사용자를 위하여 모든 옵션사용을 요구하지 않는다. appletviewer: 애플릿을 검사하고 수행한다. jdb: 디버그. javap: Java로 컴파일된 bytecode 파일의 디어셈블러. javadoc : 문서 생성 프로그램은 public과 produce의 클래스들, 인터페이스, 생성자, 메소드와 필드를 설명하는 일련의 HTML 페이지를 생산한다. 또한, 클래스의 계층구조와 모든 멤버들을 인덱스도 생산한다. javah : Java 프로그램의 고유 메소드(C언어)를 추가하는 툴. jar: 자바 클래스의 기록과 Jar 보존 파일을 소스. javakey : 디지털 기호를 유지하는 툴. updateAWT : 어플리케이션의 AWT1.02 메소트에서 변화된 이름으로 갱신한다. 현재의 디렉토리 구조로서 이상없이 작업하기 위해서는 환경 변수 PATH에 /usr/local/JDK1.1.3/bin을 추가하도록 충고한다. 당신이 사용 가능한 개발 환경을 시스템을 항상 사용하기 원한다면, /etc/profile파일의 안에 있는 PATH변수를 고친다. 특징계속하기 전에 자문한다. 자바가 무엇일까? 대답하기 위해, 우리는 JDK 메뉴얼에 있는 것 처럼, Java는 프로그램밍 언어와 플랫폼이라는 두 부분으로 대답할수 있다. 프로그래밍 언어로 Java는 다음의 특성으로 high level 언어입니다(몇가지 점에, 우리는 그들을 상세하게 검사한다):
우리들의 주의를 환기시키는 첫번째 일은 자바가 해석된다는 것이다. 이미 하위 단계 코드인 Java소스에도 불구하고, 그것은 다양한 플랫폼에서 해석되기 이전에 bytecode의 오브젝트를 생성시키기 위해 컴파일을 요구한다. Java bytecode의 덕택에 "한번 쓰고, 항상 실행"을 할수 있다. 플랫폼상에서 Java 프로그램을 컴파일하고 Java 가상 기계(JVM)의 완전하게 설치한 다른 아키텍처에서 그들을 실행할수 있다. 예를 들어, Java 프로그램은 Windows NT 플랫폼에서 컴파일하고 Sun Ultra Solaris에서 문제(적어도 이론이다.)없이 실행된다. 일반적으로, 플랫폼은 응용 프로그램이 실행되는 하드웨어/소프트웨어 환경이다. 그러나, 플랫폼은 단지 Java를 실행하는 소프트웨어 환경이지만, 각각의 Java 플랫폼은 하드웨어 플랫폼에서 실행할 때 가진다. Java 플랫폼은 두 컴포넌트를 가지고 있다:
JVM은 Java 프리컴파일 프로그램이 실행될 수 있는 추상적인 컴퓨터이다. 개념은 가능한 모든 장소에 그것을 설치하는 것때문에 간단하고 작게 설계되었다. 이 단순은 모든 현존한 플랫폼에 확산이 가능하게 만들고, 모든 것에 대한 공통의 소프트웨어층과 매우 상이한 이기종간 네트워크(인트넷과 같은 것)을 제공하여 가장 큰 이슈인 이식의 용이성으로 해결된다. 그것으로 이 기술의 끝없는 성장에 대한 확실한 이유로 생각할 수 있다. 그럼에도 불구하고 가상 머신는 이름을 나타내지만, 단지 소프트웨어 층으로 보이지 않고, 리얼 Java 머신, 신용카드, TV해독기등을 지원한 Java 칩 시장이 조금씩 보이기 시작하는 하나의 컴퓨터 시스템이려고 노력한다. Java API는 그래픽 사용자 인터페이스(Graphical User Interface; GUI)와 같은 많은 유틸리티를 제공한 소프트웨어 컴포넌트의 많은 모음이다. 그 라이브러리(Java의 전문 용어를 이용한 자바 패키지)에서 불러모아 진다. 이 패키지의 덕택에 잘 알려진 웹 애플릿들 외의 많은 어플리케이션을 위해 Java를 사용하는 것이 가능하고, 예를 들면 proxie, 메일 서버, IRC 서버 그리고 실질적으로 인터넷에 관계된다는 상상으로 웹 서버를 설계 할 수 있다. 다양한 그룹으로 API 패키지들을 분류할 수 있다:
이 기본적인 API 커널 외에, 또한 3D 확장, 이동하기 쉬운 통신, 에니메이션 등이 있다. Java는 상세하게 공부할 특성의 시리즈를 가지고 있다고, 단원 처음에 언급했다:
이것 후에 GNU/Linux 세계에 있는 Java의 상태(직무상 Java 문서를 많이 발견할 수 있다)에 대해 "언급"하는 것을 의아하게 여길 수 있다. Linux를 위한 JDK의 가용성을 일찍 언급했고, 썬 마이크로시스템스사에서 개발된 상업상의 설치가 아니다.(자유로이 분배할 수 있다하더라도). 문제점 없이 어떠한 Java 소스라도 컴파일할 수 있는, GPL라이센스 아래에 컴파일러 GUAVAC와 같은 툴(tool)이 있다. Berkeley라이센스 아래에 KAFFE라고 불리는 가상기계도 역시 언급한다. 최후의 두 프로젝트들은 여전히 완전한 개발 시스템을 가지고 있는 썬사(순간적인 무료 배포)로부터 Java 클래스 라이브러리가 필요하게 될지라도 매우 진보한 단계에 있다. 여전히 초기단계인 최근의 여러 프로젝트는 빠르고 비주얼적인 어프리케이션 개발 환경을 제공하는것을 겨냥한다. 마지막으로, 나는 자바와 GNU 기술을 관계하는 네트에 큰 이동이 있다는 것과, 썬사로부터의 독립과 특히 Java의 무료배포의 완전한 도구 박스의 개발을 관계하는 것을 기술하겠다. JAVA의 첫 번째 프로그램일반적인 언어의 특성들을 몇가지 본 후에 실제의 프로그램을 봅시다. 들어가는 말에서 언급하기 때문에, 전현적인 재료를 중요하게 여기지 않기 위해 hello world 예제를 좋아하고, 우리가 좋아하는 어떠한 차원의 제곱을 그린 프로그램의 시작하는 것을 가능한 한 더 좋아 할 것이다(너무 많지 않은 복잡한 비트): class Cuadro { public static void main (String args[]) { int l ,a; if (args.length == 2) { l = Integer.valueOf(args[0]).intValue(); a = Integer.valueOf(args[1]).intValue(); } else { l= 20; a= 15; } for (int i=l; i>0; i--){ System.out.print("*"); } System.out.print("\n"); for (int i= a-2; i>0; i--){ System.out.print("*"); for(int j=l-2; j>0; j--) { System.out.print(" "); } System.out.print("*\n"); } for (int i=l; i>0; i--){ System.out.print("*"); } System.out.print("\n"); } } Java는 "컴파일 유닛(기능 단위)"를 정의하기 때문에 소스 파일에게 주어진 이름은 매우 중요하다. 파일은 하나 이상의 클래스의 정의를 포함할 수도 있다. 컴파일러는 소스 파일이 확장자 .Java(4 문자)을 가지고 있으리라고 예상한다. 결과적으로, 몇몇 시스템은 그것을 지원하지 않는다.(DOS or Windows 3.1) 예제에서 정의된 클래스의 이름은 소스 파일의 이름과 함께 동시에 발생한다. 이것은 자바의 클래스안에 반드시 모든 코드가 있어야 한다. 규칙에 의하여 클래스의 이름은 클래스를 포함한 소스 파일의 이름과 함께 동시에 발생해야 한다. 또, Java는 대소분자를 구분한다(대문자나 소문자인 경우). 커맨드 라인 타입에서 예제를 컴파일하는 방법은 : > javac Cuadro.javaJava 컴파일러(모든 것이 OK 되었다면)은 당연히 바이러리(bytecode)폼 포함하고, 해석 프로그램에 의해 실행 될수 있는 Cuadro.class 파일을 생성시킨다. > java CuadroJava 소스 코드를 컴파일 할때, 특유한 각각의 클래스는 클래스로서의 같은 이름과 관련되는 것을 보존한다. 그것은 클래스가 소스 파일에서 .class 파일로 보존하는 것을 포함하기 때문에 소스 파일에게 같은 이름을 주는 것은 좋은 습관이다. 예제 Cuadro.java의 단순함에도 불구하고 Java와 전형적인 Java 프로그램의 구성의 기본들을 이해하는 것을 돕는다. 우선 이 예제가 HTML 파일에 포함될 수 있는 애플릿이 아니라는 것을 고려한 커맨드 라인에 있는 자바 해석 프로그램에 의해 실행되는 독립적인 프로그램이다. 프로그램의 첫번째 라인은 : class Cuadro { 첫번째 단어는 언어의 애약된 토근이다. 그것은 "Cuadro"인 경우에 새로운 클래스명의 정의를 나타난다. -- 스페인에 있는 제곱 -- 그것의 두 중괄호 {} 사이에 정확한 모든 클래스의 정의가 포함된다. Java에서 모든 프로그램의 작업은 클래스의 안에 있어야 한다는 것을 주의하여야 한다. 다음 라인은: public static void main (String args[]) { 그것은 main()이라는 이름을 가지는 메소드를 선언한다. 모든 Java 어플리케이션은 main()(C/C++과 비슷하게)이라고 불리는 메소드로 실행을 시작한다. 다음은 예제를 이해하기 위해 약간의 세부사항을 필요한 주석을 달겠다(다음에 올릴 기사에 더 깊이있게 설명한다). 키워드 public은 클래스의 멤버의 메소드들의 유호범위를 제어한다. 클래스가 public으로 선언된 후 클래스는 클래스 밖에서 정의된 코드에 의해 사용될 수 있다. 키워드 static은 클래스를 부추길 필요가 있지 않고 호출되기 위해 main()메소드를 강요한다. Void는 메소드가 어떠한 값(리턴값)도 되돌려 주지 않는다는 것을 나타낸다. 예제에서 main의 매개변수로 String클래스로부터 인스턴스의 행렬로 잡혀있는 것과 같이 function이나 메소드에게 매개변수를 넘겨주기 위해서는 function이름 뒤에 쓰여진 소괄호를 이용한다. 명백하게 메소드의 모든 코드는 중괄호 사이에 둘려싸인다. 다음 라인은: int l, a ; 두개의 정수 변수를 선언한다. 자바에서는 변수를 사용하기 전에 모든 변수가 선언되어야 한다. 주의, 각각의 코드 끝부분에는 ";(세미콜론)"이 있어야 한다. 나머지 코드들은 작은 알고리즘을 구현한다 :
독자는 이 작은 코드가 어떻게 컴파일되고 실행되는지를 검사하는 것과 또한, 다양한 플랫폼 아래 : Linux, 윈도우즈 95(현재는 이것으로 사용하지 않지만!)에서 컴파일된 오브젝트 Cuadro.class를 실행함으로써 코드의 이식성을 검사하는 것과 그것이 어떠한 플랫폼에서도 똑같이 실행되는 것을 보는 것은 좋은 과제감이다. 요약우리는 프로그래밍 언어로서의 Java의 일반적인 기능들 중 일부를 알아보았다.우리는 프로그램 하기 위해 출발했고, 긴 길을 가기 위해, 다음 연재에서 언어의 더많은 기술을 쓸 것이다. 다음 연재에서, 정의들과 변수의 타입, 기본적인 명령어, 클래스 등을 공부하게 될 것이다. 주된 언어의 명세이다. 연재의 기초를 준 다음의 출판물과 URL에서 각각의 글들을 참조하였다.
번역 : 이수환 |
본 웹사이트는 Miguel Angel Sepulveda씨에 의해 관리됩니다. © Emre Demiralp 1998 LinuxFocus 1998 |