자바를 처음 공부할 때 헷갈리는 개념들이 많다. 자바의 컴파일부터 실행과정, 개발도구까지 확실하게 개념을 알아보자.
0. 자바를 이해하기 전 용어 정리
자바 코드의 컴파일과 실행 과정을 살펴보면 여러 헷갈리는 용어들이 등장한다. 먼저 정리해 보자.
1. 바이너리 데이터(binary data) : 0과 1로 구성된 데이터. 다양한 형식의 데이터를 나타낼 수 있지만 이진 데이터라고 다 코드인 것은 아니다. 이미지 파일, 텍스트 파일, 음악 파일 등 이진 형식의 모든 것을 포함하는 개념이다.
2. 코드: 정보를 나타내는 기호의 체계. 이진수로 구성되지 않을 수도 있다. 일반적으로는 소스 코드를 줄여서 코드라고 부른다.
3. 바이너리 코드 : 이진수로 이루어진 코드 중 컴퓨터가 이해할 수 있는 코드를 바이너리 코드라고 한다. 기계어와 동일한 개념으로 사용하는 경우도 있다.
4. 기계어 : 특정 컴퓨터 아키텍처에 맞춰 해당 아키텍처에서 지원하는 기능을 수행하도록 작성된 명령어 집합이다. 기계어는 컴퓨터 아키텍처에 따라 다양한 형식으로 존재한다. (예시 : 인텔의 x86과 ARM의 기계어는 서로 다른 형태이다)
5. 바이트 코드 : 특정 하드웨어가 아닌 가상 컴퓨터에서 돌아가는 실행 프로그램을 위한 이진 표현법이다. 하드웨어 컴퓨터가 직접 이해할 수 없으므로 바이너리 코드와는 다른 개념으로 가상머신을 통해 컴퓨터에서 실행된다.
다른 프로그래밍 언어와 플랫폼에도 바이트 코드와 유사한 중간 언어가 사용될 수 있다. (예를 들어, C# 언어는 .NET 플랫폼에서 실행되는데, C# 소스 코드는 CIL(Common Intermediate Language)이라는 바이트 코드로 컴파일된다. CIL은 .NET 플랫폼에서 실행되기 전에 Just-In-Time 컴파일러(JIT Compiler)에 의해 기계어로 변환된다. 또, 안드로이드 플랫폼에서 안드로이드 앱을 위한 바이트 코드 형식인 DEX(Dalvik Executable)파일도 Dalvik Virtual Machine 또는 ART(Android Runtime)에서 해석되고 실행된다)
1. 자바의 컴파일
자바의 컴파일은 자바 소스 코드인 .java파일을 자바 컴파일러(대표적으로 오라클의 javac)가 바이트 코드로 변환하는 것이다. 바이트 코드를 자바 가상 머신JVM이 실행하게 된다.
2. 자바의 실행
기본적인 개념으로는 자바 바이트 코드를 자바 가상 머신이 실행한다.
2.1 JVM(Java Virtual Machine) :자바 가상 머신
원래는 바이트 코드를 한줄씩 Interpreter가 실행하였으나, 코드가 반복되어 일정 기준이 넘어가면 그때마다 Interpreter를 안 거치게 JIT compiler가 기계어(네이티브 코드)로 컴파일해 캐싱해놓는다.
자바는 인터프리터도 컴파일러도 같이 사용하는 언어인 것이다.
2.2 JRE(Java Runtime Environment) : 자바 실행 환경
자바 프로그램의 실행을 위해서는 .java파일 하나를 해석하는 것만이 아니다. 자바의 실행을 위해서는 JRE(Java Runtime Environment)자바 실행환경이 필요하다.JRE는 JVM을 포함하며 또한 Java binaries, Java 클래스 라이브러리 등을 포함하고 있어 자바 프로그램의 실행을 지원한다.
3. 자바의 개발환경
3.1 JDK(Java Development Kit) : 자바 개발 키트
자바의 실행만이 아닌 개발을 위해서는 컴파일러, javadoc 등이 있는 JDK가 필요하다. JDK안에 JRE도 있다.
오라클의 JDK의 라이센스 문제에서 자유롭기 위해 OpenJDK, 이클립스 등 여러 버전이 생겨났다. 이들은 javac대신 자체적인 자바 컴파일러를 쓴다.
3.2 자바 통합 개발환경(IDE)
JDK가 통합개발환경을 지원해주지 않기 때문에 별도의 IDE 설치가 필요하다. 대표적으로 이클립스, IntelliJ IDEA등이 있다. IDE는 소스 코드 편집기, 디버깅 도구, 빌드 시스템, 프로젝트 관리 등 다양한 개발 도구를 제공하여 개발자가 편리하게 개발할 수 있도록 지원한다. 안드로이드 개발환경은 안드로이드 스튜디오이다.
3.3 프로젝트 관리 도구
프로젝트 관리 도구로는 아파치 재단에서 만든 Ant와 Maven이 있고 maven이 많이 사용됐었다.
최근에는 이 두가지의 단점을 보완한 Gradle이 주목받아 주류가 되었다. 안드로이드 프로젝트에서도 기본으로 쓰인다.
'개발 > Java' 카테고리의 다른 글
[Java]자바의 반복문 (0) | 2023.07.21 |
---|---|
[Java] 자바 조건문: If-else, Switch-case, Switch Expression (0) | 2023.07.21 |
[Java]자바의 연산자 (0) | 2023.07.19 |
[Java] 자바의 기본 자료형(primitive types 원시 자료형) (0) | 2023.07.18 |
[안드로이드 스튜디오] View뷰가 뭐야? 레이아웃은 뭐야? 빠르게 보자 (1) | 2023.06.09 |