Java - Write Once, Run Anywhere!
Java 언어는 플랫폼 독립성을 가진다.
자바 프로그램은 Javac(Java Compiler, 컴파일러)를 통해 작성된 내용이 바이트코드로 변환되고
이 바이트코드가 각종 OS 환경의 JVM(Java Virtual Machine, 가상환경)으로 얹어진다(=전달)
그럼 JVM이 받은 바이트코드를 해석하고 내용물을 실행시키게 되고, OS 종류에 상관없이 프로그램이 실행되게 된다.
이 Javac와 JVM 같은 도구를 모아둔게 JDK다.
JDK (Java Development Kit) ← Java 개발에 필요한 모든 것 포함
├── JRE (Java Runtime Environment) ← Java 실행 환경
│ ├── JVM (Java Virtual Machine) ← 바이트코드 실행
│ ├── Java 라이브러리 (rt.jar 등) ← 필수 API 제공 (java.lang, java.util 등)
│ ├── 클래스 로더 (Class Loader) ← .class 파일 로드
│
├── Javac (Java Compiler) ← .java → .class 변환
├── 기타 개발 도구 (디버거, Javadoc 생성기, JAR 도구 등)
//arr 배열에서 0번째 값부터 하나씩 꺼내 for문을 수행함
for (int a : arr) {
System.out.println("값 : " + a)
}
Getter - 속성을 가져오는 기능
Setter - 속성을 설정하는 기능
(이전 메서드를 구성할 때 사용했었던 getName()/setName()이 예시 중 하나이다.)

객체는 Heap 영역에 실질적으로 저장된다.
main Stack 영역에서 변수를 호출하면 Heap 영역에 저장되어 있는 변수의 주소를 참조한다.(직접 가져오는 거 아님!!)