Java

Java 기초 - 1

RangA 2023. 4. 16. 14:57

Java

1996년 1월에 공식적으로 발표한 객체지향 프로그래밍(Object Oriented Programming) 언어로 국내에선 전자정부 프레임워크 등에 사용되면서 백엔드 개발 분야에서 가장 보편적으로 사용되고 있는 언어이다.

Java의 특징

  1. 운영체제에 독립적이다.
    : 기존의 언어는 한 운영체제에 맞게 개발된 프로그램을 다른 종류의 운영체제에 적용하기 힘들었다. 반면, 자바는 자바가상머신(Java Virtual Machine, JVM)을 통하여 모든 운영체제에서 실행이 가능하도록 만들어졌다. 자바 응용프로그램은 운영체제나 하드웨어가 아닌 JVM 하고만 통신하고 JVM이 자바 응용프로그램으로부터 전달받은 명령을 해당 운영체제가 이해할 수 있도록 변환하여 전달한다. 자바로 작성된 프로그램은 운영체제에 독립적이지만, JVM은 종속적으로 자바를 개발한 썬 마이크로시스템즈에선 여러 운영체제에 설치할 수 있는 다른 버전의 JVM을 제공한다. 따라서 자바로 작성된 프로그램은 운영체제와 하드웨어에 관계없이 실행 가능하다.

Write Once, Run Anywhere

  1. 객체지향언어이다.
    : 자바는 객체지향 프로그래밍 개념을 사용하는 언어로 모든 기능을 객체로 만들어 사용해야 한다. 여러 부품(객체)들을 만들고 조립하여 하나의 프로그램을 실행하는 개념이 객체지향언어이다. 객체지향개념의 특징인 상속, 캡슐화, 다형성이 잘 적용되어 유지보수가 쉽고 확장성이 높다.
  2. 비교적 배우기 쉽다.
    : 자바의 연산자와 기본 구문은 C++에서, 객체지향과 관련된 구문은 스몰톡이라는 객체지향언어에서 가져왔다. 이 언어들의 장점을 취합, 불필요한 부분은 제거하여 단순화함으로써 타 언어에 비해 쉽게 배울 수 있다.
  3. 자동 메모리 관리(Garbage Collection)
    : 자바로 작성된 프로그램이 실행되면 가비지 컬렉터(Garbage Collector)가 자동적으로 메모리를 관리해주기 때문에 프로그래머는 메모리 관리를 하지 않아도 된다. 자동으로 메모리를 관리한다는 것이 다소 비효율적인 면도 있지만, 프로그래밍에 집중할 수 있도록 지원한다.
  4. 네트워크와 분산처리를 지원한다.
    : 다양한 네트워크 프로그래밍 라이브러리(Java API)를 통해 비교적 짧은 시간에 네트워크 관련 프로그램을 쉽게 개발할 수 있도록 지원한다.
  5. 멀티쓰레드를 지원한다.
    : 자바에서 개발된 멀티쓰레드 프로그램은 시스템과 관계없이 구현 가능하며, 관련된 라이브러리(Java API)가 제공되므로 구현이 쉽다. 또한 여러 쓰레드에 대한 스케줄링을 자바 인터프리터가 담당한다.
  6. 동적 로딩(Dynamic Loading)
    : 자바는 동적 로딩을 지원하여 실행 시에 모든 클래스가 로딩되지 않고 필요한 시점에 클래스를 로딩하여 사용할 수 있다. 또한 일부 클래스가 변경되어도 전체 애플리케이션을 다시 컴파일하지 않아도 되며, 애플리케이션의 변경사항이 발생해도 비교적 적은 작업만으로 처리할 수 있는 유연한 애플리케이션을 작성할 수 있다.

JVM과 JDK

자바는 컴파일러(Compiler)를 통해 기계어로 변환되는 언어이다. 컴파일은 특정 프로그래밍 언어를 기계가 이해할 수 있는 언어로 변역하는 과정으로 자바 언어를 JVM이 이해할 수 있는 코드로 변환하는 것을 의미한다. JVM은 바이트코드를 OS(운영체제)에 맞는 기계어로 변환한다. 따라서 자바 애플리케이션이 실행되기 위해선 반드시 JVM이 필요하다.

자바 애플리케이션은 JVM을 거쳐 OS로, OS에서 하드웨어(컴퓨터)로 전달된다. 자바 애플리케이션은 JVM과 상호작용하여 OS와 하드웨어에 독립적이라 다른 OS에서도 프로그램의 변경없이 실행 가능하다. 단, JVM은 OS에 종속적으로 해당 OS에서 실행 가능한 JVM이 필요하다.

JVM은 JDK나 JRE를 설치하면 자동으로 설치된다. 자바는 JVM을 거치기 때문에 C나 C++에 비해 속도가 느린 편이지만 JVM 내부의 최적화된 JIT컴파일러를 통해 속도를 크게 개선했다.

 

  • JRE(Java Runtime Environment) : JVM + 표준 클래스 라이브러리
    : 자바로 작성된 응용프로그램이 실행되기 위한 최소환경
  • JDK(Java Development Kit) : JRE + 개발에 필요한 도구(실행파일)
    : 자바 개발 도구