Java란 무엇인가?
개발언어의 역사

- A언어(A Programming Language)
- B언어(Bell사에서 개발)
- A언어 기능 + 데이터타입, 연산기능, 메서드
여기서 잠깐 메서드란?
클래스(Class)의 내부에 존재하는 영역으로, 특정 기능을 하는 코드를 묶어서 나타내는 것이다. 즉, 특정 기능을 수행하기 위한 코드들의 집합체
쉽게 말해, 어떤 행동을 하는지 정의한 것
- C언어(알파벳 B 다음인 알파벳 C를 땀)
- Java(커피처럼 어디서나 동작가능한, 자바커피에서 이름을 땀)
- C언어 기능 + 공통실행환경(JVM), 클래스, 객체
- 객체지향언어
Java를 왜 사용하는가?
가장 많이 쓰이는 개발 언어 중 하나이기 때문!
많이 쓰는 이유
- 공통실행환경이 있어 어느 기기에서나 사용 가능
- 코드이해가 쉽고, 유지 보수도 쉽다.
- 안정성이 높아 보안상 안전하다.
-> 그렇기에 대규모 앱 개발이 가능하다.
- 다양한 개발도구, 라이브러리 사용이 가능
JVM, JRE, JDK?

1. JVM
- Java Virtual Machine(자바가상머신)
- 여러가지 기기위에 Java 프로그램을 실행시킬 수 잇는 가상의 기기를 만들어주는 것
2. JRE
- Java Runtime Environment(자바실행환경)
- class를 실행시킬 수 있다.
3. JDK
- Java Development Kit (자바개발키트)
- 컴파일러 역할
- JRE 기능 포함
- 디버깅이 가능하다.(JDB - Java Debugger)
-> 이렇게 해서 프로그램이 동작하는 흐름은 다음과 같다.

인터프리터와 컴파일러를 통해 기계어로 변환하고 runtime 시스템은 구동이 되는 시스템이라고 보면 될 것 같다.
용어 정리
1. 인터프리터
Java .class 코드 해석기
바이트코드를 기기가 실행할 수 있도록 기계어로 번역
2. JIT 컴파일러
빠른 Java .class 코드 해석기
인터프리터의 효율을 높여주는 서포터 해석기
-> 인터프리터와 컴파일러는 세트!
3. 클래스 로더(load +er🛻)
Java .class 바이트 코드를 메모리 영역에 담는 운반기
JVM으로 바이트 코드를 불러와 메모리에 저장
4. 바이트 코드
내가 작성한 코드가 운영체제가 읽을 수 있는 코드로 Java 컴파일러가 변환한 코드!
5. 메모리 영역(memo📝 + ry)
Java 데이터를 저장하는 영역
JVM으로 바이트 코드를 불러와 메모리에 저장
6. 가비지 컬렉터(쓰레기 모이는🧹)
메모리 영역에서 안쓰는 데이터를 주기적으로 청소