code -> compiler -> class -> JVM
인터프리터 Java.class 코드 해석기
- 운영체제가 읽은 바이트 코드를 기기가 실행할 수 있는 기계어로 번역
JIT 컴파일러
- 인터프리터의 효율을 높여주는 서포트 해석기
메모리 영역
- Java데이터를 저장하는 영역
- 운영체제로 부터 JVM이 할당받은 메모리 영역
클래스 로더
- Java.class 바이트 코드를 메모리 영역에 담는 운반기
- JVM으로 class를 불러와서 메모리에 저장
가비지 컬렉터
- Java 쓰레기 청소기
- 메모리 영역에서 안쓰는 데이터를 주기적으로 흡수해가는 청소기

JDK(Java Development Kit) 자바 개발 키트는 JRE(JVM), Compiler, 디버깅 등 기능이 포함
public static void main(){String[] args)
}
input -> String[] args
out -> void
void -> 메소드의 출력값 데이터 타입
변하는 것 변수, 변하지 않는 것 상수
final int number = 10;
number = 11;
finla로 상수 지정을 했기 때문에 위 코드는 오류
-기본형 변수
논리형 변수
boolean = true, false 참,거짓
문자형 변수
char = 'A','1' 문자열 하나만 저장, 2byte( ascii 포맷의 문자는 1byte이고, 유니코드일 때는 2byte입니다.)
정수형 변수
1byte = 8bit(bit=0,1 표현, 즉 1byte = 2*2*2*2*2*2*2*2(256)을 표현)
byte = -128~127, 1byte
shot = -32768 ~ 32767, 2byte
int = -21억 ~ 21억, 4byte
long = 123L, 매우 큰 수, 8byte
실수형 변수
float = 3.4 * -10^38 ~ 3.4 * 10^38(long보다 큼), 4byte
long longNumber = 3.14f (float자동 형변환 X)
double = 1.7 * 10^308, 8byte
-참조형 변수
문자열 변수
String message = "HI~Message";
그 외
List<int> alphabet = [0,1,2,3];
배열
int[] a = {1,2,3,4,5};
Arrays.toString(a) -> {1,2,3,4,5} 그대로 출력
래퍼 클래스 변수(Wrapper Class)
기본형 변수를 클래스로 한번 감싸는 변수

ex) 박싱
int number = 21;
Integer num = number //new Integer(number);
ex) 언박싱
int n = num.intValue();
문자(char) -> 기본형
문자 뒤에 \0(널문자)가 없음 (2byte만 쓰기 때문에 끝을 알아서 데이터만 저정하면 됌)
ascii 포맷의 문자는 1byte이고, 유니코드일 때는 2byte입니다.
문자열(String) -> 참조형
문자 뒤에 \0(널문자)가 있음 (몇개의 byte를 사용할지 모르기 때문)
메모리 영역
Stack 영역 - 기본형 변수(원본 값), 참조형 변수(주소값), 정적으로 할당된 메모리 영역
Heap 영억 - 참조형 변수(원본 값), 동적으로 할당된 메모리 영역
Bit
0,1 형태의 2진수 데이터로서 컴퓨터가 저장(표현)할 수 있는 최소 단위.
정수형 값은 10진수 숫자(0~10)이며 2진수(0~1)Bit로 저장(표현)함.
4개의 Bit로 16진수(0~F(16))를 2진수(0~1)Bit로 저장(표현)함.
Byte(=8bit)
Byte(바이트)는 8개의 Bit(비트)로 구성
1 Byte 내에서 숫자 변수는 Bit 2진수를 10진수로 저장(표현)
10진수로는 0~255(2의8승)까지 저장(표현)
1 Byte 내에서 문자 변수의 경우만 Bit 2진수를 16진수로 저장(표현)
형변환
(int->char)
int num = sc.nextInt();
char ch = (char)num;
System.out.println(ch);
(char->int)
char chN = sc.nextLine().charAt(0);
int a = (int)chN;
System.out.println(a);
자동형변환
변수 타입별 크기 순서
byte(1) → short(2) → int(4) → long(8) → float(4) → double(8)
float가 4byte이지만 부동소수점을 쓰기 때문에 long보다 표현 수가 많음.
자동 형변환 vs 강제 형변환
- 자동 형변환
- 더 큰 표현범위를 가진 타입으로 변환되는것이라 값의 손실이 없습니다.
- 값의 손실없이 변환이 가능하기 때문에 컴파일러가 자동으로 형변환을 해줍니다.
- 강제 형변환 = 캐스팅
- 더 작은 표현범위를 가진 타입으로 변환된는것이라 값의 손실이 생깁니다.
- 값의 손실이 생기기 때문에 자동으로 형변환을 해주지 않고 개발자가 선택하여 형변환을 합니다.
byte byteNumber = 10;
int intNumber = byteNumber;
System.out.println(intNumber);
char ch = 'A';
intNumber = ch;
System.out.println(intNumber);
intNumber = 100;
long longNumber = intNumber;
System.out.println(longNumber);
intNumber = 200;
double doubleNumber = intNumber;
System.out.println(doubleNumber);
byte < int, char < int, int<long, int<double 작은 타입에서 큰 타입으로 바꿀시 자동형변환
int intNumber = 10;
double doubleNumber = 5.5;
System.out.println(intNumber+doubleNumber);
System.out.println(intNumber/4);
System.out.println((double)intNumber/4);
int/4 = 2
(double)int/4 = 2.5
과제
요리 레시피 작성하기
형변환 아직 어색함
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("요리 제목을 입력하세요.");
String a = sc.next();
System.out.println("["+ a + "]");
System.out.println("별점을 입력하세요.");
float floatNumber = sc.nextFloat();
int intNumber = (int)floatNumber;
double doubleNumber = (double)intNumber;
System.out.println("별점 : " + intNumber + "(" + doubleNumber/5 * 100 + "%)");
int inputNumber = 10;
String[] input = new String[inputNumber];
for (int i = 0; i < inputNumber; i++) {
input[i] = sc.next();
}
for (String output: input) {
System.out.println(output);
}
}
}
'K-Digital Training > 내일배움캠프' 카테고리의 다른 글
자바 5주차 (1) | 2023.11.01 |
---|---|
자바 4주차 (1) | 2023.11.01 |
자바 3주차 (0) | 2023.10.20 |
자바 2주차 (0) | 2023.10.20 |
내일배움캠프 시작 그리고 과제 (0) | 2023.10.05 |