본문 바로가기

SearchDeveloper/Java

[번역] Pro Java Programming - 자바 아키텍쳐

<자바 속으로>

 자바는 "간단하고, 건장하고, 객체 지향적이고, 플랫폼 독립적이고, 멀티쓰레드이고, 역동적이고, 범용적인 프로그래밍 환경'이라고 묘사되어져 왔다. 이에 따라 자바는 알아차릴 수 없을 정도로의 다양한 환경으로 확장되었다. 최근에는 마이크로 프로세서에도 자바를 사용한다. 자바를 큰 기업체에서도 작은 부품들을 위해 사용하고, 핸드폰에서 주 컴퓨터같은 장치에도 사용한다.  이렇게 다양한 범위의 환경을 지원하기 위해 코어 클래스들을 중심으로 많은 API들과 버전들이 발전되어졌다.

 좋은 자바 프로그래머가 되기 위해, 기초를 잘 아는 것이 중요하다. UI가 아무리 좋아도, 코드는 많고, 메모리가 부족하다면 유저는 행복하지 않을 것이다. 이 책은 자바개발자로써 다양한 개발을 가능하게 해주는 것이 아닌 독자가 매일 마주칠 수 있는 일반적인 작업을 어떻게 처리할 것인가에 관한 것이다. 책을 보면서 독자는 자바 애플리케이션의 품질을 높일 수 있는 스레딩이나 메모리 관리 같은 코어 랭귀지의 몇가지 특성을 조사할 것이다.

 자바가 유명해질 수 있었던 특성인 적응력의 핵심은 플랫폼에 독립적이라는 것이다. "write once, run anywhere"(WORA) 의 능력은 자바코드가 운영체제에서 분리될 수 있도록 자바 자체가 운영하고 특히 추상적인 실행환경을 사용한다는 것에서 유래되었다. 이 책의 대부분은 프로그래밍 언어와 자바 API에 대해 알아볼 것이지만 이 챕터에서는 Java Virtual Machine (JVM)과 함께 자바가 어떻게 운영되는 지에 대한 기반에 대해 알아볼 것이다. 자바의 내부 구조를 이해하는 것은 언어에 대해 더 많은 이해를 할 수있고, 따라서 더 나은 프로그래머로 만들어 줄 것이다.

다음은 이 챕터에서 우리가 배울 내용이다.

  • 자바 플랫폼의 다양한 구성요소
  • JVM이 어떻게 자바를 플랫폼 독립적으로 만들어주는지
  • 자바 프로그램을 실행할 때 어떤 일이 일어나는지
  • 자바 클래스 파일은 실제로 어떤 것을 포함하고 있는지
  • JVM이 동작할 때 필요한 주요 도구

처음으로, 자바가 실제로 뭔지 살펴보자.

 

 

<자바 아키텍쳐>

자바가 단지 애플리케이션 개발 (소스코드를 작성하고 바이트코드로 컴파일 하는 것) 을 위한 프로그래밍 언어라고 생각하기 쉽다. 그러나, 프로그래밍 언어는 자바의 한 요소일 뿐이며, 자바는 플랫폼 독립성을 포함하여 많은 이점을 주는 아키텍쳐에 기반한다.

완벽한 자바 아키텍쳐는 다음 4가지 구성요소의 조합이다:

  • 자바 프로그래밍 언어
  • 자바 클래스 파일 포맷
  • 자바 API들
  • JVM

그래서 자바로 개발할 때, 즉 자바 프로그래밍 언어로 작성 후 자바 클래스 파일로 컴파일하고, 차례로 JVM 안에서 실행된다. 사실, 요즘날 자바 언어는 자바 플랫폼을 사용하는 하나의 가능한 옵션일 뿐이다. 예를 들어 스칼라는 자바 언어의 대안으로써 많은 관심을 불러 일으켰고 자바 기술을 이용하는 많은 언어 중 하나일 뿐이다.

Java Runtime Environment (JRE) 로 알려져있는 JVM과 자바 플랫폼을 구성하는 핵심 클래스의 조합은 사용중인 운영체제에 상관없이 올릴 수 있다. Figure 1-1은 애플리케이션과 운영체제 사이에서 자바 기능의 두 가지 양상을 보여준다.

 

3p

자바 API는 비슷한 주제의 패키지들로 조직된 미리 짜여진 코드이다. 자바 API는 3개의 메인 플랫폼으로 나뉜다:

  • Java Platform, Standard Edition (Java SE): 코어 자바 클래스들과 GUI 클래스들을 포함한 플랫폼
  • Java Platform, Enterprise Edition (Java EE): 보다 복잡한 "enterprise" 애플리케이션 개발을 위한 클래스와 인터페이스(서블릿, JavaServer Pages, Enterprise JavaBeans, 등)를 포함한다.
  • Java Platform, Micro Edition (Java ME): 이 플랫폼은 자바의 근원으로 되돌아간다. 소비자 생산품(ex. 블루레이 디스크 플레이어, 핸드폰, 스마트 장치 같은 하드웨어의 다양한 종류) 을 위한 최적화된 런타임 환경을 제공한다.