변수(Variable)
- 변하는 값, 변수명(명확하고, 정보를 담고 있어야 함) = 메모리상에 올라가 있는 변수의 주소값
- 변수 선언: 메모리에 변수가 쓸 공간을 할당 받는 행위 - 값이 있던 없던 상관 x
- ex) 카카오톡 최근 메세지도 변수에 속함
📌 변수 선언 방법: 자료형 변수이름 값;
- 세미콜론 = 마침표, 없으면 처리 X
- 한 번에 하나의 선언만 가능
📌 자료형: 사용하는 비트에 따라 저장할 수 있는 최소, 최대값이 다름
🐾 원시타입(Primitive Type): JAVA에서 기본적으로 제공 🐾
✅ 정수형
- 다양한 크기의 자료형을 제공하는 이유 = 메모리 공간의 적절한 사용
- 데이터 범위: -2^(n-1) ~ +(2^(n-1)-1)
1. byte: 8비트
- 2^8(256)개의 값을 나타낼 수 있음
- 데이터 범위: -128 ~ +127
- 1바이트 단위의 자료형, 동영상, 음악파일, 실행파일 등의 자료 처리에 사용
2. short: 16비트
- 2^16(65536)개의 값을 나타낼 수 있음
- 데이터 범위: -32768 ~ +32767
- JAVA에서는 자주 안쓰이고 C/C++ 언어와 호환 시 사용
3. int: 32비트
- 기본 데이터 타입
- CPU가 처리하기에 가장 적합한 크기의 정수 자료형 So, int형 연산 속도가 다른 자료형 연산속도에 비해 동일 or 빠름
- 따라서 int보다 작은 크기의 데이터는 int로 바꿔 연산 but, 연산 속도보다 데이터 크기를 줄이는 것이 더 중요한 경우 short형 유용
4. long: 64비트
- 32비트(int)를 초과하는 크기의 자료형을 처리
- int가 기본 데이터 타입이라 정수 데이터 뒤에 'L', 'l'을 붙여줘야 long으로 인식
✅ 실수형
- 정수보다 정밀, 부동 소수점 방식으로 표현
부동 소수점 방식(Fixed-point)
: 모든 실수를 m * 10^n 꼴로 나타내는 방식
ex) 167.8 = 1.678 x 10^2
1.678 = 정수부(Significand)
정규화(Normalize): 소수점을 일의 자리까지 이동한 것
*일의 자리에는 0이 아닌 숫자가 와야함
이진수의 부동 소수점 방식
101.1 = 1.001 x 2^2
이진수 -> 십진수
101.1 = (1 x 2^2) + (0 x 2^1) + (1 x 2^0) + (1 x 2^-1) = 4 + 0 + 1 + 0.5 = 5.5
1. float: 32비트
- 표현 가능 범위: -3.4 x 10^38 ~ +3.4 x 10^38
- 컴퓨터 저장 방식: Single Precision(단정도, 32비트 저장 방식)
- double형이 기본 데이터 타입이라 실수 데이터 뒤에 'F', 'f' 붙여줘야 float으로 인식
float fl = 3.14F;
float fl = 3.14f;
☑️ 32비트의 구성
- Sign: 1비트, 부호(양수 = 0, 음수 = 1)
- Exponent(지수부): 8비트, 2의 지수를 나타내냄, 실제 2 지수에 basis를 더한 값이 저장
+ Basis: 지수를 표현하기 위해 필요한 상수로 single precision에서는 127, double precision에서는 1023
- Fraction(가수부): 23비트, 정수부를 표햔하기 위한 파트, 정수부에서 1을 뺀 값이 저장
ex1) 1101.0101
ⓐ 부동 소수점 방식으로 표현: 1101.0101 = 1.1010101 x 2^3
ⓑ Sign bit 채우기: 양수이므로 Sign bit = 0
ⓒ Exponent 계산
3 + 127(basis) = 130
130 = 1000 0010
Exponent = 10000010
ⓓ Fraction 계산: 정수부의 소수점 이하를 그대로 Fraction에 넣는다
Fraction = 101 0101 0000 0000 0000 0000
ⓔ 결과 : 1101.0101 = 0100 0001 0101 0101 0000 0000 0000 0000
ex2) -130.625
ⓐ 이진수로 변환: -130.625 = -1000 0010.101
ⓑ 부동 소수점 방식으로 표현: -1000 0010.101 = -1.0000010101 x 2^7
ⓒ Sign bit 채우기: 음수이므로 Sign bit = 1
ⓓ Exponent 계산
7 + 127(basis) = 134
134 = 1000 0110
Exponent = 10000110
ⓔ Fraction 계산
Fraction = 000 0010 1010 0000 0000 0000
ⓕ 결과: -130.625 = 1100 0011 0000 0010 1010 0000 0000 0000
ex3) 0011 1101 0110 1000 0000 0000 0000 0000은 이진수 실수로 몇일까?
ⓐ 정수부 계산: 오른쪽 끝에서부터 23비트를 가져옴
110 1000 0000 0000 0000 0000
정수부 = 1 + 0.110 1000 0000 0000 0000 0000 = 1.1101
ⓑ 2의 지수 계산: 다음 8비트를 가져옴
0111 1010 = 122
2의 지수 = 122 -127 = -5
ⓒ 음수 or 양수: 0이므로 양수
ⓓ 결과: 1.1101 x 2^-5 = 0.000011101
2. double: 64비트
- 표현 가능 범위: - 1.79 x 10^308 ~ + 1.79 x 10^308
- 컴퓨터 저장 방식: Double Precision(배정도, 64비트 저장 방식)
- 기본 데이터 타입
☑️ 64비트의 구성
- Sign: 1비트
- Exponent(지수부): 11비트
- Fraction(가수부): 52비트
✅ 문자형
- char: 16비트
- 문자 하나 하나 ex) 'a', 'b', '가'
- JAVA에서 유일하게 제공하는 unsigned 형태
+ unsigned: 음수 없이 0부터 양수값만 가지는 데이터 형태
✅ 논리형
- boolean: 8비트
- True/False
🐾 참조타입(Reference Type): 원시 타입을 제외한 타입(배열, 열거, 클래스, 인터페이스) 🐾
✅ 문자열(string)
- 문자의 조합 ex) 'abc', '가나다'
- stella를 변수에 할당하는데 char을 사용하면
char name1 = '스';
char name2 = '텔';
char name3 = '라';
=> 비효율적이라 나온 것이 string
조건문: if
📌선언 방법
if(조건){
system.out.println(조건을 충족했을 때 실행시킬 코드)’ }
📌 Example1. boolean
boolean button = T ;
if(button==T){
”불이 켜졌습니다”;
}else{”불이 꺼졌습니다";
}
else를 실행하지 않는 경우 중괄호 없이 실행코드를 작성할 수 있음
if(button==T)”불이 켜졌습니다";
📌 Example2. int
int select = 1 ;
if(select==1){
(“1번 입니다”);
} else if(select==2){
“2번 입니다”;
}else if(select==3){
“3번 입니다”;
}else{
“1, 2, 3 어느 것도 아닙니다”;
}
* 원시 타입과 참조 타입의 차이 *
1. Null 포함 가능 여부: 원시 타입은 null 담을 수 X 참조 타입은 가능
2. 제너릭 타입에서의 사용 가능 여부: 원시 타입은 제너릭 타입에서 사용 X, 참조 타입은 가능
* 원시 타입의 장점 *
1. 접근 속도
- 원시 타입은 스택 메모리에 값이 존재
- 참조 타입은 하나의 인스턴스(실행 중인 임의의 프로세스)로 스택 메모리에는 참조값만 있고 실제 값은 힙 메모리에 존재, 값이 필요할 때마다 언박싱 과정(힙에 저장된 참조형식을 다시 원래의 값 형식으로 변환)을 거쳐야해 원시 타입과 비교해 접근 속도가 느려짐
2. 메모리 양
- 참조 타입이 사용하는 메모리양이 압도적으로 높기 때문에 메모리 사용적으로 원시 타입이 참조 타입보다 효율적으로 사용 가능
'프로그래밍 > Java' 카테고리의 다른 글
[Java] 날짜 관련 LocalDate 클래스 (Feat. Month, DayOfWeek) (0) | 2024.05.18 |
---|---|
[Java] 비트 연산자(bitwise operation) (0) | 2024.04.16 |
가비지 콜렉터(Garbage Collector)가 무엇인가? (0) | 2023.01.26 |
클래스의 기본, 변수와 메소드 (2) | 2022.06.04 |
반복문 for와 배열 (1) | 2022.05.30 |