[Java] 데이터 타입

JAVA 데이터타입

정수
= 10진법    10, 20 ...
= 8진법      011 => 9     sysout으로 011 찍으면 숫자 9 출력   ( 0~ 으로시작 )
= 16진법     0x10          sysout으로 찍으면 숫자 16 출력   ( 0x~~ 으로 시작 )
= 2진법      0b1010        sysout으로 찍으면 숫자 10 출력  ( 0b~~ 으로 시작 )
정수 앞에 ~가 오는 경우에는 음수표현법

진법의 경우 결과값 앞에 표현법을 입력해주어야 제대로된 값을 출력한다.

실수
=저장크기 => 4byte   10.5f
=저장크기 => 8byte   10.5

소수점 8자리까지 4바이트 
소수점16자리까지 8바이트
1바이트 = 8비트

메모리를 적게 사용하려면 뒤에f를 작성 (대소문자 상관없음 f, F 둘다 사용가능)

문자
= ' ' => 한글자만 저장

문자열
= " " => 여러글자 저장


ASC (아스키코드) c언에서 사용 =====> 1byte
Unicode 자바에서 사용 ====> 2byte

UTF-8  ===> 1byte로 저장하던 글자들을 2byte로 저장하도록 변환 시켜준다.

기본 문법


대소문자 구분하기
=> 라이브러리 ( 클래스는 대소문자, 메소드는 소문자, 상수는 모두 대문자)

변수 int kor=200;
상수 final int KOR=200;

상수의경우 타입앞에 final작성.
명령문이 끝나면 마지막에 ; (세미콜론) 반드시 작성



데이터의 크기
8 bit (비트)1 byte
1024 byte (바이트)1 kilobyte
1024 kilobyte (킬로바이트)1 megabyte
1024 megabyte (메가바이트)1 gigabyte
1024 gigabyte  (기가바이트)1 terabyte
1024 terabyte (테라바이트)1 petabyte
1024 petabyte (페타바이트)1 exabyte
1024 exabyte (엑사바이트)1 zettabyte

정수형
데이터 타입메모리의 크기표현 가능 범위
byte1 byte-128 ~ 127
short2 byte-32,768 ~ 32,767
int4 byte-2,147,483,648~2,147,483,647
long8 byte-9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807

실수형
float4byte±(1.40129846432481707e-45 ~ 3.40282346638528860e+38)
double8byte

±(4.94065645841246544e-324d ~ 1.79769313486231570e+308d)


문자
char              2byte                 모든 유니코드 문자, 음수없는 양수(0~65535)
문자마다 고유의 번호를 갖는다.(아스키코드)
'A' ==> 65
'a' ==> 97
'1' ==> 49

논리
Boolean1byte        true / false                             


정수형에는 int 실수형에는 double을 사용하도록한다.

각각의 데이터 타입마다 메모리의 크기와 표현 가능 범위가 다른데 정수형과 실수형에서 가장 효율적으로 메모리를 사용할 수 있는 데이터 타입은 int와 double형이다.


만약 숫자 111,234,567를 저장하고자 할 때 해당 숫자를 담을 수 있는 데이터 타입은 int와 long 두개 뿐이다. 

int num = 111,234,567;
long num = 111,234,567;

위 두가지 방식처럼 값을 저장할 수 있다. 하지만 여기서 문제가 발생한다. 문제라기보다는 단점이라고 표현해야될까..

똑같은 데이터를 담고있지만 데이터 타입에 따른 메모리의 크기가 달라서 문제가 발생한다.

예를들어 int는 4칸의 저장공간에 해당 값을 저장하지만 long은 8칸의 저장공간 중 4칸의 저장공간에 해당 값을 저장한다. 그렇게되면 4칸의 남는 공간이 생기게되는데 이때 공간낭비 즉 메모리의 낭비가 발생하게되어 소규모 프로그램에서는 별차이가 없을지 모르지만 대규모 프로그램을 만들때는 성능에 차이를 발생시키게된다.

일반적으로 일상생활에서 사용하는 정수와 실수의 범위는 데이터타입 int와 double형의 표현 가능 범위 내이므로 정수형에는 int, 실수형에는 double을 사용한다. int은 충분히 넓은 범위의 값을 담을 수 있으며 속도 측면을 고려했을때 나누거나 병합하지 않기 때문에 다른 데이터 타입보다 조금 더 빠르다.
하지만 무조건 int와 double을 사용해야하는것은 아니며 필요에따라 다른 데이터 타입을 사용해도 무관하다.



추가적으로 ( casting 형변환 )

일반적으로 정수를 변수에 저장하면 기본적으로 int형으로 저장되며 실수의 경우 기본적으로 double형으로 저장된다.

만약 float num = 10.5를 저장하면 오류가 발생하는데 그이유는 실수 10.5는 기본적으로 double형으로 저장되는데 데이터타입을 float으로 작성했기 때문이다.

위와같이 실수이지만 default데이터타입으로 저장되는 double형이 아닌 float형으로 저장하고자 할 때는 실수 뒤에 f 또는 F를 작성하면 원하는 데이터 타입으로 변환되어 값을 저장할 수 있다.
ex)float num = 10.5F 또는 float num = 10.5f

그리고 정수의 경우 long num = 3,000,000,000을 저장하고자한다면 오류를 발생한다. 범위가 int가 표현가능한 범위를 넘었기때문에 long데이터타입으로 적었지만 정수 또한 실수와 마찬가지로 default데이터타입으로 int형을 가지고 있기때문이다.  이런경우에도 정수뒤에 L 또는 l 을 작성해주어야 한다.
ex)long num = 10L 또는 long num = 10l

변수에 값이 저장될 때 뒤에서부터 값에대한 데이터 타입을 파악하므로 뒤에 데이터 타입을 작성해주도록한다.

값 뒤에 작성하는 데이터 타입은 대문자 소문자 상관이 없다.


메모리에 저장하는 크기
byte < short < int < long < float < double

작은데이터가 큰데이터에 저장은 가능하나 큰데이터는 작은데이터에 저장이 불가능하다.
**예외 : int형은 char형에 저장이 가능하다.





댓글