✅ 컴파일러
컴파일러와 인터프리터의 차이
컴파일러의 특징
- 컴파일 과정 필요: 소스 코드를 기계어 또는 중간 코드로 번역하는 컴파일 과정이 필요하다.
- 성능 최적화: 컴파일러는 코드를 최적화하여 실행 성능을 향상시킬 수 있다.
- 강한 타입 검사: 많은 컴파일 언어는 컴파일 시점에 타입 검사를 수행하여 오류를 조기에 발견할 수 있다.
- 인터프리터 언어보다 성능이 좋으며, 배포 용이, 에러 검출, 메모리 관리 가능
- 개발 속도는 느리고, 디버깅이 복잡하며, 이식성에 제한이 있음(단, java는 예외적으로 JVM으로 이식성이 높음)
인터프리터의 특징
- 즉각적인 실행: 인터프리트 언어는 코드를 작성하고 바로 실행할 수 있어 개발과 디버깅이 빠르다.
- 플랫폼 독립성: 코드가 인터프리터를 통해 실행되기 때문에, 동일한 코드를 다양한 플랫폼에서 사용할 수 있다.
- 디버깅 용이: 코드를 한 줄씩 실행하기 때문에 오류 발생 시 디버깅이 비교적 용이하다.
- 개발 속도가 빠르고, 유연성, 이식성이 좋음
- 성능은 컴파일 언어에 비해 실행 속도가 느리며, 배포할 경우 코드 보호가 어려움, 실행환경에 인터프리터가 설치되어야 하므로 의존성이 존재
자바
해리포터 원서책이 한국어로 번역한 책이 나오는것: 컴파일러
영어 잘하는 친구한테 원서책을 읽으면서 번역해달라고 하는 것: 인터프리터
로직과 프로젝트의 구조에 따라 일반적으로 코드가 클때 컴파일이 빠르고 코드가 짧을 때 인터프리터가 빠름
자바는 최적의 속도를 위해 컴파일과 인터프리트 방식을 모두 사용함
JVM
"OS에 독립적이다"

✅ 컴파일과 빌드
컴파일은 빌드에 포함인가요 아닌가요?
hint: 소스코드 / 바이트코드 / 바이너리코드


구조 정리
JVM: 소프트웨어
인터프리터는 한줄을 읽고 해석할때에는 빠르지만, 코드가 길어지면 느려짐
인터프리터의 단점을 보완하기 위해 JIT 컴파일러와 함께 존재
➡️서로의 단점을 보완하기 위해 컴파일러와 인터프리터가 세트로 존재함.
소스와 리소스 파일을 실행할 수 있도록 연결시켜주는 작업을 링킹 작업이라고 함.
그렇다면 링킹은 언제 일어날까? 링킹 후 실행? 실행 후 링킹?
➡️ 클래스 로더가 실행함. 소스들을 묶어서 JVM으로 내보냄.
빌드란?
컴파일은 고급언어를 컴퓨터가 이해할 수 있는 저급언어로 바꿔주는 과정 중 하나일뿐 전체적인 과정을 뜻하는게 아니다.
즉, 빌드라는 변환 과정의 큰 틀안에서 동작하는 하나의 과정을 컴파일이라고 하고, 여러 과정이 합쳐진것이 빌드이다.
프로젝트에서 쓰인 각각의 파일과 각종 Resource(.xml, .properties 등)를 JVM이 인식할 수 있도록 패키징하는 전체 과정
자바 빌드 과정
- 소스 코드 (.java) 구현
- 자바 컴파일러(javac)가 바이트 코드(.class)로 컴파일
- 바이트 코드를 JVM의 클래스로더가 끌고 들어감
- 클래스 로더는 바이트 코드를 "로딩" 그리고 "링킹" 하여 실행 엔진이 실행할 수 있게 준비해줌
- 실행 엔진은 바이트 코드를 두 가지 방식으로 실행함
1) 인터프리터: 한줄 씩 읽어서 해석
2) JIT컴파일러: 인터프리터 속도 보완, 바이트 코드 컴파일
✅ 빌드 도구
빌드를 (개발자 대신) 해주는 도구
Ant > Maven > Gradle
- jar 파일: java archive-자바 프로젝트의 압축 파일
역할: 필요한 라이브러리를 다운받는 역할, 코드 실행
1) 빌드 도구가 라이브러리를 자동으로 받아오는 거 같은데..
2) 호환되는 버전도 신경써줄까?🅾️
Maven의 특징
- 빌드 스크립트: pom.xml (project objcet model)
- 필요한 라이브러리 다운로드 후, 내 컴퓨터 캐시로 저장
- Ant 빌드 스크립트 개선
Q. Maven은 어디서 라이브러리를 다운받아오는 걸까요?
https://mvnrepository.com/search?q=lombok
Gradle의 장점
- Ant + Maven 장점 모음집
- 빌드 스크립트: build.gradle by groovy
- Ant, Maven 빌드 스크립트 개선
- 필요한 라이브러리 다운로드 후, 내 컴퓨터 캐시로 저장
- ✨ 빌드 캐시
- ✨ 점진적 빌드(Incremental Build): 이전에 한 지점부터 빌드를 하는 것->수정한 것만 다시 빌드함.
- ✨ 데몬 프로세스: 백그라운드에 돌아가는 os 단의 서비스, 빌드 결과물을 백그라운드 서비스에 저장하고, 다시 사용함+변경된 것 빌드 초대형 프로젝트 임에도짧은 시간 안에 빌드가 완료됨.
- 초대형 프로젝트 vs 작은 프로젝트
maven과 같은 레파지토리에서 라이브러리를 받아옴
maven을 사용하기 편하도록 한 겹 싸고 부가적인 기능을 더한 것
어머나 되게 빠르시네요 이미지 퍼갈게용 ^^