Programming Language/Java

[JAVA] JAVA란? JAVA의 실행순서와 특징에 대하여

oneyenee 2022. 11. 20. 04:23
JAVA란 무엇인가?

컴퓨터 프로그래밍을 개발하는데 사용하는 언어로 객체지향 프로그래밍(OOP)을 대표하는 언어이다. JVM(Java Virtual Machine, 자바 가상머신) 위에서 동작하여 OS에 독립적으로 개발이 가능하게끔 지원한다는 장점이 있는 반면 JVM위에서 동작하기 때문에 타 언어에 비해 속도가 느리다단점이 있다. 자바를 이해하기 위해선 객체지향 프로그래밍(OOP)에 대한 이해가 필요하다. 만약 잘 모른다면 아래 링크를 참조하시길 바란다.

https://oneyenee.tistory.com/11

 

객체지향 프로그래밍(OOP)이란? 장단점과 특징, SOLID

자바를 배우기 시작했을 때부터 자바로 프로그래밍을 하고 있는 지금까지 가장 많이 들어본 질문 3가지를 뽑아보라면, 단언컨데 OOP에 대해서 설명해보라는 질문이 가장 대표적이라고 생각한다.

oneyenee.tistory.com


위의 글만 봤다면 제정신인 블로그 글처럼 보였겠지만 나는 새벽 3시에 글을 쓰고 있기 때문에 짜임새 있는 글을 못쓰겠다. 그니까 의식의 흐름대로 오늘은 스웩있게 글을 쓸거다.

 

"자바! 컴퓨터 프로그램을 짜는 언어의 종류 중 하나인 것은 알겠는데.. 자바로 프로그램을 짜면 컴퓨터는 어떻게 알아먹는거지? 컴퓨터는 0과 1로 명령어를 수행한다며?! 자바는 영어로 써있자나"

ㅋㅋ 인정하기 싫은데 모르겠다 넘어갈까 생각했었다. 일단 프로그램 어케 짜는지 배웠고.. JVM이 뭐고 자바가 컴퓨터랑 어떻게 대화하는지 1도 모르겠지만 쨌든 프로그램을 짤 수 있잖아?...라고 생각했다. 하지만 미루고 미뤄서 결국 면접 준비할 땐 외워야한다는 것. 찡긋- 자, 가보자고.

 

JAVA의 실행순서

http://tcpschool.com/java/java_intro_programming

java가 실행되는 순서가 가장 잘 나타나 있는 그림이라 생각돼서 가져와봤다. 솔직히 처음봤을 땐 뭔소린지 1도 모르겠더라. 그래서 하나씩 쪼개서 볼거다. 조각조각 땃따따

 

먼저, 한 개발자가 자바로 계산기 프로그램을 짜서 배포를 했다고 가정해보자. 프로그램 파일을 열어보면 자바로 개발된 소스가 쭉 있을 것이다. 그런데 이 자바.. 그러니까 인간에게 친숙한 언어(영어)로 개발된 프로그램을 0과 1밖에 모르는 바보 컴퓨터가 알아들을 수 있을까? 정답은 절대 NO다. 

 

그래서 컴파일(Compile) 이라는 과정이 필요하다. java로 개발된 소스를 컴퓨터가 알아들을 수 있는 기계어로 번역해주는 과정을 바로 컴파일 이라고 한다. 그래서 자바 컴파일러를 이용해 Class 파일 (.java)을 JavaByteCode(.class)로 번역을 해주는 것이다.

그럼 javaByteCode는 바로 컴퓨터가 읽을 수 있나? 안타깝게도 그것도 NO다. 하지만 앞서 말한 것처럼 자바는 JVM(자바가상머신)을 지원해주기 때문에 개발자는 그 이상을 힘들게 고려할 필요가 없다.

 

대충 JVM이 알아서 읽는다니까 프로그램을 실행시켜보자. 컴파일이 끝난 계산기 프로그램은 사용자에 의해서 실행된다. 프로그램이 동작되는 시점을 런타임(Runtime)이라고 부르며 런타임환경에서 JVM은 빛을 발한다.

Class Loader는 앞서 컴파일된 JavaByteCode를 JVM 메모리 내로 로드시킨다. JVM은 코드를 인터프리터방식을 사용하여 위에서부터 한줄 한줄 읽어 실행을 한다. 근데 한줄한줄 실행시키면 실행속도가 너무 느리다는 단점이 생긴다. 내가 으이?! 계산기로 겁나 많은 계산 시키면 우짤래! 하지만 자바도 JVM도 버전업을 하면서 발전을 했다.

 

JVM : 요놈 이거 보다보니까 자주 반복되는 코드가 있는데?! 기계어 캐싱.. 진행시켜!

JIT 컴파일러는 그렇게 생겼다. 자주 반복되는 코드를 기계어로 변환시켜서 캐싱해놓고 이 캐싱된 기계어는 인터프리터가 해석하는 것이 아니라 JIT 컴파일러가 기계어로 변환해논걸 캐쉬에서 꺼내 바로 실행시킨다. 그리고 JIT 컴파일러와 인터프리터는 동시에 런타임 영역에서 다른 스레드에서 실행되는 것이다.

 

그렇게 JVM내부에서 잘 실행된 후엔 사용자의 운영체제에 맞는 기계어로 해석된다. 왜냐? 계산기 프로그램을 만든 개발자는 사용자가 Mac OS를 사용하는지 Window를 사용하는지 모른다. 그러니까 JAVA는 사용자의 OS에 독립적으로 개발자가 개발할 수 있게 도와주지만 JVM은 OS에 의존적이라고 말할 수 있다.

 

글이 길었지만 5줄로 JAVA 실행순서를 정리하자면 다음과 같다.

 

  1. 개발자가 .java파일을 생성한다.
  2. build 한다.
  3. java Compiler가 .java파일을 .class 파일로 컴파일하여 JavaByteCode로 변환한다.
  4. Class Loader가 JavaByteCode를 JVM내의 메모리 영역으로 load한다.
  5. JVM 실행엔진을 통해 컴퓨터(OS)가 읽을 수 있는 기계어로 해석된다.

JAVA의 특징

자바의 객체지향이라는 특징과 동작원리를 알게된 시점에서 우리는 JAVA의 특징을 정리할 수 있다.

 

- 자바는 객체지향 언어이다.

객체를 만들기위한 설계도, 즉 클래스를 만들고 클래스로 찍어낸 객체와 객체 간의 의존성을 부여하며 프로그램을 완성시킨다. 객체지향 언어임으로 객체지향 언어의 특징인 추상화, 캡슐화, 상속, 다형성을 지원한다.

 

- 이식성이 높다.

자바 실행환경이 설치되어 있는 모든 운영체제에서 실행 가능하다.

 

- 하이브리드 언어이다.

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

 

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

JVM 내부의 Garbage Collector를 통해 자동으로 사용하지 않는 객체를 관리한다. 개발자는 메모리 관리의 수고를 덜고, 핵심기능 코딩에 집중할 수 있다.

 

- 오픈소스 라이브러리가 풍부하다.

자바는 오픈소스 언어로 자바 프로그램에서 사용하는 라이브러리 또한 오픈소스의 양이 방대하다.

 

- JVM 위에서 실행되기때문에 OS에 독립적으로 개발가능하지만 다른언어에 비해 실행속도가 느리다.

 

 

*참조

https://code-lab1.tistory.com/63

https://tjdrnr05571.tistory.com/19

https://dev-coco.tistory.com/153