[ch 01. 06 변수와 메모리]
변수와 메모리
변수를 선언하면 해당되는 자료형의 크기 만큼 메모리가 할당
변수는 할당된 메모리를 가리키는 이름
int level = 10; // 4바이트 정수형 메모리가 level 이라는 이름으로 할당 됨
변수선언을 타입에 국한하는 것이 아니라 메모리 할당도 고민해보기
<변수의 종류>
<정수자료형>
byte는 8비트이지만 MSB를 제외하고 7제곱
.....int 는 제외 31 ..... long 64
byte와 short
- byte : 1바이트 단위의 자료형 동영상, 음악 파일, 실행 파일의 자료를 처리할 때 사용
- short: 2바이트 단위의 자료형 C/C++ 언어와 호환 시 사용
byte와 short 중 주로 byte를 이용 많이함
int
- 자바에서 사용하는 정수에 대한 기본 자료 형
- 4바이트 단위의 자료형
- 프로그램에서 사용하는 모든 숫자(리터럴)은 int 로 저장됨
- 32 비트를 초과하는 숫자는 long 자료형으로 처리
여기서 리터럴이란 할당된 메모리의 이름 외 해당 메모리에 복사?를 하는 숫자에 대한 원상태 기존? 상태로 이해를 하였다.
그리고 이경우 이러한 복사이전 기존의 상태는 int로 저장된다
long
- 8바이트 자료형
- 숫자의 뒤에 알파벳 L 또는 l 을 써서 long 형임을 표시 함
- 예) int num = 12345678900; // 오류
long lnum = 12345678900; //오류
long lnumber = 12345678900L; // ok
예중에서 첫번째가 오류인 이유는 4byte의 범위를 넘어서 오류이다
그래서 할당된 메모리 lnum에 넣어도 다시 오류가 발생한다. 그 이유는 앞서 말했듯이 정수 리터럴은 int (4byte)이기 때문에 오류가 발생한다
이 경우 별도로 정수 리터럴을 L(l 도 가능)로 선언해서 8byte로 하게끔 하면 가능하다
마찬가지로 실수 리터럴은 8dobule (8byte)인데 이 경우 할당된 메모리를 long으로 사용하면 오류가 발생한다
이 경우 실수리터럴을 F(f도 가능)로 선언해서 4byte로 하게끔 하면 된다.
<실습>
package ch06;
public class VariableTest {
public static void main(String[] args) {
byte bnum = +127;
// byte bnum2 = +128; 오류 2^7 -1 넘
byte bnum3 = -127 ;
System.out.println(bnum);
//int num = 12345678900;
long lnum = 12345678900L;
long lnum1 = 123456789; //작은 경우에는 문제가 안됨
System.out.println(lnum);
}
}
[ch 01. 06 실수자료형]
<실수자료형>
- 부동 소수점 방식
- 실수는 정수 보다 정밀하기 때문에 정수와는 다른 방식으로 표현해야 함
- 부동 소수점 방식으로 실수 값 0.1 표현
한정된 비트안에서 무수히 많은 소수를 표현하기 어려움 -> 그래서 부동소수점으로 표현함
- 지수부와 가수부로 표현 함
- 컴퓨터에서는 밑수를 2로 사용
- 정규화 : 가수가 밑수보다 작은 한 자리까지 가수로 표현 되는 것
- 컴퓨터에서는 밑수가 2 이므로 정규화를 하게 되면 가수부분의 첫 번째 자리 숫자는 항상 1임
예) 0.2 표현 0.4 X 2-1 정규화 하면 1.6 X 2-3
밑수보다 작게 만들어버리기를 의미함
그래서 밑수 2보다 작게 만들면 가수는 무조건 2보다 아래인 1로 시작하게 됨
실수 표현법
컴퓨터 부동소수점 표현 방법
1.m X 2^-n
- float형과 double형
자바에서는 실수의 기본 타입은 dobule을 사용 함
package ch07;
public class DoubleTest {
public static void main(String[] args) {
double dnum = 3.14;
//float fnum = 3.14;
//오류 이유?
// 3.14 는 8byte로 저장되어있어서 float에 넣지 못함
float fnum = 3.14f; //f 로 식별자로 써서 핸들링 함
System.out.println(dnum);
System.out.println(fnum);
}
}
[ch 01. 07 문자자료형]
문자도 정수로 표현함 이것에 대한 약속이 있음
문자세트 : 각 문자를 얼마로 표현할 것인지 코드 값을 모아둔 것을 문자세트(charater set)라 함
(ex. ASKII, euc-kr, utf-8, utf-16)
ASKII 는 8bit인데 256개이다. 대소문자 특수문자까지 표현이 가능 함
- A -> 65 인코딩 // 65 -> A 디코딩
그러나 이후 각 나라마다 맞는 문자세트가 다름. 호환문제가 발생함 -> unicode 가 나옴
unicode -> utf -8 / 16 으로 있음
euc-kr 등은 2byte로 표현한다 총 16bit로 표현이 가능하다
한바이트 쓸 때(앞이 0일때)는 아스키와 호환이 되고 나머지를 이용가능 함
- 자바에서는 문자가 어떻게 표현되나요?
- 자바는 문자를 나타내기 위해 전세계 표준인 UNICODE를 사용
- utf-16 인코딩을 사용 (모든 문자를 2바이트로 표시)
8과 16차이?
16은 2바이트로 하는 방식 /8은 1~4바이트 유동적으로 가능 함
네트워크 통신 등에서는 utf 16 쓰면 2바이트라서 다른곳에 갈 때 오버헤드 발생이 가능함
그래서 유동적으로 사용가능한 utf8을 이용한다
- 문자형 변수 선언과 사용하기
- 문자를 위한 데이터 타입 char ch = 'A';
- 내부적으로 숫자료 표현되므로 숫자를 넣어도 문자가 출력될 수 있음
'A' "A"는 차이가 크다
'A' 는 2byte 짜리 문자를 나타냄
"A" 는 문자'열'을 의미함
String 에서 문자열을 제공 함
String 문자 끝에 \0으로 끝남
문자는 숫자로 문자로 모두 가능하다. 숫자의 경우 양수로만 가능하다
아래 코드로 볼 수있음
-용어정리
character set: 문자를 숫자로 변환한 값의 세트
encoding: 문자가 숫자로 변환되는 것
decoding: 숫자에서 다시 문자로 변환되는 것
ASKII code: 알파벳과 숫자 특수 문자등을 1바이트에 표현하는데 사용하는 문자세트
UNICODE: 전 세계 표준으로 만든 문자 세트
UTF-8: 1바이트에서 4바이트까지 다양하게 문자를 표현할 수 있음
UTF-16: 2바이트로 문자를 표현
[마무리]
< 추가적 공부 필요한 부분>
1. 리터럴
해결여부 - 댓글
2. 부동소수점 방식
해결여부 - 댓글
3.
<회고>
1
이전에는 메모리할당이라고 구체적으로 입체화시켜서 생각해보지않았는데
이번 강의덕분에 입체화시킬 수 있게되었다
이러한 연유로 int, long 그리고 double,float 에 대한 차이도 직관적으로 받아들일 수 있게 됨
2
귀에는 익숙하지만 간과했던 리터럴의 의미를 알게되었다
'배움 __IL > TIL 0기' 카테고리의 다른 글
TIL - 연산자들 [221110-2] (0) | 2022.11.10 |
---|---|
TIL - 상수, 리터럴 [221110 - 1] (0) | 2022.11.10 |
TIL - 자료표현과 변수 [221105] (0) | 2022.11.05 |
[TIL-5] AWS로 서버 구매부터 실행 후 최종 배포까지 (0) | 2022.11.02 |
TIL - 4 POST & GET 하기 (0) | 2022.10.28 |