✨ 바야흐로 4년전 배운 자바 수업 내용 복습하기
Java
✅ key: 플랫폼 독립성, WORA
- 플랫폼 독립성: OS, HW에 상관없이 코드가 돌아감 (!= C++)
- WORA (Write Once Run Anywhere)
👉 바이트 코드 + JVM 덕분
- 바이트 코드는 JVM에서 실행가능한 바이너리 코드
- JVM(Java Virtual Machine)은 OS 위에서 돌아가는 소프트웨어
C++의 프로그램 실행

Java의 프로그램 실행

🤚 잠깐! 여기서 정적로딩, 동적로딩이란?
✅ 정적로딩 (-> C++)
실행 시 모든 실행 파일을 메모리에 load
➕ 빠르다
➖ 용량을 많이 차지함
✅ 동적로딩 (-> Java)
필요할 때마다 동적으로 메모리 생성, 필요 없는 메모리는 자동으로 소멸
➕ 큰 프로그램도 작은 메모리에서 실행 가능
➖ 비교적 느리다
그 외 자바의 특성
- 객체지향적 -> 상속성, 다형성, 캡슐화 ⭐️⭐️⭐️
- 소스(.java)와 클래스(.class) 👉 한 클래스 당 한 바이트코드 파일 생성!

- multithread: OS의 도움없이 자체적으로 multithread 지원
- 가비지 컬렉션
- 가비지: 할당 후 사용되지 않는 메모리
- C/C++은 free/delete로 개발자가 메모리 반환을 해줘야하지만, Java는 JVM이 알아서 가비지를 회수해준다!
- 실시간 응용 시스템에 부적합! 느리기 때문.. (기계랑 가까운 C/C++, Rust가 더 적합하지 않을까 싶다)
JDK? JRE?
- JDK (Java Development Kit) - 컴파일러, JRE, 클래스 라이브러리 등 포함
- JRE (Java Runtime Environment) - JVM 포함
- 쉽게 말해서 개발자를 위한 개발 도구 및 환경까지 다 제공해주는 게 JDK, JRE는 일반 사용자들도 자바 프로그램을 실행시키기 위한 환경 제공