1. 제 1 장 자바JAVA 소개
자바 언어는 1995년 5월에 Sun Microsystem 사가 발표하면서 등장하게 되었다. 원래 자바 언어는 여러 가지 자전제품에 필요한 소프트웨어를 개발하기 위해 고안되었으며, WWW(World Wide Web)의 등장으로 기계독립적인 자바의 선호도가 폭발적으로 증가하게 되었다.
이 장에서는 자바 언어에 대해 전반적으로 소개한다. 우선 자바 언어가 다른 언어에 대하여 가지는 다양한 특성들과 자바 프로그램들의 종류를 설명하며, 애플리케이션application과 애플릿applet의 차이점에 대해서도 알아본다. 그리고 개발환경인 Eclipse의 사용에 대해 간략히 소개한다.
1.1. 1.1 자바 언어란?
자바 (프로그램 작성) 언어를 잘 이해하기 위해서는 다른 프로그램 작성 언어에 대하여 가지는 자바 언어만의 특성을 알아보는 것이 도움이 될 것이다. 자바 언어가 갖는 특성에는 단순함, 객체지향적, 분산적, 해석실행됨, 강건함, 안전적, 구조 중립적, 이식적, 다중 스레드화적, 동적, 모바일 장치 적용이라는 점이 있다. 앞으로 설명하게 될 자바 언어의 특성들은 자바를 처음 접하는 독자에게는 어렵게 느껴지겠지만, 처음에는 가볍게 읽고, 나중에 다시 한번 보면 이해하는데 무리가 없으리라 생각된다.
1.1.1. 1.1.1 객체지향적object-oriented
자바는 완전한 객체지향 언어이다. 자바로 작성된 프로그램은 클래스로 시작하여 클래스로 끝이 나는 특성을 가진다. 따라서 자바 프로그램은 클래스에 속하지 않는 메소드나 변수를 사용하지 않으며, 모든 자바 프로그램들은 객체들을 생성하는 클래스들로 구성된다.
자바 언어는 응용application에서의 자료 및 그 자료를 조작하는 연산에 초점을 둔다. 자바 언어를 비롯한 객체지향 프로그램 작성 언어에서는, 이러한 자료에 대한 연산을 구현한 것을 특별히 메소드method라 한다. 이하에서는 연산과 메소드를 호환적으로 사용한다. 자료는 객체object의 상태를 묘사하고 메소드는 객체의 행위를 묘사하며, 클래스는 자료 및 그 자료를 조작하는 메소드들의 모임을 말한다.
부 클래스sub class는 그 상위 클래스super class에서 상태 및 행위를 상속받을 수 있다. 클래스 계층hierarchy은 항상 뿌리 클래스root class를 가지며, 자바에는 광범한 클래스들의 집합이 패키지에 정리되어 있다. 예를 들어, java.awt (awt : abstract window toolkit) 패키지는 도형적 사용자 인터페이스 부품을 생성하는 클래스들을 제공하고, java.io 패키지는 입력 및 출력을 처리하는 클래스들을 제공하며, java.net 패키지는 네트워킹 기능을 지원하는 클래스들을 제공한다. Object 클래스는 java.lang 패키지에 있으며 자바 클래스 계층의 뿌리 클래스가 된다.
자바 언어는 철저하게 객체지향적으로 설계된 언어이다. 자바 언어의 대부분의 요소들이 객체이다. 원시적 수치, 문자, 부울형은 단지 예외이며, 문자열은 객체에 의해 표현된다. 클래스는 컴파일 및 실행의 기본단위가 되기 때문에 모든 자바 프로그램은 클래스들의 모임인 것이다. 참고로 각 클래스 마다 그 클래스를 실행시키는 main() 메소드를 둘 수 있다.
1.1.2. 1.1.2 해석실행interpreted
일반적인 프로그램은 프로그램이 작성되고 컴파일된 컴퓨터와 호환되는 기종에서만 실행가능하지만, 자바 프로그램은 네트워크에 연결된 다른 종류의 컴퓨터들에서도 실행가능하다. 자바 언어는 해석실행 언어이기 때문에 연결편집linking 과정이 필요없고, 다만 새로운 클래스를 실행환경으로 적재하는 과정이 필요하다. 따라서 응용 프로그램 개발과정이 신속하고 단순하게 된다.
자바 컴파일러는 자바 가상기계(JVM: Java Virtual Machine)에 대한 바이트 코드를 생성하며, 컴파일된 바이트 코드를 실행하기 위해 자바 가상기계, 즉 자바 해석실행기를 사용한다.
[그림 1.1]에서 보는 바와 같이 문서편집기로 작성된 자바 원시 코드에는 ‘java’라는 확장자가 붙는다. 이 원시 코드를 자바 컴파일러가 컴파일하여 ‘class’라는 확장자가 붙는 바이트 코드를 생성한다. 생성된 바이트 코드는 자신의 컴퓨터 혹은 인터넷 등의 통신망을 통하여 자바 실행환경으로 이동한다. 실행환경에 존재하는 자바 해석실행기인 자바 가상기계가 바이트 코드를 해석하여 실행하게 되는데, 필요하다면 이미 누군가에 의해 작성된 자바 API (Application Programming Interface) 클래스들을 불러들여 실행할 수 있다. 자바 가상기계와 자바 API는 자바 플랫폼platform을 구성한다. 플랫폼은 프로그램이 실행될 수 있는 환경을 의미하는데, 대부분의 플랫폼은 컴퓨터 하드웨어와 그 하드웨어를 관리하는 소프트웨어인 운영체제로 구성된다. 하지만, 자바 플랫폼은 다른 플랫폼과는 달리, 소프트웨어만으로 구성된다.
[그림 1.1] 자바 프로그램의 작성과 실행 과정
1.1.3. 1.1.3 구조 중립적archtecture neutral 및 이식적portable
자바 프로그램은 구조 중립적 바이트 코드 형식으로 컴파일되기 때문에 시스템이 JVM을 구현하는 한 자바 응용은 어떠한 시스템에서도 실행가능하다. 그렇기 때문에 자바 언어는 인터넷 또는 이종망 상에 분산된 응용에서 아주 중요한 역할을 한다. 다시 말해서 자바 언어로는 여러 기종, 여러 운영체제 상에서 실행되는 응용을 만들 수 있으며, 자바가 해석실행되고, 표준적이며 구조중립적인 바이트 코드 형식을 정의하기 때문에 이식성을 지원한다.
자바는 인터넷과 맞물려 돌아가는 소프트웨어를 구현하는데 적합한 언어로서, 언어 명세에서 구현종속적 측면이 없다. 예를 들어, 각 원시적 자료형의 크기 뿐만 아니라 산술적 행위에 대해서도 분명하게 명시한다. 한편 C 언어인 경우에는 정수형이 플랫폼에 따라 2, 4 또는 8 바이트가 되어 이식성에 문제가 발생할 수 있다. 자바 언어의 이러한 측면을 강조하여 “작성은 한번, 실행은 어느 곳에서나”라는 말을 하기도 한다.
플랫폼에 종속적인 부분은 자바 API에 의해 회피할 수 있으며, 실행성능을 중요시하는 등의 특별한 경우에는 이식성이 없는 프로그램을 작성할 수도 있다.
자바 프로그램의 실행환경은 아주 다양할 수 있지만, 자바 바이트 코드가 플랫폼에 독립적이기 때문에 JVM (해석실행기 및 실시간 시스템)이 존재하는 어떤 플랫폼 상에서도 실행될 수 있다. 이것을 기존의 플랫폼 종속적인 측면과 비교해 보자.
[그림 1.2] 플랫폼 종속적 환경
n개의 플랫폼에서 동일한 기능을 보이는 프로그램을 작성하여 실행할 때, 각 플랫폼이 서로 다른 특성을 갖는 플랫폼 종속적인 경우가 [그림 1.2]에 나타나 있다. 물론 플랫폼에 따라 원시 코드를 달리 작성해야만 할 경우도 있지만, 여기에서는 간단하게 설명하자. 원시 코드 자체는 한번만 작성하지만, 각 플랫폼의 특성을 반영하기 위해서는 각 플랫폼에 맞는 컴파일러를 사용해야 한다. 따라서 하나의 원시 코드에 대해서, n개의 각기 다른 컴파일러를 사용하여, 각기 다른 n개의 이진 파일을 생성해야 한다. 사정이 이러하다 보니 프로그램에 변화가 생기면 여러 컴파일러를 사용하여 다시 컴파일하고, 여러 플랫폼에 다시 적재해야 하는 불편한 점이 있는 것이 기존의 프로그램 실행환경이다.
한편 자바 프로그램 실행환경과 같은 플랫폼 독립적 환경이 [그림 1.3]에 나타나 있다. 역시 원시 코드를 한번만 작성하며, 자바 컴파일러를 사용하여 컴파일하지만, 앞에서와는 달리 각 컴퓨터의 특성을 고려한 여러 컴파일러를 사용할 필요는 없다. 생성된 바이트 코드는 자신의 컴퓨터 상이나 통신망을 통해 자바 실행환경으로 이동되어 실행되는데, 각 플랫폼마다 자신에 맞는 자바 가상기계가 존재한다. 각 플랫폼의 자바 가상기계는 이동된 바이트 코드를 해석하여, 자신의 플랫폼에 맞는 이진 코드를 생성하여 실행한다. 따라서 원시 코드를 작성하는 개발자는 어떤 플랫폼에서 실행될 것인지 신경을 쓰지 않고 프로그램을 개발할 수 있다. 또한 프로그램의 사용자는 자신의 플랫폼에 맞는 판version을 구하는데 많은 노력을 들이지 않아도 된다.
--- 본문 중에서