- JVM
1) JVM은 Java Virtual Machine의 약자로 "자바 가상 머신"이라는 뜻이며 여러 가지의 기기 위에 Java 프로그램을 실행시킬 수 있는 가상의 기기를 만들어주는 것이다. 즉 JVM은 원래 개발된 플랫폼에 상관없이 어떤 플랫폼에서도 Java 클래스 파일이 실행되도록 하고 바이트코드 인터프리터 및 런타임으로 구성됩니다.
2) 개발환경 구성
- JRE(Java Runtime Environment) : 자바 실행 환경이라는 뜻을 가지고 있지만 JRE는 .class 파일만 실행 가능하기 때문에 JDK의 javac 명령을 통해 .java 파일을 실행가능한. class파일로 변환해줘야 한다.
- JDK(Java Development Kit) : 자바 개발 키트라는 뜻을 가지고 있으며 Java Compiler(javac) 뿐만 아니라 JRE 기능도 포함하고 있다. + 디버깅 기능
2. 변수
1) 선언 방법은 C언어와 다를게 없다.
int number = 10; // 1. 변수로 선언 및 초기화
number = 11; // 2. 변수의 값을 바꾼다. (덮어쓰기)
2) 상수 : 변하지 않는 값
final int number = 10; // 1. 상수로 선언 (데이터 타입 앞에 final 을 붙이면 됩니다.)
number = 11; // e2. 변수의 값을 바꾸려고하면 에러가 납니다!
3) 변수 타입 (기본형 변수)
📌 **Stack 영역 vs Heap 영역**
- Stack의 경우에는 정적으로 할당된 메모리 영역
- 그래서, 크기가 몇 byte 인지 정해져 있는 기본형 변수를 저장.
- 추가로, 크기가 정해져 있는 참조형 변수의 주소 값도 저장.
- Heap의 경우에는 동적으로 할당된 메모리 영역
- 그래서, 크기가 계속 늘어날 수 있는 참조형 변수의 원본을 저장.
- 논리형 변수 : boolean(1 bit)
boolean flag = true; // 1. 논리형 변수 boolean 으로 선언 및 True 값으로 초기화
flag = false; // 2. False 값으로도 저장할 수 있습니다.
- 문자형 변수 : char(1 byte)
char alphabet = 'A'; // 문자 하나를 저장합니다.
- 정수형 번수 : byte(1 byte), short(2 byte), int(4 byte), long(8 byte) *long 뒤에는 L
byte byteNumber = 127; // byte 는 -128 ~ 127 범위의 숫자만 저장 가능합니다.
short shortNumber = 32767; // short 는 -32,768~32,767 범위의 숫자만 저장 가능합니다.
int intNumber = 2147483647; // int 는 -21억~21억 범위의 숫자만 저장 가능합니다.
long longNumber = 2147483647L; // long 은 숫자뒤에 알파벳 L 을 붙여서 표기하며 매우 큰수를 저장 가능합니다.
- 실수형 변수 : float(4 byte), double(8 byte) *Float 뒤에는 f
float floatNumber = 0.123f; // float 는 4byte 로 3.4 * 10^38 범위를 표현하는 실수값
double doubleNumber = 0.123123123; // double 은 8byte 로 1.7 * 10^308 범위를 표현하는 실수값
4) 변수 타입 (참조형 변수)
- 문자열 변수 : String
String message = "Hello World"; // 문자열을 저장합니다.
- 그 외 : Object, Array, List
List<int> alphabet = [0,1,2,3]; // 기본형 변수 여러개를 저장합니다.
5) 래퍼 클래스 변수 : 래퍼 클래스(Wrapper Class) 라는 말 그대로 “기본형 변수를 클래스로 한번 랩핑(감싸는) 변수”
클래스로 변수를 관리하면 객체지향의 많은 기능을 사용할 수 있게 된다.
// 박싱 VS 언박싱
// 박싱
// Integer 래퍼 클래스 num 에 21 의 값을 저장
int number = 21;
Integer num = new Integet(number);
// 언박싱
int n = num.intValue(); // 래퍼 클래스들은 inValue() 같은 언박싱 메서드들을 제공해줍니다.
기본 타입 | 래퍼 클래스 |
---|---|
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
char | Character |
boolean | Boolean |
6) 형변환
- 정수 ↔ 실수 간에 변환할때는 ({원하는 타입}) 명령을 통해 변환할 수 있습니다. (캐스팅)
double doubleNumber = 10.101010;
float floatNumber = 10.1010
int intNumber;
intNumber = (int)doubleNumber; // double -> int 형변환
intNumber = (int)floatNumber; // float -> int 형변환
- 자동 형변환 vs 강제 형변환
- `작은 타입` > `큰 타입` 형변환시 (자동 형변환)
- 더 큰 표현범위를 가진 타입으로 변환되는것이라 값의 손실이 없습니다.
- 값의 손실없이 변환이 가능하기 때문에 컴파일러가 자동으로 형변환을 해줍니다.
- `큰 타입` > `작은 타입` 형변환시 (강제 형변환 = 캐스팅)
- 더 작은 표현범위를 가진 타입으로 변환된는것이라 값의 손실이 생깁니다.
- 값의 손실이 생기기 때문에 자동으로 형변환을 해주지 않고 개발자가 선택하여 형변환을 합니다.
'개발 공부 > Java' 카테고리의 다른 글
Java 문법 정리 5. 컬렉션(List, Stack, Queue, Set, Map) (0) | 2023.10.13 |
---|---|
Java 문법 정리 4. 배열 (0) | 2023.10.13 |
Java 문법 정리 3. 연산자, 조건문, 반복문 (0) | 2023.10.12 |
Java 문법 정리 2. 입력, 출력 (0) | 2023.10.12 |
Java 문법 정리 0. 시작 (2) | 2023.10.12 |