이전글
자바 언어의 특징
기술의 발전이 나날이 빨라지고, 새로운 기술들이 지금 이 시간에도 우후죽순으로 생겨나고 있습니다. 때문에 우리는 그 중 필요에 따라 기술을 선택해야 하며, 어떠한 기술을 어떻게(HOW) 사용하는지도 중요하지만 그보다 왜(WHY) 사용해야 하는가에 집중할 필요가 있습니다.
한 때 전성기를 맞이했던 자바언어는 현재 10%대의 언어 점유율로 점점 그 힘을 잃어가는 언어이지만 그럼에도 불구하고 점유율이 1위인 언어임에는 틀림없고 유독 우리나라에서는 자바 언어 점유율이 말도 안되게 높기 때문에 밥벌이? 를 위해서 어쩔 수 없이 배워야 하는 현실도 존재합니다.
다시 본론으로 돌아가 어떤 기술을 왜 배워야 하는지를 판단하기 위해서는 그 기술의 특징을 알아둘 필요가 있습니다.
이번 글에서는 자바 언어의 간략한 특징에 대해서 알아보도록 하겠습니다.
운영체제에 독립적인 자바
기존의 언어들은 하나의 운영체제에 맞게 작성된 어플리케이션은 다른 운영체제에서 구동시키기 위해서 많은 노력을 추가적으로 해야 했으며, 이러한 노력들은 생산성을 매우 떨어뜨리는 원인이 되었습니다. 그러나 자바는 운영체제 위에 JVM 이라는 가상 머신을 두어 우리가 작성한 자바 어플리케이션이 JVM 위에서 동작하게 설계 되었습니다.
때문에 각각의 운영체제에 맞는 JVM만 셋팅해 두고 어플리케이션은 한 번만 작성하여 각각의 JVM 위에서 동작하게 되는 장점이 있습니다. 이렇게 한 번만 작성한 어플리케이션을 어떤 환경에서든 구동시킬 수 있는 것을 Write Once, Run Anywhere 라고 표현하기도 합니다.
객체지향 언어 자바
자바는 객체지향 언어로서, 객체지향 패러다임의 특징인 캡슐화, 상속, 추상화, 다형성이 적용되는 순수한 객체지향 언어입니다. 때문에 객체지향 패러다임을 이용한 프로그래밍이 가능하여 높은 재사용성 및 유지보수성 생산성등의 많은 장점이 있습니다. 물론 기본형(primitive type) 변수 타입이 존재하며 이 기본형 변수는 객체가 아니기 때문에 개발자들에게 100% 객체지향 언어가 아니라는 말을 듣기도 하지만 기본형 변수에 대한 Wrapper 클래스(또는 Boxed Class)가 존재하기 때문에 큰 문제가 되지는 않습니다.
비교적 접근하기 쉬운 언어
자바 언어의 문법과 연산자는 C++과 Small Talk 라는 객체 지향 언어에서 가져왔습니다. 장점은 취하고 단점은 과감히 배제했기 때문에 간결한 문법을 지니고 있고 현실과 같은 객체지향이기 때문에 사람이 좀 더 친숙하게 이해할 수 있는 점이 있습니다.
가비지 컬렉션(Garbage Collection)
C언어 및 일부 언어들은 사용자가 할당한 메모리를 언어 레벨에서 직접 메모리 해제를 시켜주어야 하며, 이러한 메모리 관리를 해주지 못하면 프로그램에 큰 문제가 발생하기도 합니다. 그러나 자바는 가비지 컬렉터라는 녀석이 프로그램이 더이상 사용하지 않는 메모리를 찾아 해제시켜 주기 때문에 개발자는 메모리 관리에 신경쓰지 않아도 되며, 메모리 관리 때문에 작성해야 하는 코드가 사라지기 때문에 코드가 간결해 지는 장점이 있습니다.
다양한 API 및 오픈소스
자바는 오래된 언어의 역사와 세계적으로 1위의 점유율을 가지고 있기 때문에 그만큼 많은 오픈소스 라이브러리들이 존재하며, 기본적으로 자바 언어에서 제공하는 API들도 풍부합니다. 이는 자바 개발자는 필요한 기능이 있으면 새로 기능을 개발하는 것이 아니라 기존에 개발된 수많은 오픈소스와 API들을 선택할 수 있다는 뜻이기도 합니다.
JVM(Java Virtual Machine)
JVM은 우리말로 직역하면 자바 가상 머신 입니다. 여기서 머신은 기계를 뜻하며, 서구권에서는 컴퓨터를 머신이라 부르는 경향이 있으므로 더욱 부드럽게 해석하자면 자바 가상 컴퓨터가 되겠습니다. 가상 컴퓨터가 부르는 이유는 실제 물리적으로 존재하는 컴퓨터가 아닌 논리적(소프트웨어)으로 구현한 컴퓨터이기 때문입니다.
JVM은 운영체제 위에서 동작하며, 자바에서는 여러가지 운영체제 버전에 맞는 JVM을 제공하고 있습니다. 이렇게 운영체제 위에 JVM이라는 하나의 중간계층을 두는 이유는 호환성을 높이기 위함입니다.
기존 일부 언어들은 하나의 운영체제에서 작성된 프로그램을 다른 운영체제에 배포하기 위해서는 다른 운영체제에 맞게 다시 수정 및 컴파일 해야 하는 노력을 해야 했습니다. 이는 운영체제별로 사용하는 API라 다르기 때문인데 과거에 프로그램을 컴파일 한다는 것은 수십분이 걸리기도 하는 지루한 작업이었고 규모가 큰 프로그램이라면 이러한 작업은 매우 프로그램 생산성을 저해시키는 일이었습니다.
그러나 자바는 작성된 프로그램(.java)을 컴파일하여 나온 결과물인 바이트코드(.class)를 JVM이라는 가상 머신에서 구동시키고, 운영체제와의 호환성은 JVM이 담당해주기 때문에 호환성이 보장되는 것입니다. 단 각각의 JVM은 운영체제에 종속적이기 때문에 자바 프로그램을 구동시키기 위해서는 운영체제에 맞는 JVM이 설치되어 있어야 합니다.
과거에는 이러한 JVM 계층이 추가 됨으로써 운영체제 위에서 직접적으로 동작하던 다른 언어들보다 느린 속도가 단점으로 부각되었습니다.
그러나 오랜 시간 JVM은 최적화 되고 발전했기 때문에 일부 동작에서는 심지어 C와 비슷하거나 더 빠르다는 벤치마킹 결과도 존재할만큼 속도가 향상되었습니다.
자바는 컴파일러 언어인가 인터프리터 언어인가
자바는 아래 그림과 같이 컴파일러와 인터프리터 두 가지를 사용하는 언어입니다.
JVM 설명에서도 나와 있지만 최초 작성된 소스(.java 확장자) 원본은 컴파일러를 통해 JVM 인터프리터가 해석할 수 있는 바이트코드로 변환되며(.class 확장자) 이러한 바이트코드를 JVM이 해석하여 운영체제가 이해할 수 있는 기계어로 변환하여 실행합니다.
우리가 자바 JDK(Java Development Kit)를 설치하고 다음과 같이 개발에 필요한 명령어 도구 프로그램들이 모여있는 bin 디렉터리에 접근하면 위 그림에서 보이는 javac.exe와 java.exe를 볼 수 있습니다.
'자바[Java]' 카테고리의 다른 글
[JAVA] Hello World 프로그램 분석 (0) | 2018.05.10 |
---|---|
[JAVA] 자바 첫 번째 프로그래밍 Hello World 출력 코딩하기 (2) | 2018.05.10 |
[JAVA] 사용자 정의 예외 (0) | 2017.12.29 |
[JAVA] 자바 예외를 발생시키는 방법 - throw (0) | 2017.12.29 |
[JAVA] 자바 예외 떠넘기기 - throws (1) | 2017.12.28 |