자바 기본
자바와 스프링 공부를 함께 하고 있는데 기본 원리를 놓치고 공부하고 있다는 생각을 했다.
그래서 오늘은 기본적인 Java 원리를 정리하고 이해해보자.
1. JAVA 언어를 컴퓨터가 이해하는 과정
1) 코드 작성
.java
public class HelloWorldApp {
public static void main(String[] args) {
System.out.println("Hello World");
}
}
기계는 Java Source code를 이해할 수 없다.
2) 컴파일러(Compiler)가 컴파일(Compile) 함.
- 0과 1의 코드로 바꿔줌.
3) 바이트 코드 (바이너리 코드)
- 컴퓨터가 이해함.
[ 정리 ]
- 컴파일: 인간이 이해하기 쉬운 언어를 기계어로 번역하는 과정
- 컴파일러: 컴파일을 하는 프로그램
- 바이트 코드: 0과 1로 이루어진 코드, 컴퓨터가 이해할 수 있다.
이때 0과 1의 조합은 운영체제마다 다르다.
그래서 C언어는 운영체제마다 컴파일러가 각각 존재한다.
But
JAVA는 다르다!!
JAVA는 자바 컴파일러가 1가지 있다,
그래서 0과 1의 조합도 한가지 존재.
이것이 운영체제로 바로 가는 것이 아니라 JVM으로 간다.
- JVM이 0과 1 그리고 운영체제 사이에서 둘을 호환시켜주는 역할을 한다. (JVM이 운영체제에 맞게 알아서 번역해준다.)
[ 정리 ]
- 원래는, OS 마다 다른 ‘컴파일러’가 필요하지만 JAVA는 JVM이 0과 1(바이트 코드)을 OS에 맞게 번역해 준다.
- 이 JVM은 인기가 상당해서, JAVA 외에 다른 언어에서도 사용하고 있다.
- 그루비, 스칼라, 코틀린
JVM
- 자바의 가상 머신의 약자 (Java Virtual Machine)
- OS 별로 존재한다.
- 바이너리 코드를 읽고 검증하고 실행한다.
JRE
- 자바 실행 환경의 약자 (Java Runtime Environment)
- JRE = JVM + 자바 프로그램 실행에 필요한 라이브러리 파일 등
- JVM의 실행환경을 구현
JDK
- 자바 개발 도구의 약자 (Java Development Kit)
- JDK = JRE + 개발을 위한 도구
- 컴파일러, 디버그 도구 등이 포함
[ 정리 ]
- JVM < JRE < JDK 순서로 포함관계이다.
- JDK를 설치하면 JRE와 JVM도 함께 설치된다.
- 따라서 JAVA의 버전 = JDK의 버전이 된다.
2. 빌드와 실행
✔️ 빌드 (build)
소스 코드 파일을 컴퓨터에서 실행할 수 있는 독립 SW 가공물로 변환시키는 과정
- 독립 SW 가공물 = Artifact
[ 빌드 세분화 ]
- 소스 코드를 컴파일 한다.
- 테스트 코드를 컴파일 한다.
- 테스트 코드를 실행한다.
- 테스트 코드 리포트를 작성한다.
- 기타 추가 설정한 작업들을 진행한다.
- 패키징을 수행한다.
- 최종 SW 결과물 (Artifact)을 만들어 낸다.
[ 빌드 툴 (build tool) ]
- 소스코드의 빌드 과정을 자동으로 처리 해주는 프로그램
- 외부 소스 코드 (외부 라이브러리) 자동 추가, 관리
- 종류: APACHE ANT, Maven, Gradle
ANT
- 설정을 위해 xml을 사용한다.
- 간단하고 사용하기 쉽다.
- 복잡한 처리를 하려 하면 빌드 스크립트가 장황해져 관리가 어렵다.
- 외부 라이브러리를 관리하는 구조가 없다.
→ 2000년대 초반에 사용
Maven
- 설정을 위해 xml을 사용한다.
- 외부 라이브러리를 관리할 수 있다.
- 장황한 빌드 스크립트 문제를 해결했다.
- 특정 경우에 xml이 복잡해진다.
- xml 자체의 한계가 있다.
Gradle
- 설정을 위해 groovy 언어를 사용한다.
- 외부 라이브러리를 관리할 수 있다.
- 유연하게 빌드 스크립트를 작성할 수 있다.
- 성능이 뛰어나다. (캐싱이 잘된다.)
✔️ 실행 (run)
내가 작성한 코드 (혹은 테스트 코드)를 컴파일 거쳐, 작동시켜 보는 것
독립 SW 가공물이 나올 수도 있고, 나오지 않을 수도 있다.
주의: 인터프리터 언어(자바스크립트, 파이썬)는 컴파일이 필요 없다.
[ 결론 ]
- 빌드란 단순히 실행하는 것과 다르다.
- 빌드 과정 자동화와 외부 라이브러리 관리를 위해 빌드 툴이 사용된다.
📌 Reference
반응형
'프로젝트 개발 기록 > [개발] java | spring' 카테고리의 다른 글
[IntelliJ] project마다 JDK 버전 관리하기 (0) | 2022.10.25 |
---|---|
[Java] 예외처리 (1) | 2022.10.23 |
[Java] 다형성(polymorphism), 추상 클래스, 인터페이스, 내부 클래스 (0) | 2022.10.12 |
[Java] package와 import, 제어자 (1) | 2022.10.11 |
댓글