자바 기본 1주차
1. Java의 특징
- 객체지향 원칙(OOP)을 기반으로 설계되어 캡슐화, 상속, 다형성 등의 개념으로 재사용성과 유지보수가 용이합니다.
- Java는 바이트코드로 컴파일되어 JVM에서 실행되므로 OS에 구애받지 않습니다.
- 메모리 관리를 자동화해주는 가비지 컬렉터가있어 불필요한 메모리 사용을 줄여줍니다.
- 이외에도 다중스레드, 다양한 예외처리 기능이 있습니다.
2. Java의 단점
- 가상 머신(JVM) 기반으로 동작하기 때문에 컴파일 언어보다 성능이 느립니다.
- 메모리를 관리 : full gc로 인해한 stop-the-world 성능저하, 장애가 발생 할 수 있습니다.
- JVM이란 ?
Java Virtual Machine의 줄임말
JVM은 OS에 종속받지 않고 CPU가 Java를 인식, 실행할 수 있게 하는 가상 컴퓨터이다.
3. 자바 프로그램의 실행과정
자바의 바이트코드는 기계어가 아니기 때문에 OS에서 바로 실행되지 않는다.
이때 JVM이 OS가 바이트코드를 이해할 수 있도록 해석해준다.
따라서 Byte Code는 JVM위에서 OS 상관없이 실행될 수 있는 것이다.
- 실행 순서

- 자바 소스코드를 작성하고 .java로 저장합니다.
- 소스파일을 자바 컴파일러(javac)을 사용하여 바이트코드(.class) 파일로 변환합니다.
- 프로그램을 실행하면 JVM이 ClassLoader를 통해 .class파일을 메모리에 로딩 합니다.
- 로드된 바이트코드는 바이트코드 검증기에 의해 검증됩니다. (무결성 확인)
- JVM이 main메서드를 시작으로 프로그램을 시작합니다.
- 인터프리터와 JIT 컴파일러(Just-In-Time Compiler)에 의해 이루어집니다.
- 메모리 관리
가비지 콜렉터 (Garbage Collector)을 사용하여 더 이상 사용되지 않는 인스턴스를 찾아 메모리에서 삭제합니다.
마크앤 스윕 방식으로 사용하지 않은 변수들에 마크를 하여 가비지컬렉터가 삭제합니다.
4. JAVA Bytecode ?
자바의 바이트코드는 JVM이 이해할 수 있는 중간 코드입니다. 이를 통해 플랫폼 독립적으로 동작할 수 있으며, JVM이 실행 중에 바이트코드를 각 OS에 맞게 번역해줍니다.
5. 인터프리터와 JIT 컴파일러(Just-In-Time Compiler)
- 인터프리터는 바이트코드를 한 줄씩 실행하여 빠른 시작을 가능하게 합니다.
- JIT 컴파일러는 반복적으로 실행되는 코드를 기계어로 변환합니다.
JAVA의 활용 : 인터프리터 방식으로 실행하다가 적절한 시점에 바이트 코드 전체를 컴파일하여 기계어로 변경하고 이후에는 더 이상 인터프리팅 하지 않고 기계어로 직접 실행하는 방식.
6. 사용해본 Java 버전과 이유
프로젝트 요구사항과 환경에 맞춰 선택하는데, 최신 spring boot 상위 버전과 호환이 되는 17 이상의 버전 중 현재 LTS버전인 21을 선택하였습니다.
7. Java 8, 11, 17 버전 특징
- Java 8: 모던자바 Lambda, Stream API, 새로운 Date/Time API 등의 기능이 추가되었습니다.
- Java 11: HTTP Client API 정식 출시, 지역 변수 타입 추론(var), 새로운 String 메서드 등이 추가되었습니다.
- Java 17: 패턴 매칭, 새로운 Switch 표현식, 외부 API 향상 등이 추가되었습니다.
- Java 21: 현재 LTS 버전, 가상 스레드 도입으로 운영 체제 스레드만으로 수백만개의 스레드 실행 가능, UTF-8이 기본값입니다.
만약 spring boot 상위 버전과 호환이 되어야 한다면 17 이상의 버전을 선택
8. JDK와 JRE
- JDK (Java Development Kit): Java 애플리케이션 개발을 위한 툴과 라이브러리 모음으로, JRE와 컴파일러, 디버거 등이 포함됩니다. (개발도구)
- JRE (Java Runtime Environment): 자바 프로그램을 실행할 수 있는 환경을 제공하며, JVM과 표준 라이브러리가 포함됩니다. (실행도구)
JAVA 프로그램의 소스코드를 만들기위해선 JDK가 필요하고, 컴파일된 JAVA 프로그램을 실행시키기 위해서는 JRE가 필요합니다.