자바 컴파일러와 인터프리터의 동작 방식¶
JIT & AOT¶
- 바이트코드의 실행속도를 높이기 위해 등장
- JIT은 실행 중 부분부분 기계어로 컴파일(실행 중 속도가 빨라졌다 느려짐)
- AOT는 설치 중 전부 기계어로 컴파일(설치 시 속도가 느림. 설치하는데 오래 걸림)
- JIT + AOT 일단 설치 완료 후 실행 전 빈 시간에 컴파일
Compiler vs Interpreter¶
| Compiler | Interpreter |
|---|---|
| 컴파일러는 컴파일 중 문법오류 검사 | 인터프리터는 실행할 때마다 문법 검사 |
| 컴파일된 기계어의 실행속도가 더 빠름 | 인터프리터는 기계어와 거리가 멀어 해석하는데 시간이 걸린다. 엔진에 따라 JIT컴파일 방식을 지원하기도 함 |
Intermediate Representation & Virtual Machine¶
| 실행 과정 |
|---|
| 소스코드 -> 중간 언어(IR, p-code, bytecode) -> 기계어 |
| ex) .java -javac.exe-> .class -JVM-> 기계어 |
C언어 컴파일 과정¶
.c(소스파일) -컴파일러-> .obj(목적파일) -링커-> .exe(실행파일)
링커가 목적파일들 + library파일을 묶어 실행파일을 만듬.
Unit test¶
방대한 크기의 프로그램을 구성하는 부품들이 잘 동작하는지 테스트해야 한다.
테스트만을 위한 도구들
: Java의 경우 JUnit, TestNG
소스 파일 관리¶
Maven 표준 디렉토리 구조
src/main/
src/main/java/
(자바 소스파일 .java)src/main/resources/
(실행 중 사용할 기타 파일 .properties .xml .txt ...)src/main/webapp/
(html, css, javascript)src/test/
src/test/test/
(단위 테스트를 실행하는 자바 소스파일)
src/test/resources/
(단위 테스트 중 사용할 기타 파일)
1 repo = 1 project
repository/
src/
bin/
1 repo = multi project
repository/
docs/
project1/project1/src/
project1/bin/project2/
project2/src/
project2/bin/
자바 폴더가 중복될 수 있어 이를 방지하기 위해 도메인명으로 이름을 짓는다.
기억보다 기록
Java coding style https://www.oracle.com/technetwork/java/javase/documentation/codeconventions-139411.html https://google.github.io/styleguide/javaguide.html https://github.com/twitter/commons/blob/master/src/java/com/twitter/common/styleguide.md