[Java] 자바를 공부하기 전에 알아두면 좋은 것들
Java를 공부하기 전에 알아두면 좋은 것들을 간단히 정리해봤습니다.
🖥️ 컴퓨터가 코드를 이해하는 과정
컴퓨터는 0과 1만 알아듣는다.
따라서 영어로 되어있는 코드를 0과 1로 되어있는 코드로 변환하고 컴퓨터가 알아듣게 만든다.
- 컴파일 : 인간이 이해하기 쉬운 언어를 기계어로 번역하는 과정
- 컴파일러 : 컴파일을 하는 프로그램
- 바이트 코드(바이너리 코드) : 0과 1로 이루어진 코드, 컴퓨터가 이해할 수 있음
그런데 0과 1의 조합은 운영체제마다 다르다. 즉, Windows에서 Hello Word
를 출력하는 바이트 코드를 MacOS나 Linux에 전달한다고 똑같은 결과가 나오는 것이 아니다. 그래서 C언어와 같은 언어들은 각 OS 별로 컴파일러가 따로 존재한다.
하지만 Java는 조금 특별하다.
Java는 OS 별로 JVM
이 존재하고, 이 JVM
이 자바 컴파일러가 변환한 똑같은 바이트 코드를 OS 마다 동일한 결과로 해석해준다.
즉, 원래는 OS 마다 다른 ‘컴파일러’가 필요하지만, Java는 JVM
이 0과 1(바이너리 코드)을 OS에 맞게 번역해준다.
이 JVM
은 인기가 상당해서, Java 외에 다른 언어에서도 사용하고 있다.
❓ JVM, JRE, JDK
JDK > JRE > JVM 으로 포함되어 있는 관계이다.
✅ JVM (Java Virtual Machine)
- 자바 가상 머신의 약자
- OS 별로 존재
- 바이너리 코드를 읽고 검증하고 실행한다.
✅ JRE (Java Runtime Environment)
- 자바 실행 환경의 약자
- JRE = JVM + 자바 프로그램이 실행에 필요한 라이브러리 파일 등
- JVM의 실행 환경을 구현
✅ JDK (Java Development Kit)
- 자바 개발 도구의 약자
- JDK = JRE + 개발을 위한 도구
- 컴파일러, 디버그 도구 등이 포함
JDK에는 버전이 있고, 각 버전 별로 새로운 기능이 추가되거나 기존 기능이 사라진다.
- Java8, Java11 등
JDK에는 종류가 있고, 기능 자체는 동일하나 성능과 비용에 약간의 차이가 있을 수 있다.
- Oracle JDK : 오라클에서 만든 JDK. 개인에게 무료, 기업용은 유료
- Open JDK : Oracle JDK와 비슷한 성능. 언제나 무료
🖥️ 빌드와 실행
- 빌드란 단순히 실행하는 것과 다르다
- ✅ 빌드 (build)
- 소스 코드 파일을 여러 과정을 거쳐 컴퓨터에서 실행할 수 있는 독립 SW 가공물(Artifact)로 변환시키는 과정
- ✅ 실행 (run)
- 내가 작성한 코드(혹은 테스트 코드)를 컴파일을 거쳐, 작동 시켜보는 것
독립 SW 가공물(Artifact)이 나올 수도 있고, 나오지 않을 수도 있다.
🖥️ Java 빌드 툴 (build tool)
빌드 과정 자동화와 외부 라이브러리 관리를 위해 빌드 툴이 사용된다.
- 소스 코드의 빌드 과정을 자동으로 처리 해주는 프로그램
- 외부 소스 코드(외부 라이브러리) 자동 추가, 관리
널리 쓰였던(쓰이는) Java 빌드 툴에는 ant
, maven
, gradle
3가지가 있다.
✅ Ant
- 설정을 위해 xml을 사용한다.
- 간단하고 사용하기 쉽다고 한다.
- 복잡한 처리를 하려 하면 빌드 스크립트가 장황해져 관리가 어렵다.
- 외부 라이브러리를 관리하는 구조가 없다.
⇒ 요즘엔 사용 안 함(사용한 걸 본 적도 거의 없다고 함).
2000년대 초/중반에 많이 사용되었다고 카더라
✅ Maven
- 설정을 위해 xml을 사용한다.
- 외부 라이브러리를 관리할 수 있다.
- 장황한 빌드 스크립트 문제를 해결했다.
- 특정 경우에 xml이 복잡해진다.
- xml 자체의 한계가 있었다.
⇒ Ant가 가지고 있는 단점들을 대부분 극복
사용해 본 적은 없으나, 사용하는 것은 많이 봤다고 함
지금도 쓰는 경우가 있으나 신규 프로젝트에는 지양하는 편
✅ Gradle
- 설정을 위해 groovy 언어(JVM 언어)를 사용한다.
- 외부 라이브러리를 관리할 수 있다.
- 유연하게 빌드 스크립트를 작성할 수 있다.
- 성능이 뛰어나다.
⇒ 가장 최신에 나온 JAVA 빌드 툴이다.
(특히 신규 프로젝트에) 많이 사용되고 있다.