개발 일지/Java

[Java] Java란?

미숫가루설탕많이 2022. 12. 21. 11:44

 자바(Java)는 객체지향 프로그래밍(Object Oriented Programming, OOP) 언어이다. 운영체제에 독립적으로 실행이 가능하기 때문에 'Write Once', 'Run Anywhere' 이라는 슬로건을 내세워 빠르게 많은 사용자를 확보했다. 다양한 운영체제가 공존하는 웹 환경에 적합한 언어로써 현재까지도 전 세계에서 많이 쓰이는 인기 있는 언어이다.

 

 

자바의 주요 특징


  1. 운영체제에 독립적이다

     자바 이전의 언어들은 특정 CPU에서만 작동하거나 특정 OS에 따라 다르게 작성해야 하는 언어(C, C++)들이 대부분이었다. 자바는 이 문제를 해결하고자 JRE(Java Runtime Environment)가 설치되어 있는 모든 운영체제에서 실행이 가능하도록 만들어졌다.
    * JRE : JVM(자바 가상머신) + 표준 클래스 라이브러리


  2. 객체 지향 언어이다.

     자바는 객체지향 프로그래밍 개념을 사용하는 언어이다. 따라서 모든 기능은 객체로 만들어 사용해야 한다. 객체는 쉽게말해서 프로그램이 동작하는 부품이라고 생각하면 된다. 여러 객체들을 만들고 조립하여 하나의 프로그램을 실행하는 개념이 OOP(Object Oriented Programming)이다. 객체 지향적으로 설계된 프로그램은 유지보수가 쉽고 확장성이 높다.


  3. 함수형 프로그래밍을 지원한다.

     자바 8버전부터 함수형 프로그래밍을 지원하는 문법인 람다식과 스트림이 추가되었다. 이를 사용하면 컬렉션의 요소를 필터링, 매핑, 집계 처리하기 쉬워지고 코드가 간결해지는 장점이 있다.


  4. 자동으로 메모리를 관리한다.

     C나 C++의 경우 메모리의 생성과 소멸을 개발자가 직접 설계해야 했지만 자바는 가비지 컬렉터(Garbage Collector)를 실행시켜 자동으로 사용하지 않는 메모리를 수거한다. 이를 통해 개발자는 메모리를 관리하는 수고를 덜고 핵심 코드에 집중할 수 있다.

 

 

 

 

JVM(Java Virtual Machine)


 자바는 컴파일러를 통해 기계어로 변환되는 언어이다. 여기서 컴파일이란, 특정 프로그래밍 언어를 기계가 이해할 수 있는 언어로 옮기는 번역 과정이다. 다시 말하면 자바 언어를 JVM이 이해할 수 있는 코드(Bytecode)로 변환하는 것을 의미한다. 그리고 JVM은 바이트코드를 운영체제에 맞는 기계어로 변환해준다.

 

 JVM은 자바 프로그램을 실행시키는 도구이며, 자바가 운영체제에 독립적인 것은 JVM이 있기 때문에 가능한 것이다. 프로그램이 제대로 실행되기 위해서는 컴퓨터의 자원(CPU, RAM, 각종 입출력 장치 등)을 활용해야 하는데, 이런 자원을 관리하는 것은 운영체제이므로 프로그램은 운영체제가 정한 규칙을 따라야 한다. 따라서 서로 다른 운영체제(Linux, Windows, MacOS 등)에서 프로그램을 실행하기 위해서는 운영체제별 규칙을 따르는 절차가 필요하고 JVM은 이 문제를 해결해준다.

 

 

 

 

JDK(Java Development Kit)


  • JRE(Java Runtime Environment) : JVM + 표준 클래스 라이브러리
  • JDK(Java Development Kit) : JRE + 개발에 필요한 도구

 자바 개발 키트(JDK)는 자바 애플리케이션을 구축하기 위한 핵심 플랫폼 구성요소로 개발자들이 JVM과 JRE에 의해 실행되고 구동될 수 있는 자바 프로그램을 생성할 수 있게 해준다. 만약 자바 프로그램을 실행만 할 것이라면 JRE만 설치해도 상관없으나 자바 프로그램을 개발하기 위해서는 JDK를 설치해야 한다. JDK는 OracleJDK(오라클이라는 회사에서 관리하는 버전)와 OpenJDK(오픈소스)가 있다.

 

 JDK에는 여러 버전이 존재하는데 컴퓨터나 스마트폰처럼 새로 나온 버전을 사용하는 것이 적절하지만은 않다. JDK 뿐만 아니라 개발과 관련된 툴의 버전을 선택할 때 우선적으로 고려해야 하는 가장 중요한 요소는 안정성이다. 만약 웹 서버가 안정적으로 동작하지 못한다면 회사가 제공하는 서비스를 사용자들이 이용할 수 없게 되고 다른 상황으로 치명적인 에러가 발생하여 데이터가 소실되거나 엉키게 되면 복구하는 데 많은 시간과 비용이 들어간다. 이와 같은 상황은 회사의 수익과 직결되어있기 때문에 웹 서버는 반드시 안정적으로 동작할 수 있어야 한다. 어떤 개발 도구 버전의 안정성을 판단하는 데 중요한 요소는 다음과 같다.

 

  1. 해당 도구에 대해 장기적인 유지 및 보수가 보장되는지
  2. 해당 도구가 많은 사람들에 의해 오랫동안 사용되어 왔는지

 

 LTS(Long Term Supprot)라는 버전이 있다. LTS는 개발 도구에 대한 장기적인 관리와 지원이 제공된다는 의미이다. 따라서 일반적으로 엔터프라이즈용 애플리케이션을 개발할 때는 개발 도구에 LTS라는 표기가 명시된 버전을 주로 사용한다. 또한, 해당 개발 도구가 얼마나 많은 사람들에 의해 오랫동안 사용되어 왔는지도 버전 안정성에 대한 중요한 지표로 작용한다. 그렇다면 'LTS 버전 중에서 사용자가 가장 많고 오래된 8 버전을 사용하는 것이 좋을까?' 라는 질문에 대한 정답은 없다. 어떤 회사의 서비스에는 8버전이 적합할 수도 있고 어떤 회사의 서비스에는 17버전이 적합할 수도 있기 때문이다. 8버전이 가장 안정적인 버전이라고 할 수는 있지만 이후에 등장하는 버전들에는 유용한 기능들이 추가되기 때문에 충분히 안정적이면서도 본인에게 필요한 버전을 사용하는 것이 좋다고 생각된다.

'개발 일지 > Java' 카테고리의 다른 글

[Java] 콘솔 입출력(I/O)  (0) 2022.12.22
[Java] 연산자(Operator)  (0) 2022.12.22
[Java] 문자열(String)  (0) 2022.12.21
[Java] 타입(Type)  (0) 2022.12.21
[Java] 변수(Variable)와 상수(Constant)  (0) 2022.12.21