배움 __IL/TIL 0기

TIL - 각종자료형 [221108]

Mo_bi!e 2022. 11. 8. 02:56

[ch 01. 06 변수와 메모리]

변수와 메모리

 

변수를 선언하면 해당되는 자료형의 크기 만큼 메모리가 할당
변수는 할당된 메모리를 가리키는 이름

int level = 10; // 4바이트 정수형 메모리가 level 이라는 이름으로 할당 됨

변수선언을 타입에 국한하는 것이 아니라 메모리 할당도 고민해보기

 

<변수의 종류>

같은 타입이지만 메모리할당량이 다른경우

 

 

<정수자료형>

앞 시간에 언급했던것 처럼 MSB(부호비트)는 제외하고 나머지로 수의범위를 결정한다

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 표현

한정된 비트안에서 무수히 많은 소수를 표현하기 어려움 -> 그래서 부동소수점으로 표현함

 

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

귀에는 익숙하지만 간과했던 리터럴의 의미를 알게되었다