밑바닥부터 다시 차근차근 밟아올라가기 위하여
기초부터 다시! 시작해보겠습니다.
오늘의 포스팅은 다음과 같이 크게 3가지의 토픽으로 이루어집니다.
1. 자바 파일(.java)과 .class 파일과의 관계 2. 메인 메소드란 무엇인가? 3. 클래스와 오브젝트, 인스턴스의 관계 |
자바 프로그래밍을 하면서 정말 기본적인 것인데
여태까지 별 무리없이 프로그래밍 작업을 하였는데
막상 저 3가지에 대해 설명을 하라고 했을 때, 제 말문은 막혀버렸습니다.
그리하여 하나씩 차근차근 알아보도록 하겠습니다.
1. 자바 파일(.java)과 .class 파일과의 관계
.java 파일과 .class 파일 사이에는 어떤 관계가 있을까요?
두 파일간의 관계를 규명짓자면, 다음과 같은 관계도를 그릴 수 있습니다.
.java 파일 --- 컴파일러 --- .class 파일 |
<관계도>
즉, .class파일은 .java파일을 compile하여 생성됩니다.
그럼, .java파일과 .class파일이 각각 무엇인지에 대해 알아볼까요?
.java 파일이란? java 규칙에 맞게 작성한 모든 소스코드 파일을 말합니다.
특징은 for human입니다. 그리하여 사람이 읽을 수 있는 text로 구성되어 있습니다.
.class 파일이란? 컴파일러에 의해 생성된 java bytecode로 구성된 파일입니다.
특징은 for JVM (Java Virtual Machine 자바 가상 머신)입니다. (jvm을 위한 코드)
그리하여 자바를 실행할 수 있는 모든 장치에서 실행이 가능합니다.
자, 그럼 위에서 언급된 컴파일러와 bytecode는 무엇일까요?
컴파일러(compiler)란?
일반적으로, high level language → low level language로 변환해주는 소프트웨어로
프로그래밍 언어로 작성된 프로그램을 기계어로 변환하는 소프트웨어를 말합니다.
자바 컴파일러의 특징은 첫 번째, .java파일에 오류가 있는지 검사합니다.
두 번째, 특정 컴퓨터를 위한 코드를 바로 생성하지 않고
JVM (Java Virtual Machine 자바 가상 머신)을 위한 코드(bytecode)를 생성합니다.
왜 이런 특징을 지닐까?
Java의 최대 장점은 JVM (Java Virtual Machine 자바 가상 머신)을 통해
플랫폼 독립적으로 실행 가능한 환경을 제공하는 것입니다.
그리하여 한 번 작성된 코드로 다양한 환경의 하드웨어 및 OS 어디서든 실행하기 위해 이러한 특징을 지닌 것입니다.
JVM (자바 가상 머신)는 많은 운영체제에서 지원되기 때문에 동일한 바이트 코드 파일로 변경없이 실행될 수 있습니다.
bytecode를 설명하기 앞서, 자주 언급되는 JVM에 대해 알아보겠습니다.
JVM이란? Java Virtual Machine의 약어로
자바의 바이트코드를 해당 컴퓨터의 명령어로 해석해주는 프로그램을 말합니다.
JVM은 바이트코드와 컴퓨터의 운영 시스템간의 번역기 역할을 합니다.
※ JVM은 Main method가 없을 경우, 실행되지 않습니다.
그럼 이제, bytecode란?
자바의 실행 환경에서 실행되기 위해 최적화된 코드의 집합을 말합니다.
결론적으로, Java의 실행과정을 정래해보면 다음과 같습니다.
Hello.java ----- Compiler ----- Hello.class ----- JVM ----- Hello (자바 프로그램을 가상기계의 (가상 기계의 명령어 =bytecode를 명령어로 변환) 실제 기계의 명령어로 변환) |