자바의 8가지 특징

반응형

다음은 자바를 정의하는 단어이다. 이 가운데 자바의 8가지 중요한 특징을 살펴보자.

A simple, object-oriented, distributed, interpreted, robust, secured, architecture neutral, portable, high-performance, platform independent, multi-threaded, and dynamic language

  1. 간단하다 (Simple)
  2. 객체 지향적이다 (Object-oriented)
  3. 인터프리터 언어이다 (Interpreted)
  4. 강력하다 (robust)
  5. 안전하다 (Secured)
  6. 플랫폼이 독립적이다 (Platform independent)
  7. 멀티 스레드를 지원한다 (Multithreaded)
  8. 동적이다 (Dynamic)

간단하다 (Simple)

자바는 C++에 가깝지만 훨씬 간단하다. 자바는 고급 언어에 들어 있는 여러 요소 중에서 불필요하다고 판단되는 것을 모두 제거했다.

객체 지향적이다 (Object-oriented)

자바는 숫자(int, float, long 등)나 논릿값(true, false)을 제외하면 거의 모두 객체로 구성된다. 실제로 자바는 Object 클래스에서 모든 클래스를 파생한다.

자바에서는 int, float, long, true, false 등을 원시 자료형이라고 한다.

인터프리터 언어이다 (Interpreted)

자바는 정확하게 말하면 컴파일 언어인 동시에 인터프리터 언어이다. 자바는 먼저 텍스트 소스를 컴파일하여 이진 파일(클래스 파일)로 만든 다음, 자바 런타임이 이 클래스 파일을 인터프리트 interpret 하면서 실행한다. 자바는 먼저 시스템과 무관한 이진 파일을 만듦으로써 컴파일 언어에 가까운 속도와 함께 시스템의 독립성을 얻을 수 있었다.

인터프리터 언어는 코드를 한 줄씩 작성하고 실행하여 결과를 바로 확인할 수 있다.

강력하다 (robust)

자바는 포인터 연산을 지원하지 않는다. 이는 잘못된 주소를 가리킬 가능성을 사전에 없앤 것이다. 자바는 모든 메모리 접근을 자바 시스템이 관리하고 제한하며, 또한 예외 처리까지 하므로 시스템이 붕괴될 우려가 없다. 예를 들어 자바는 리소스 관리(garbage collection)를 하는데 사용이 끝난 리소스를 시스템이 메모리에서 삭제하는 방식을 채택하고 있어 프로그래머가 메모리 유출을 걱정할 필요가 없다.

포인터 연산은 C 또는 C++와 같은 언어에서 메모리 주소를 조작하는 연산으로 배열이나 구조체 멤버에 접근할 때 사용한다.

안전하다 (Secured)

자바는 프로그램을 작성할 때 자료형 타입에 매우 민감하다. 이것은 마치 코딩할 때 잔소리꾼이 끊임없이 따라다니며 잘못된 코드를 작성하지 않게 지적하는 것과 같다. 그래서 자바는 일단 컴파일만 되면 실행할 때 오류 발생률이 다른 언어에 비해 현저히 낮다. 파이썬과 같은 동적 언어에 익숙한 프로그래머라면 자바의 고지식한 면을 싫어할 수도 있다. 하지만 자바의 이런 족쇄 같은 자료형 체크는 코드를 매우 명확하게 만들어 준다.

플랫폼이 독립적이다 (Platform independent)

자바의 실행 파일은 이진 코드(클래스)이므로 자바 런타임을 설치한 시스템에서는 어디서나 실행할 수 있다. 즉, 자바로 작성한 프로그램이라면 운영체제와 상관없이 어디서든 실행할 수 있다는 뜻이다. 왜냐하면 자바 프로그램은 가상 머신으로 실행되기 때문이다. 처음에는 이 방식이 느리고 부담스러웠지만, 지금은 하드웨어의 눈부신 발전과 여러 기술이 개발되면서 이러한 단점은 대부분 사라져 버렸다.

멀티 스레드를 지원한다 (Multithreaded)

멀티 스레드를 지원하면 프로그램 단위가 같은 스레드를 동시에 수행할 수 있다. 자바는 멀티 프로세서 하드웨어를 지원하도록 설계되었으므로 멀티 CPU 시스템에서 효율이 높다.

동적이다 (Dynamic)

자바 인터페이스를 이용하면 모듈을 갱신할 때 다른 모듈까지 모두 갱신할 필요가 없다. 인터페이스가 인스턴스 변수와 도구의 실행문을 모두 배제한 채 객체 간의 상호 작용을 정의하기 때문이다.

반응형