본문 바로가기

자바 기초

자바 기초 개념 - 언어의 주요 특징 / JVM

※ 본 글은 Oracle의 java-developers-guide를 참고하였습니다.

 

자바에 대한 개인적 공부와 정리를 위해 Oracle의 공식적인 자바 개발자를 위한 가이드를 보며

 

주기적으로 글을 작성하도록 해본다.

 


 

 

1.1.2 자바 언어의 주요 특징

 

자바 언어는 서버 애플리케이션 개발에 이상적인 특정 주요 기능을 제공한다.

이러한 기능에는 다음이 포함된다.

 

 

  • 단순성

자바는 일관된 객체 모델 강제를 통해 서버 애플리케이션을 생성하는데 사용되는 대부분의 다른 언어보다 더 간단하다.

대규모 표준 클래스 라이브러리는 모든 플랫폼에서 자바 개발자에게 강력한 도구를 제공한다.

 

  • 이식성

자바는 플랫폼 간 이식성이 뛰어나다. 자바에서 플랫폼 종속 코드를 작성하는 것이 가능하지만, 시스템 간 원활하게 이동하는 프로그램을 작성하는 것도 간단하다.

 

  • 자동 스토리지 관리

JVM은 프로그램이 실행되는 동안 모든 메모리 할당 및 해제를 자동으로 수행한다. 자바 프로그래머는 새 객체에 대해 명시적으로 메모리를 할당하거나 더 이상 참조되지 않는 객체에 대해 메모리를 해제할 수 없다. 대신 JVM이 이러한 작업을 수행하도록 의존한다. 메모리를 해제하는 과정을 가비지 수집이라고 한다.

 

  • 강력한 타입 지정

필드를 사용하기 전에 필드의 타입을 선언해야 한다. 자바의 강력한 타입 지정을 통해 자바와 PL/SQL 애플리케이션 간의 언어 간 호출에 대해 합리적이고 안전한 솔루션을 제공할 수 있으며, 자바와 SQL 호출을 동일한 애플리케이션 내에서 통합할 수 있다.

 

  • 포인터 없음

자바는 클래스를 정의하고 이를 인터넷의 도메인 네임스페이스를 반영하는 계층 구조 내에 배치한다. 자바 애플리케이션을 배포하고 이름 충돌을 피할 수 있다. 자바 네이밍 및 디렉토리 인터페이스(JNDI)와 같은 자바 확장은 여러 네임 서비스가 통합될 수 있는 프레임워크를 제공한다. 자바의 네임스페이스 접근 방법은 오라클이 JLS를 완전히 준수하면서 클래스 이름을 해결하기 위한 스키마 개념을 통합할 수 있을 만큼 유연하다.

 

  • 예외 처리

자바 예외는 객체이다. 자바는 개발자가 특정 클래스의 메서드에서 어떤 예외를 던질 수 있는지 선언하도록 요구한다.

 

  • 보안

자바 바이트 코드의 설계 및 JVM 사양은 자바 바이너리 코드의 보안을 검증할 수 있는 내장 메커니즘을 제공한다. 오라클 데이터베이스에는 보안 관리자의 인스턴스가 설치되어 있으며, 이는 오라클 데이터베이스 보안과 결합되어 누가 자바 메서드를 호출할 수 있는지 결정한다.

 

  • 관계형 데이터베이스에 대한 연결 표준

자바 데이터베이스 연결(JDBC)은 자바 코드가 관계형 데이터베이스의 데이터를 액세스하고 조작할 수 있게 한다. 오라클은 독립적이고, 이식 가능한 자바 코드가 관계형 데이터베이스에 액세스할 수 있도록 드라이버를 제공한다.

 

 

1.1.3 자바 가상 머신

 

다른 고급 컴퓨터 언어와 마찬가지로 자바 소스는 저수준 기계 명령어로 컴파일된다. 자바에서는 이러한 명령어를 바이트코드라고 하며, 각 명령어의 크기가 1바이트로 균일하기 때문이다. C와 같은 대부분의 다른 언어는 인텔 또는 HP 프로세서와 같은 특정 기계 명령어로 컴파일된다.

 

컴파일되면 자바 코드는 플랫폼 독립적인 표준 바이트코드 세트로 변환되며, 이는 자바 가상 머신(JVM)에 의해 실행된다. JVM은 자바 코드를 실행하는 특정 플랫폼에 최적화된 별도의 프로그램이다.

 

그림 1-2는 자바가 플랫폼 독립성을  유지하는 방법을 도식으로 보여준다. 각 플랫폼에는 운영 체제에 특화된 JVM이 설치되어 있다. 자바 바이트코드는 JVM을 통해 해석되어 적절한 플랫폼 종속 작업으로 변환된다.

 

 

자바 애플리케이션을 개발할 때 자바 언어로 작성된 미리 정의된 핵심 클래스 라이브러리를 사용한다. 자바 핵심 클래스 라이브러리는 일반적으로 사용되는 기능을 제공하는 패키지로 논리적으로 분리된다. 기본 언어 지원은 'java.lang' 패키지에서 제공되며, I/O 지원은 'java.io' 패키지에서 제공되며, 네트워크 액세스는 'java.net' 패키지에서 제공된다. JVM과 핵심 클래스 라이브러리가 결합되어 자바 프로그래머가 애플리케이션을 개발할 수 있는 플랫폼을 제공한다. 이 개념은 자바의 "write once, run anywhere"을 실행한다.

 

그림 1-3은 Oracle Java 애플리케이션이 JVM 위에 있는 Java 코어 클래스 라이브러리 위에 어떻게 존재하는지를 보여준다. 오라클 자바 지원 시스템은 데이터베이스 내에 위치하므로, JVM은 운영 체제와 직접 상호작용하는 대신 오라클 데이터베이스 라이브러리와 상호작용한다.