[JAVA] 기본 데이터 타입과 변환
기본 데이터 타입과 변환
1. 기본 데이터 타입
JAVA에는 8개의 기본 데이터 타입(primitive data types)이 있다.
정수 타입 : byte, short, int, long
부동 소수점 타입 : float, double
부울 데이터 타입 : boolean
문자 데이터 타입 : char
(1) 정수와 부동 소수점
byte 는 8비트로, 0과 1을 표현하는 1 비트의 8자리이다.
1 byte 는 128가지() 다른 데이터를 가질 수 있다.
등호를 포함하게되면 1 byte의 범위는 -128 ~ 127 이다.
타입 | 기억장소 | 최소값 | 최대값 |
byte | 8 비트 | -128 | 127 |
short | 16 비트 | -32,768 | 32767 |
int | 32 비트 | -2,147,483,648 | 2,147,483,647 |
long | 64 비트 | -9,223,372,036,854,775,808 | 9,223,372,036,854,775,807 |
float | 32 비트 | 7개의 유효 숫자를 가지며, -3.4E+38의 근사값 | 7개의 유효 숫자를 가지며, 3.4E+38의 근사값 |
double | 64 비트 | 15개의 유효 숫자를 가지며, -1.7E+308의 근사값 | 15개의 유효 숫자를 가지며, 1.7E+308의 근사값 |
프로그램을 설계할 때 메모리 공간이 낭비되지 않도록 적절한 크기의 변수를 선택하는데 주의해야 한다.
특정 변수의 값이 1~1000 의 범위를 벗어나지 않을 경우, short 면 충분하다.
반면에, 특정 변수의 값 범위가 확실하지 않을 경우에는 충분한 크기의 공간을 제공해야 한다.
(2) 명시적 데이터 값 (literal)
Java에서는 명시적으로 사용하는 리터럴 값을 사용한다.
Java의 정수 리터럴은 int 타입이다. long 타입을 표현하기 위해서는 숫자 끝에 L 이나 l 을 붙여준다.
int age = 20;
long bigdata = 86127531235L;
부동 소수점 리터럴은 double 형이다. float 타입을 표현하기 위해서는 숫자 끝에 F나 f를 붙인다.
double delta = 453.523311903;
float ratio = 0.2363F;
(3) 문자
char 리터럴은 단일 인용 부호로 표현된다.
String 리터럴은 이중 인용 부호로 구분된다. String 타입은 Java의 기본 데이터 타입이 아니며, 한 클래스의 이름이다.
char score = 'A';
(4) 부울 (boolean)
boolean 은 두 가지 유효 값을 가진다. true, false
부울 값은 다른 데이터 타입으로 변환될 수 업속, 다른 데이터 타입도 부울 값으로 변환될 수 없다.
boolean flag = true;
2. 데이터 변환
데이터 변환은 확정 변환(widening conversion)과 축소 변환(narrowing conversion)으로 구분된다.
(1) 확장 변환
확장 변환은 정보가 손실되지 않기 때문에 안전하다. 이 변환은 한 데이터 타입보다 더 큰 타입으로 변환되기 때문에 확장 변환이다.
byte에서 short 변환은 안전하다. 따라서 어떠한 정보 손실도 일어나지 않는다.
정수 -> 정수 , 부동 소수점 -> 부동 소수점 의 확장 변환은 그 값을 보존한다.
하지만 int 나 long을 float , long, double로 변환시킬 때, 유효 숫자 중에서 몇 개가 손실될 수 있다.
(2) 축소 변환
축소 변환은 정보가 손실될 가능성이 많다. 더 작은 공간을 사용하는 다른 타입으로 변환하면서 정보의 일부가 손실될 수 있다.
따라서 축소 변환은 일반적으로 피해야 한다.
(3) 데이터 변환 방법
배정 변환은 한 타입의 값이 다른 타입의 변수에 배정될 때 일어나며, 그 과정에서 값이 새로운 타입으로 변환된다.
캐스팅(casting)은 Java에서 가장 일반적인 형변환 형태이다.
int score = (int) 23.4
여기서 23.4 를 int형 score에 배정하기 위해 (int)로 캐스팅 했다. 그 과정에서 데이터 손실이 일어나 score는 23이 된다.
8개의 기본형 중에서 boolean을 제외한 나머지 7개의 기본형 간에는 서로 형변환이 가능하다.
범위가 큰 자료형에서 범위가 작은 자료형으로의 변환인 축소변환은 데이터 손실이 일어날 수 있다.
원칙적으로 모든 형변환에 캐스트 연산자를 이용한 형변환이 이루어져야 하지만, 확장 변환은 값의 손실이 없으므로 캐스트 연산자를 생략하는 것을 허용한다.
위의 그림처럼 화살표 방향으로의 형변환은 데이터 손실이 일어나지 않으므로 캐스트 연산자를 생략해도 된다.
출처: https://hyeonstorage.tistory.com/135?category=557602 [개발이 하고 싶어요]
'JAVA > Java' 카테고리의 다른 글
[JAVA] Math 클래스 (0) | 2019.09.30 |
---|---|
[JAVA] Random 클래스에 대해서 (0) | 2019.09.30 |
[JAVA] String 클래스에 대해서 (0) | 2019.09.30 |
[JAVA] 문자열 입력과 출력 (Scanner) (0) | 2019.09.30 |
[JAVA] 이클립스(eclipse) 설치 및 셋팅 (0) | 2019.09.30 |
[JAVA] jdk 설치 환경변수 설정 (0) | 2019.09.30 |
openssl AES 모드 : ECB,CBC,CFB,OFB,CTR (0) | 2019.04.02 |
AES 128비트 암호화(ECB 모드, PKCS5Padding) (0) | 2019.04.02 |