개발/JAVA

[JAVA] 자료 유형(데이터 타입)

mabb 2022. 5. 19. 09:39
반응형

 안녕하세요. 삶의 질을 높이고자 노력하는 영차영차입니다.
자바 기본기를 탄탄히 다지기 위한 공부 목적 포스팅입니다.
이것이자바다, HeadFirstJava 등의 교재와 구글링을 토대로 본인의 이해를 위해 작성하였으며
계속해서 살을 붙여나갈 계획입니다.
틀린 부분이 있을 경우 댓글 남겨주시면 감사하겠습니다.
---------------------------------------------------------------------------------------------------------

WHY
-자바는 선언하는 모든 변수의 데이터 타입을 지정해야하므로 데이터 타입에 대한 이해가 필요함
-자바는 유형을 철저하게 따진다.

JVM은 모든 기본 타입의 정의를 명확히 함으로써 플랫폼의 독립성을 보장한다
출처: 위키백과

파이썬 대비 선언하는 모든 변수의 데이터 타입을 지정하는 것이 번거롭다고 생각했는데 이런 특징이 자바의 높은 이식성을 보장하는 것 같다.

 

자바의 데이터 타입은 원시타입(primitive type)과  참조타입(reference type)으로 구분된다.


원시타입
: 메모리에 값(리터럴)을 직접 저장하는 타입이다. 원시 타입으로 지정할 경우 메모리사용공간(크기)이 할당되며 저장되는 값의 범위가 정해진다.
-> 원시타입은 단순한 bit 패턴으로 나타낼 수 있는 기초적인 값이다.


타입/ 메모리사용크기/ 값의 범위

정수 타입
byte / 1byte / -128~127             ->  10000000 ~ 01111111 / 최상위 비트는 부호인 이진수
short / 2byte / -32,768 ~ 32,767
int / 4byte / -2,147,483,648 ~ 2,147,483,647
long / 8byte /  -2^63 ~ ((2^63) -1)

실수 타입 -> 부동소수점 방식 : 부호(1bit) + 가수( 0~1사이의 값 표현) + 지수( 10^n , n값) 
float / 4byte / (+/-)1.4E-45 ~ (+/-)3.4028235E38
double / 8byte / -2^63 ~ ((2^63) -1)

문자 타입
char / 2byte / 유니코드 ( 0~65535)  -> 알파벳, 숫자, 기호, 한글 각각 한글자가 유니코드 숫자로 저장됨. 'A' -> 65

논리 타입
boolean / 1byte / true, false

-----------------------------------------------
int x;    // int 데이터 타입의 x 변수를 선언
x = 10;   // x에 숫자 10을 대입
 -> 변수 x에 4byte크기의 메모리가 할당되고
-2,147,483,648 ~ 2,147,483,647 사이의 정수를 저장할 수 있다.

char c = 'a';
byte b = 98;
float f = 32.5f;
boolean isGood = true;
long l = 123456789123890210L;
----------------------------------------------

※ 참고
1bit :
0,1을 저장하는 최소 기억 단위
1byte:
8bit

 

타입 변환
:다른 데이터 타입으로 변환하는 것

타입 변환에는 자동(묵시적) 타입변환과 강제(명시적)타입 변환이 있다.
담을 수 있는 리터럴 값의 범위를 컵에 비유. (Head first Java)
예를들어
-100~100 사이의 값을 담을 수 있는 컵에 -10~10 사이의 값을 담을 수 있는 컵에 있던
내용물을 옮길 경우 넘치지 않게 옮길 수 있다.(자동 타입변환, 묵시적 타입변환)

하지만  -10~10 사이의 값을 담을 수 있는 컵에 -100~100 사이의 값을 담을 수 있는 컵의 내용물을  담을 수는 없다.
0~10 사이의 값만 담을 수 있는 컵에 -5~5 사이의 값을 담을 수 없는 것도 마찬가지.
이런 경우 담을 수 없는 부분은 버리고 내용물을 옮길 수 있는데 이를 자동타입변환(강제 타입 변환, 캐스팅)이라고 한다.

자동타입변환
: 작은 컵에 있는 것을 큰 컵으로 옮기는 것 -> 가능
byte(1) < short(2) < int(4) < long(8) < float(4) < double(8)
* float는 메모리 크기는 작지만 부동소수점 표현 덕에 저장할 수 있는 값의 범위가 더 크기 때문에
메모리 할당크기가 더 큰 long 타입보다 컵이 더 크다고 봄.

 

강제 타입 변환 (캐스팅,casting)
:넘치는 것은 버리고 옮기는 것.
-> 상위 비트는 버리기 때문에 값의 손실이 발생할 수 있다.

작은 크기 타입 변수 = (작은 크기 타입) 큰 크기 타입 변수 ;
int x = 1234567890;
byte y = (byte) x;
-> 4byte인 int의 내용물을 1byte인 byte타입에 담기위해 상위 3byte의 값은 버려지고 하위 1byte의 값만 대입된다.



다른 타입끼리 연산을 할 경우 작은 타입이 큰 타입으로 자동변환된 후 연산을 수행한다.

 

 

: ㅎ

반응형