Java
Java 언어
- 핵심 기능 : C언어 기능 + 공통 실행환경, 클래스, 객체

- 자바는 공통 실행환경이 있어 여러 기기에서 실행 가능
- 코드를 이해하기 쉽고 유지 보수가 쉬움
- 안정성이 높아 프로그램이 오류를 방지하고 보안상 안전
- 대규모 앱 개발 가능
- 다양한 개발 도구와 라이브러리 사용 가능
JVM
- Java Virtual Machine (자바 가상 머신)
- 여러 기기위에 자바 프로그램을 실행시킬 수 있는 가상의 기기를 만들어줌
JVM 구성
- 바이트 코드 : 운영체제가 읽을 수 있는 코드로 컴파일러가 변환한 코드
- 인터프리터 : Java.class 코드 해석기, 바이트 코드를 기계어로 번역
- JIT 컴파일러 : 인터프리터의 효율을 높여주는 서포터 해석기
- 메모리 영역 : 데이터를 저장하는 영역, 운영체제로부터 JVM이 할당받은 영역
- 클래스 로더 : Java.class 바이트코드를 메모리 영역에 담는 운반기, JVM으로 class를 불러와서 메모리에 저장
- 가비지 컬렉터 : 쓰레기 청소기, 메모리 영역에서 안쓰는 데이터를 주기적으로 청소

개발환경 구성
JRE
- Java Runtime Environment (자바 실행 환경)
- JVM 설치 방법 : JRE 설치
- .class 파일만 실행 가능 → JDK가 변환
JDK
- Java Development Kit (자바 개발 키드)
- JRE(JVM)의 기능 포함
- .java 파일들을 .class 파일들로 변환해주는 Java Compiler(javac) 기능이 있음
- Jdb 기능을 통해 디버깅 가능

변수
변수와 상수
저장공간의 선언
- 값의 타입 : 저장공간의 종류
- 값의 이름 : 저장공간의 이름
값의 저장
- 초기화 : 선언과 동시에 저장
- 덮어쓰기 : 선언 이후 값 저장
int number = 10;
String name;
name = "zo_meong:;
변수 : 변하는 저장공간
상수 : 변하지 않는 저장공간, final로 선언
변수 타입
기본형 변수
-
논리형 : boolean
-
문자형 : char
-
정수형
- byte : -128 ~ 127
- short(2byte) : -32,768 ~ 32,767
- int(4byte) : -21억 ~ 21억
- long(8byte) : 약 9백경, 접미사 L
- 실수형
- float(4byte) : 3.4 -10^38 ~ 3.4 10^38, 접미사 f, 부동 소수점 방식(기수와 지수를 구분해서 저장하고 이값들을 곱한 값을 저장 → long보다 넓은 범위 표현)
- double(8byte) : 1.7 -10^308 ~ 1.7 10^308
참조형 변수
- 문자열 : String ← 문장의 끝에 널문자(\0)가 함께 저장됨 (길이가 가변적이기 때문)
- 자료구조 : Object, Array, List 등
기본형과 참조형
기본형 변수 : 원본값이 Stack 영역에 있음
참조형 변수 : 주소값을 저장하는 주소형 변수, 원본값은 Heap 영역에 있고 Stack 영역에는 주소값이 있음
Stack 영역 : 정적으로 할당된 메모리 영역, 크기가 정해진 변수와 주소 값
Heap 영역 : 동적으로 할당된 메모리 영역, 크기가 가변적인 참조형 변수의 원본 저장

래퍼 클래스 변수
- Wrapper Class : 기본형 변수를 클래스로 한 번 감싸는 변수
- Boxing : 기본 타입에서 래퍼 클래스 변수로 감싸는 것
- Unboxing : 래퍼 클래스 변수를 기본 타입 변수로 가져오는 것
- 기본형 변수 타입명에서 첫글자를 대문자로 변경
- 클래스로 변수 관리시 객체 지향의 많은 기능 활용 가능
- EX) int(기본 타입) ↔ Integer(래퍼 클래스)
int number = 21;
Integer num = new Integet(number);
int n = num.intValue();
Bit와 Byte
Bit(비트) : 0,1 형태의 2진수 데이터, 컴퓨터가 저장할 수 있는 최소 단위
Byte(바이트) : 8개의 bit로 구성 / 숫자는 10진수, 문자는 16진수로 저장
형변환
변수 타입 변경
주로 기본형 변수인 정수 ↔ 실수 ↔ 문자 사이에서 일어남
크기 순서 : byte(1) → short(2) → int(4) → long(8) → float(4) → double(8)
- 자동 형변환 : 작은 타입 > 큰 타입 변환시 값의 손실 없이 자동 변환
- 강제 형변환(캐스팅) : 큰 타입 > 작은 타입 변환시 값의 손실이 생김