Java - 7 features of Java

  • 자바의 7가지 특징
  • 우리가 웹 개발을 할 떄 C나 C++을 사용하지 않고 Java를 사용하는가? 그 이유는 자바의 특징에 있다.

1. 객체지향 언어이다.

  • 하나의 기능을 객체로 만들고, 그 객체들을 결합하여 하나의 프로그램을 만드는 언어이다. 이렇게 객체지향적으로 설계하면 대규모 애플리케이션 개발에서 개발과 유지보수의 효율성을 보장한다.



2. 컴파일 언어임과 동시에 인터프리터 언어이다.

  • 우선 컴파일 언어부터 보면, 컴파일러라는 고급언어를 저급언어로 번역해주는 프로그램을 활용하여 소스코드를 기계어로 컴파일 해서 실행파일을 만들고, 실행하는 방식의 언어를 말한다. 컴파일 언어는 한 번에 코든 코드를 기계어로 번역하며, 단 한 번만 수행한다. 그리고 코드를 수정하면, 전체적으로 다시 컴파일을 진행해야 한다.
  • 컴파일 언어는 런타임 상황에 이미 모든 코드가 기계어로 번역되어있기 때문에 인터프리터에 비해 빠르게 실행할 수 있다. 그래서 직접 하드웨어를 조작하기에 유리하다. C나 C++이 대표적이다.
  • 반면 인터프리터 언어는 코드를 한 줄씩 읽어 내려가며 실행한다. 이는 기계어로 변환하는 컴파일러와 달리, 컴파일 하지 않고 소스를 한 줄씩 읽어서 실행한다. 컴파일 하는 과정이 없기에 컴파일 시간이 없지만, 실행 시마다 이러한 인터프리트 과정이 수행되야 하기에 런타임 속도가 느리다. 대신 코드를 수정해도 빌드 없이 바로 실행이 가능하다.


그럼 컴파일 언어임과 동시에 인터프리터 언어인 자바는 어떻게 되는걸까?

  • 자바 컴파일러(javac)는 우리가 만든 코드인 .java파일을 컴파일 하여 JVM에서 읽을 수 있는 기계어인 바이트 코드로 먼저 변환한다. 이 과정이 자바의 컴파일 과정이다.
  • 이렇게 바이트코드로 바뀐 .class 파일을 런타임 때, JVM에게 전달 & 배포한다. 그럼 JVM은 자바 인터프리터를 사용하여 해당 코드를 해당 환경에 맞는 머신코드로 변환한다. JVM은 런타임 때 인터프리터를 사용하고, 그 후 호스트 시스템에서 그 코드를 실행한다.
  • 이는 다른 특징들과도 엮이는 부분인데, JVM의 이러한 성질 덕분에 여러 환경에서 실행이 가능하고, 객체지향적으로 클래스를 나누기 때문에 수정을 해야 할 경우, 수정한 클래스만 따로 컴파일 해주면 되는 특징도 갖게 된다.



3. 독립적인 플랫폼이다.

  • 어떤 OS 환경에서도 자바 언어를 사용할 수 있다. 그 이유는 JVM 이라는 자바 가상 머신에서 실행되기 때문이다. 특정 하드웨어에서만 빠르게 작동시키면 되는 기계 친화적 언어와는 다르게, 다양한 OS를 지원해야 하는 대규모 애플리케이션에서 Java를 사용하는 이유이기도 하다.



4. 메모리 관리가 자동으로 가능하다.

  • 자바는 개발자가 직접 메모리에 접근할 수 없으며, 자바가 직접 관리한다.
  • 객체 생성시 자동적으로 메모리 영역을 찾아서 할당해주고, 사용하지 않는 객체는 GC를 통해 제거한다.
    • C 는 개발자가 직접 메모리에서 삭제하는 코드를 짜야했으나, 자바는 그렇지 않다.



5. 멀티 스레딩을 지원한다 ( 쉽게 구현할 수 있다 ).

  • 하나의 프로그램 단위에서 동일한 스레드를 여러개 수행할 수 있게끔 지원한다.
  • 자바는 자바 API를 사용하여 멀티스레드를 구현하기 때문에 쉽게 구현할 수 있다.
    • 스레드란 ? : 프로세스 내에서 실제로 작업을 수행하는 주체를 말한다.



6. 동적 로딩을 지원한다.

  • 자바는 애플리케이션이 실행 될 때 모든 객체를 한 번에 생성하지 않고, 객체가 필요한 시점에 해당 클래스를 동적 로딩하여 생성하며, 필요없는 메모리는 자동으로 메모리에서 소멸시킨다.
  • 그래서 실행 속도가 정적로딩보다는 느리지만, 큰 프로그램도 작은 메모리에서 실행이 가능하다.
  • 느린 실행 속도라는 단점을 보완하기 위해 static 키워드를 사용하기도 한다. static 키워드 사용시 정적 로딩처럼 바로 메모리에 올릴 수 있기 때문이다.



7. 안전하고 강력하다

  • 자바는 메모리 접근을 자바가 직접 관리하기 때문에, 메모리 누수와 같은 문제가 발생하지 않아서 안전하다.
  • 포인터 개념이 없고, 유형 정의가 강고하여 실행 전에 클래스 파일을 이용한 프로그램 검사가 가능하다.



자바를 주로 사요하는 웹 애플리케이션에서는 이러한 특징들이 강점으로 작용한다.
하나의 하드웨어에서 빠르게 동작해야하는 경우에는 컴파일 언어면서 정적로딩 언어가 강력하다.
그러나 다양한 OS에서 동시에 많은 사용자들이 접근하는 웹 애플리케이션은 안전하고 독립적인 플랫폼인 자바로 개발하는 것이 유리하다.






results matching ""

    No results matching ""