[Java] 자바

Robert.Yang·2023년 8월 28일

JAVA

목록 보기
1/8
post-thumbnail

참고
자바의 정석

자바란?

  • 자바는 썬 마이크로시스템즈에서 개발하여 공식적으로 발표한 객체지향 프로그래밍 언어이다.
  • 운영체제(플랫폼)에 독립적이다.
  • C++의 장점을 채택하는 동시에 잘 사용하지 않은 부분은 과감히 제외시켜 비교적 배우기 쉽고 간결한 표현이 가능하도록 했다.
  • 자바는 풍부한 클래스 라이브러리를 통해 프로그래밍에 필요한 요소들을 기본적으로 제공한다.

2010년부로 썬 마이크로시스템즈가 오라클사에 인수되면서 자바는 오라클사의 제품이 되었다.

자바의 유료화?

많은 사람들은 JAVA 8버전 이후로는 유료라고 많이 오해를 하고 있다.
물론 유료가 맞다. 오라클에서 만든 Oracle JDK 11 버전부터 상용으로 사용할 때 유료이다.
하지만 위의 강조된 조건에 하나라도 부합하지 않는다면 무료로 사용이 가능하다.

https://medium.com/@javachampions/java-is-still-free-c02aef8c9e04

자바의 역사

  • 자바는 오크(Oak)라는 언어로부터 시작되었다.
  • 자바의 처음의 목적은 가전제품에 소프트웨어를 탑재하는데 목적을 두었다.
  • 오크는 처음에는 가전제품이나 PDA와 같은 소형기기에 사용될 목적이었으나 여러종류의 운영체제를
    사용하는 컴퓨토들이 통신하는 인터넷이 등장하자 오크의 개발방향을 인터넷에 적합하도록 변경하며
    명칭을 자바로 바꾸었다.
  • 자바로 작성된 애플릿 (Applet)은 정적인 웹페이지에 사운드와 애니메이션 등의 멀티미디어적인
    요소들을 제공할 수 있는 유일한 방법이었기 때문에 많은 인기를 얻고 사용자층을 많이 확보하였다.
  • 하지만, 보안상의 이유로 최신 웹브라우저에서 더 이상 애플릿을 지원하지 않게되었고, 대신, 서버쪽
    프로그래밍을 위한 서블릿 (Servlet)과 JSP가 더 많이 사용되었다.
  • 그리고 현재에는 스마트폰 운영체제인 안드로이드에서도 자바를 사용한다.

자바 언어의 특징

  • 운영체제에 독립적이다.
    • 일종의 에물레이터인 자바가상머신 (JVM)을 통해서 가능
    • 자바응용프로그램은 운영체제나 하드웨어가 아닌 JVM하고만 통신
    • JVM은 전달받은 명령들을 해당 운영체제가 이해할수 있도록 변환
    • JVM은 운영체제에 종속적이기 때문에 여러 운영체제에 설치할 수 있는
      서로 다른 버전의 JVM 제공
    • 자바로 작성된 프로그램은 운영체제와 하드웨어에 관계없이 실행 가능하며
      이것을 '한번 작성하면 어디서나 실행된다. (Write once, run anywhere)'고 표현
  • 객체지향 언어이다.
    • 프로그래밍 언어 + 객체지향 개념 (ex. C++, JAVA, Python..)
    • 객체지향 프로그램으로 유지보수와 확장성이 좋다.
    • C나 C++보다 안정적이다.
  • 비교적 배우기 쉽다.
    • 자바의 연산자와 기본구문은 C++, 객체지향관련 구문은 스몰톡이라는 객체지향언어에서
      가져왔다.
    • 풍부한 라이브러리가 제공되고 오픈소스와 연동된다.
    • 하지만 개인적인 생각으로는 이런 풍부한 라이브러리때문에 배울 양이 많고 혼동이
      오는것 같다.
  • 자동 메모리 관리 (Garbage Collection)
    • 가비지 컬렉터 (garbage collector)가 자동적으로 메모리를 관리해주기 때문에
      개발자는 메모리를 따로 관리할 필요가 없다.
    • 예를 들어 C++같은 경우 가비지 컬렉터가 없어서 객체를 생성하고 꼭 소멸자로 소멸
      시켜줘야 한다.
  • 네트워크 분산처리를 지원한다.
  • 멀티쓰레드를 지원한다.
    • 일반적으로 멀티쓰레드 (multi-thread)의 지원은 사용되는 운영체제에 따라 구현방법도
      상이하며 처리 방식도 다르다.
    • 그러나, 자바는 관련된 라이브러리가 제공되므로 구현이 쉽다.
    • 여러 쓰레드에 대한 스케줄링을 자바 인터프리터가 담당한다.
  • 동적 로딩을 지원한다.
    • 자바는 실행 시에, 모든 클래스들이 로딩되지 않고 필요한 시점에 클래스를 로딩하여
      사용할수 있는 장점이 있다.

멀티쓰레드란?
하나의 프로그램으로 여러 작업을 하는 행위
ex) 카카오톡 (채팅 + 데이터 전송)

자바의 단점으로 속도문제가 있었지만, 바이트코드를 하드웨어가 알아들을 수 있는 기계어로 변환해주는
JIT 컴파일러와 Hotspot과 같은 신기술 도입으로 JVM의 기능이 향상되어 속도문제가 상당히 개선되었다.

JVM (Java Virtual Machine)

  • JVM은 직역하면 자바를 실행하기 위한 가상 컴퓨터
  • 자바로 작성된 애플리케이션은 모두 이 가상 컴퓨터 (JVM)에서만 실행되기 때문에
    자바 애플리케이션이 실행되기 위해서는 반드시 JVM이 필요하다.
  • 일반 애플리케이션 코드는 OS만 거치고 하드웨어로 전달되는 반면,
    자바 애플리케이션은 JVM을 한번 더 거치기 때문에, 그리고 하드웨어에 맞게 완전히 컴파일된
    상태가 아니고 실행시에 해석되기 때문에 속도가 느리다는 단점이 있지만 위에서 언급했듯이
    JIT 컴파일러와 향상된 최적화 기술이 적용되어 속도를 많이 개선되었다.
  • JVM은 플랫폼에 독립적이며 OS에 종속적이다.
  • 그래서 해당 OS에서 실행가능한 JVM이 필요하다.

JIT 컴파일러: https://aboullaite.me/understanding-jit-compiler-just-in-time-compiler/
JDK, JRE 그리고 JVM: https://howtodoinjava.com/java/basics/jdk-jre-jvm/
https://en.wikipedia.org/wiki/List_of_JVM_languages

profile
모든 것을 즐길 줄 아는 개발자, 양성빈입니다.

0개의 댓글