Home 자바 프로그램 개발을 위한 3대 핵심기술
Post
Cancel

자바 프로그램 개발을 위한 3대 핵심기술

JAVA

저희가 자바에 대해서 얘기할 때 그것은 프로그래밍 언어로서의 자바일 수도 있지만, 소프트웨어 플랫폼으로서의 자바일 수도 있습니다. 소프트웨어 플랫폼으로서의 자바란 자바(언어)로 기술된 프로그램 개발 및 실행을 할 수 있는 소프트웨어 모임의 총칭입니다. [1]

Desktop View

위의 그림은 오라클에서 제공하는 자바 플랫폼 구성요소 다이어그램입니다. 너무 복잡하니까 중요한 것만 집고 넘어가겠습니다. 다음의 세가지는 자바 플랫폼의 3대 구성요소입니다.

  • JDK(Java Development Kit - 자바 개발 키트)
  • JVM(Java Virture Machine - 자바 가상머신)
  • JRE(Java Runtime Environment - 자바 런타임 환경)

이 세가지 기술은 서로 연결되어 동작하며 개발자가 작성한 자바 프로그램을 작성할 수 있게 하고, 그것을 실행시킬 수 있게 합니다.

JDK

JDK는 개발자들이 JVM과 JRE에 의해 실행할 수 있는 자바 프로그램을 개발할 수 있게 해줍니다. 자바 애플리케이션 구동에 이용되는 JRE와 자바 컴파일러를 포함하고 있습니다. 컴파일러는 개발자가 프로그래밍 언어로 작성된 프로그램(.java)을 기계어, 즉 컴퓨터가 이해하는 언어로 된 파일(.class)로 바꿔줍니다.

컴파일러가 하는 일이 무엇인지 더 정확히 이해하기 위해 JDK를 설치하여 직접 사용해보는 실습을 해보려고 합니다. 먼저 원하는 버전으로 openjdk를 다운로드합니다.
$ brew install --cask adoptopenjdk8

만약 8 외에 여러버전의 jdk를 설치하셨다면 다음의 명령어를 통해 설치된 jdk의 목록을 확인하실 수 있습니다.
$ /usr/libexec/java_home -V

Desktop View
저는 이렇게 14,11,8 버전의 jdk를 설치해둔 상태입니다. 여기에서 원하는 버전으로 변경하고 싶으시면

$ export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)
다음과 같이 환경변수를 설정하여 변경할 수 있습니다. 설정 후 아래의 명령어로 자바 버전을 확인해보면

$ java -version

Desktop View

1.8로 변경된 것을 보실 수 있습니다. 이제 다운받은 jdk를 사용하여 간단한 Hello, World!를 출력하는 프로그램을 만들어보겠습니다. 터미널에서 vim 편집기로 바로 HelloWorld.java라는 자바 소스코드 파일을 작성했습니다.

$ vim HelloWorld.java
그리고 다음의 코드를 입력하고 저장해주세요. Desktop View

javac 명령어는 jdk를 다운받을때 포함되어있던 자바 컴파일러입니다. 이 컴파일러를 이용해 .java 파일을 .class파일로 컴파일합니다.

$ javac HelloWorld

HelloWorld.class 파일이 생성된 것을 보실 수 있습니다. Desktop View
생성된 .class파일을 vim 편집기로 열어봅시다.
Desktop View
이전에 입력했던 소스코드와는 달리 알아볼 수 없는 기계어로 이루어져있는 것을 확인하실 수 있습니다.

$ java HelloWorld
위의 java 명령어는 생성된 class파일을 실행시키는 역할을 합니다. 위의 명령어를 실행하면 Desktop View
다음과 같이 실행결과로 Hello, world!가 출력되는 것을 확인하실 수 있습니다. 관례상 실행시켜보긴 했지만 여기에서는 컴파일러의 일을 하는 javac 명령어에 대해서 이해하는 것이 중요합니다.

저희가 개발할 때 주로 사용하는 IDE(통합개발환경)에서는 개발자 대신 컴파일 작업을 관리해주고 있습니다. 이클립스의 Preference > Java > Compiler에서 JDK 컴파일러에 대한 옵션을 확인하고 설정할 수 있습니다.

Desktop View JDK 컴파일러 스냅샷

JRE

JRE는 컴퓨터 운영체제 위에서 실행되면서 부가적인 서비스를 제공하는 소프트웨어 계층입니다. 그래서 자바 프로그램을 거의 모든 운영체제에서 수정 없이 실행되도록 합니다. 그래서 자바 프로그램 실행에 필요한 라이브러리와 소프트웨어를 포함하고 있습니다. 또한 운영체제를 기반으로 그 이상의 부가가치 서비스를 제공합니다.
그 중 자동 메모리 관리(Automatic memory management)는 프로그래머가 메모리 할당과 재할당을 수동으로 조작할 필요가 없게 해줍니다. 자바 클래스 로더는 컴파일된 자바 코드를 메모리로 로드하고 적절한 자바 클래스 라이브러리에 연결합니다. 그리고 코드를 실행할 JVM을 시작합니다. JRE는 개발 단계에서는 운영체제 또는 IDE에서 프로그램을 실행할 뿐이므로 개발자가 직접적으로 사용할 일은 드뭅니다. 하지만 저희는 IDE에서 자바 프로그램을 개발할 때 JRE를 종종 발견할 수 있었을 것입니다.

Desktop View

자바 프로젝트를 생성하면 자동으로 생성되는 이 JRE System Library를 펼쳐보면 자바 프로그램 실행에 필요한 라이브러리를 갖추고 있음을 확인할 수 있습니다.

아니면 어떠한 오류를 해결하기 위해 프로젝트의 Java Build Path에 들어가서 JRE System Library의 path를 다시 설정해보신 적이 있을겁니다.

Desktop View

이런 식으로 JRE가 자바 프로그램 실행을 돕고 있다는 것을 유추해볼 수 있습니다.

JVM

JVM은 시스템 메모리를 관리하면서 자바 기반 애플리케이션에 이식 가능한 ‘실행 환경을 제공’합니다. 여기서 이식 가능하다는 것은 사용중인 운영체제 또는 실제로 존재하는 하드웨어에 관계없이 프로그램이 실행가능한 환경을 조성한다는 것을 의미합니다. 쉽게 말해 “한번 작성해, 어디에서나 실행” 가능하다는 것입니다.

Desktop View JVM 구성요소 [3]

JVM의 주요 구성 요소는 위의 그림과 같이 클래스 로더(Class Loader), 실행 엔진(Excution Engine), 런타임 데이터 영역(Runtime Data Area)으로 구성되어 있습니다.

(1) 클래스 로더는 프로그램 실행시 필요한 클래스를 JVM 메모리에 로드합니다.

(2) 자바 실행 엔진은 파일,네트워크 그리고 메모리 리소스를 요구하는 프로그램 실행과 운영체제 가운데 위치해서 이런 리소소들을 공급합니다. 힙 메모리 영역에 생성된 객체들 중에서 참조되지 않는 객체들을 찾아서 제거하는 가비지 컬렉터를 포함하고 있습니다.

(3) 런타임 데이터 영역은 JVM의 메모리 영역으로 자바 애플리케이션을 실행할 때 사용되는 데이터들을 적제합니다. 이를 용도에 따라 3가지 영역으로 나누면 메소드 영역(Method Area), 스택 영역(Stack Area), 힙 영역(Heap Area)로 나눌 수 있습니다.

메소드 영역은 인터페이스 상수, 멤버변수, 스태틱 변수, 메소드 등 클래스나 인터페이스의 정적인 데이터가 들어가는 부분입니다. 스택 영역은 콜 스텍이라고도 부르며, 메소드를 호출하면 그 메소드가 할당되는 곳입니다. 메소드가 반환되면 메모리도 반환되어 비어집니다. 힙 영역은 참조 타입의 동적 메모리 할당 객체, 즉 인스턴스 객체가 들어가는 곳입니다.




다음과 같이 JAVA 프로그램 개발을 위한 3가지 기술에 대해 알아보았습니다. 게임을 할때 공략해야 할 대상의 정보를 알아두는 것은 필수입니다. 앞으로 함께 속속들이 파해쳐 나가봅시다.



1. 참고 https://ko.wikipedia.org/wiki/%EC%9E%90%EB%B0%94_(%EC%86%8C%ED%94%84%ED%8A%B8%EC%9B%A8%EC%96%B4_%ED%94%8C%EB%9E%AB%ED%8F%BC)
2. 참고 https://www.itworld.co.kr/techlibrary/111080
3. 참고 https://www.oracle.com/webfolder/technetwork/tutorials/obe/java/gc01/index.html

CGI 프로그래밍 맛보기

맥북m1 터미널 iterm2로 커스텀하기