1장
1. 자바의 기원과 역사
자바는 썬 마이크로 시스템즈(Sun Microsystems, Inc)에서 개발하여 1996년 1월 공식적으로 발표한 객체지향 프로그래밍 언어이다. 자바는 1991년 오크(Oak)라는 언어에서 시작했다. 당시 썬의 엔지니어는 가전제품에 탑재될 소프트웨어를 만들기 위해 C++을 확장해서 사용하려 했으나 어려움을 겪었다. 결국 C++를 기반으로 운영체제에 독립적인 새로운 언어 오크를 개발하게 된다. 그러나 90년대의 가전제품용 메모리가 Oak 프로그램을 구동할 성능을 갖추지 못해 실패한다. 1993년에 이르러 웹이 본격적으로 발전하면서 썬은 운영체제에 독립적인 오크가 웹에 적합하다고 판단했다. 썬은 웹과 오크를 융합하는 방향으로 개발을 진행했고 그 과정에서 오크는 자바(Java)가 되었다. 그리고 썬은 자바로 개발한 핫 자바(Hot Java) 웹 브라우저를 발표한 다음 해 자바의 정식 버전을 발표했다.
2. 자바의 특징
운영체제에 독립적: 자바 응용 프로그램은 JVM과 통신하므로 운영체제에 독립적
객체지향: 자바는 상속, 캡슐화, 다형성이 잘 적용된 객체지향 언어
자동 메모리 관리: 자바 응용 프로그램이 실행되면 GC(Garbage Collector, 가비지 컬렉터)가 자동적으로 메모리를 관리
네트워크와 분산처리 지원
멀티스레드 지원: 자바는 시스템과 관계없이 멀티스레드 프로그램을 구현 가능(스레드 스케줄링은 자바 인터프리터가 담당)
동적 로딩 지원: 자바는 필요한 시점에 클래스를 로딩하여 사용가능(일부 클래스 변경 시 전체 재컴파일 안함)
3. JVM
JVM(Java Virtual Machine, 자바가상머신)은 자바를 실행하기 위한 가상 컴퓨터를 의미한다. 영어권에서 종종 컴퓨터는 Machine으로 불린다. Machine이 실제 컴퓨터라면 Virtual Machine은 소프트웨어로 구현되고 작동하는 컴퓨터를 가리킨다는 걸 알 수 있다. 앞서 운영체제에 독립적인 것을 자바의 특징 중 하나로 소개했다. 이게 어떤 의미인지 아래 그림을 통해 알아보자.

일반 응용 프로그램의 코드는 OS를 거쳐 하드웨어로 전달된다. 이 과정에서 하드웨어에 맞게 완전이 컴파일되기 때문에 속도가 빠르다는 장점이 있다. 반면에 Java 응용 프로그램의 코드는 JVM을 거치고 그 다음에 OS를 거쳐 하드웨어로 전달된다. Java 응용 프로그램은 실행 시에 해석(interpret)되기 때문에 속도가 느리다는 단점이 있으나 JVM 위에서 동작하기 때문에 운영체제에 독립적이라는 장점을 가진다. 다만 주의해야 할 것은 Java 응용 프로그램은 운영체제에 독립적이지만, JVM은 종속적이라는 점이다. JVM은 일반 응용 프로그램과 마찬가지로 운영체제와 바로 맞붙어 있기 때문에 운영체제에 종속적이다. 따라서 다양한 운영체제에서 자바 응용 프로그램을 실행하기 위해선 해당 운영체제에 맞는 JVM이 필요하다.
4. 자바 응용 프로그램의 실행 과정
"Hello, world."를 출력하는 Java 응용 프로그램을 작성하기 위해서는 몇 가지 규칙을 지켜야한다.
자바의 모든 코드는 반드시 클래스 안에 존재해야 한다.
하나의 자바 응용 프로그램에는 한 개 이상의 main 메서드가 존재해야 한다.
어째서 클래스 안에 코드가 존재해야 할까? 자바 응용 프로그램은 클래스의 집합으로 최소 단위가 클래스이다. 클래스가 무엇인지는 나중에 자세히 알아보도록 하자. Java 응용 프로그램은 항상 시작할 때 main 메서드를 호출해서 수행하도록 약속했다. 따라서 main 메서드가 누락된 Java 응용 프로그램은 다음과 같은 에러 메세지를 출력할 것이다.
Exception in thread "main" java.lang.NoSuchMethodError: main
Hello라는 클래스를 작성하고 그 안에 main 메서드를 선언하여 "Hello, world."를 출력하는 자바 응용 프로그램의 코드는 다음과 같다.
class Hello {
public static void main(String[] args) {
System.out.println("Hello, world.");
}
}
이 응용 프로그램은 어떤 과정을 거쳐서 실행될까? 아래 그림을 참고해서 생각해보자.

작성된 자바 응용 프로그램이 Hello.java로 저장했다고 가정하겠다. Hello.java 파일은 일반 응용 프로그램처럼 인터프리터가 곧바로 해석하고 실행할 수 없다. 그 대신 javac.exe라는 자바 컴파일러를 사용해서 컴파일된 클래스 파일을 생성한다. 생성된 클래스 파일은 java.exe라는 인터프리터로 실행할 수 있다. 인터프리터는 클래스 파일을 로드해서 검사하고 main 메서드를 호출해서 코드를 실행 후 프로그램을 종료한다. 프로그램이 종료된 후 사용했던 자원들은 모두 반환된다.
5. 주석
주석은 작성한 코드에 관한 정보를 제공할 목적으로 작성되는 문자열이다. 컴파일러는 주석을 무시하고 건너뛰므로 주석와 프로그램의 성능은 관계가 없다. 다만 큰따옴표("")안에 있는 주석은 문자열로 인식되므로 주의가 필요하다.
참고 자료
자바의 정석 - 도우출판
Last updated