티스토리 뷰

자바/자바 기초

자료형 (Data Type)

UroJem 2023. 5. 8. 01:15

변수와 메모리

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

변수는 할당된 메모리를 가리키는 이름

 

 

기본 자료형(Primitive Data Type)의 종류

  정수형 문자형 실수형 논리형
1바이트 byte - - boolean
2바이트 short char - -
4바이트 int - float -
8바이트 long - double -

 

 

자료형의 종류와 크기

자료형 저장값 범위 bit byte
boolean true, false 8 1
char '\U0000' ~ '\Uffff' (0 ~ 216-1, 0 ~ 65535) 16 2
byte -128 ~ 127 (-27 ~ 27-1) 정수 기본형 8 1
short -32,768 ~ 32,767 (-215 ~ 215-1) 16 2
int -2,147,483,648 ~ 2,147,483,647 (-231 ~ 231-1, 약 ±20억) 32 4
long -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 (-263 ~ 263-1) 64 8
float 1.4E-45 ~ 3.4E38(1.4x10-45 ~ 3.4x1038) 32 4
double 4.9E-324 ~ 1.8E308(4.9x10-324 ~ 1.8x10308) 실수 기본형 64 8

 

 

byte와 short

  • byte : 1바이트 단위의 자료형 동영상, 음악 파일, 실행 파일의 자료를 처리할 때 사용
  • short : 2바이트 단위의 자료형 C/C++ 언어와 호환 시 사용

 

int

  • 자바에서 사용하는 정수에 대한 기본 자료형
  • 4바이트 단위의 자료형
  • 프로그램에서 사용하는 모든 숫자(리터럴)은 int로 저장됨
  • 32 비트를 초과하는 숫자는 long 자료형으로 처리

 

long

  • 8바이트 자료형
  • 숫자의 뒤에 알파벳 L 또는 l 식별자를 써서 long 형임을 표시함
  • long lnum = 123456879L;

 

 

1byte 크기의 데이터 타입인 byte에 int 값을 넣을 수 없는 이유는 4byte 크기의 int 값이 작은 byte 그릇에 담기지 못해서 에러가 난다. byte b1 = 128; 이 에러난느 이유는 저장 범위가 넘어가기 때문이다.

굳이 byte 데이터 타입이 있는 이유는 리소스가 모자란 기기나 생활가전 프로그래밍시 사용할 수 있기 때문.

정수의 기본타입은 int이나 범위 안에서 실제 숫자로 연산하면 해당 데이터 타입으로 연산된다.

 

 

float

  • 4바이트 자료형
  • 실수값을 부동소수점(floating-point)방식으로 저장하기 때문에 float이라 한다.
  • 자바에서 실수는 모두 double에 저장되어 double형 변수에 저장하면 아무 문제 없으나 float에 저장할 땐 명시적으로 실수 뒤에 알파벳 F 또는 f 식별자를 써서 float 형임을 표시함
  • float fnum = 3.14F;
  • 매개변수로 넘길 때 float형으로 넘기면 뒤에 반드시 식별자를 사용해줘야 에러가 나지 않는다. 웬만하면 실수는 double 형을 사용한다.

 

 

double

  • 8바이트 자료형
  • float보다 두배의 크기(8byte)를 갖기때문에 double이라 한다.
  • 자바에서 실수의 기본 타입은 double을 사용한다.

 

부동 소수점 방식

  • 실수는 정수보다 정밀하기 때문에 정수와는 다른 방식으로 표현해야 함
  • 부동 소수점 방식으로 실수 값 0.1 표현
  • 지수부와 가수부로 표현함
  • 컴퓨터에서는 밑수를 2로 사용
  • 정규화 : 가수가 밑수보다 작은 한자리까지 가수로 표현되는 것
  • 컴퓨터에서는 밑수가 2 이므로 정규화를 하게 되면 가수부분의 첫 번째 자리 숫자는 항상 1임 예) 0.2 표현 0.4 x 2-1 정규화 하면 1.6 x 2-3

 

부동 소수점 방식의 오류

지수와 가수로 나타내는 부동 소수점 방식에는 지수부가 0을 표현할 수 없기 때문에 약간의 오차가 발생할 수 있다.

 

 

char

  • 어떤 문자를 컴퓨터 내부에서 표현하기 위해 특정 정수 값을 정의
  • 최초의 문자는 영문 기준으로 ASKII 문자세트로 만들어져 8bit 크기 안에서 영어 대소문자, 특수문자, 숫자 표현이 모두 가능했지만 여러 나라의 문자를 사용하기 위해 UNICODE가 등장
  • A 는 65. A를 인코딩하면 65. 65를 문자로 디코딩하면 A가 된다.
  • 문자세트 : 각 문자를 얼마로 표현할 것인지 코드 값을 모아둔 것을 문자세트(character set)라 함 (ex.ASKII, euc-kr, utf-8, utf-16)
  • 자바는 문자를 나타내기 위해 전세계 표준인 UNICODE를 사용
  • utf-16 인코딩을 사용 (모든 문자를 2바이트로 표시)
  • 문자를 위한 데이터 타입 char ch = 'A';
  • '' 싱글 쿼티션은 문자를 나타내고 "" 더블 쿼티션은 문자열을 나타내는 것이라 다른 것이다.
  • 내부적으로 숫자로 표현되므로 숫자를 넣어도 문자가 출력될 수 있다. (ex. char ch2 = 66; // B가 출력)

 

 

boolean

  • true(참), false(거짓) 두 가지만 나타냄
  • 1바이트를 사용함
  • 값이 존재하는지, 배열이 비었는지, 결과가 참인지 거짓인지 등을 표현

 

 

 

지역 변수 자료형 없이 사용하기 (자바 10 지원)

  • Local variable type inference
  • 추론 가능한 변수에 대한 자료형을 선언하지 않음
  • 한번 선언하여 추론 된 변수는 다른 타입의 값을 대입 할 수 없음
  • 지역 변수만 사용 가능

 

대입되는 값을 보고 타입 추론이 가능한 경우 변수선언에 타입 대신 var를 적으면 해당하는 타입으로 할당이 된다.

원래 컴파일 언어의 경우 타입을 명확히 작성해야 했지만 스크립트 언어처럼 자바10 부터 타입 추론을 지원하기 시작.

이미 타입 추론되어 할당된 변수에는 해당 타입이 아닌 값을 넣게되면 기존처럼 타입 미스매치 에러가 난다.

 

int와 double이 기본형이기 때문에 getClass메서드 사용이 불가하지만 오류 메세지만 봐도 int와 double 타입 변수인 것을 확인할 수 있다.

 

한 번 할당된 변수에 다른 타입을 재 할당할 수 없다.

 

 

용어정리

  • 리터럴 : 데이터 타입에 따라 할당된 값 그 자체를 의미한다.
    https://dololak.tistory.com/676
  • character set : 문자를 숫자로 변환한 값의 세트
  • encoding : 문자가 숫자로 변환되는 것
  • decoding : 숫자에서 다시 문자로 변환되는 것
  • ASKII code : 알파벳과 숫자 특수 문자등을 1바이트에 표현하는데 사용하는 문자세트
  • UNICODE : 전 세계 표준으로 만든 문자 세트
  • UTF-8 : 1바이트에서 4바이트까지 다양하게 문자를 표현할 수 있음
  • UTF-16 : 2바이트로 문자를 표현

 

 

한글 유니코드

https://unicode.org/charts/PDF/UAC00.pdf

 

정보 출처

https://fastcampus.co.kr/dev_online_javaend

 

'자바 > 자바 기초' 카테고리의 다른 글

상수와 리터럴, 형 변환  (0) 2023.05.31
변수 (Variable)  (0) 2023.05.07
자바 코딩 컨벤션  (0) 2023.05.07
자바 프로그래밍  (0) 2023.05.07
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함