1. 데이터타입
모든 변수에는 데이터 타입이 있으며 타입에 따라 저장할 수 있는 값의 종류와 범위가 달라집니다.
변수는 크게 기본타입(primitive)과 객체타입(Non-primitive) 2가지로 나뉩니다.
-
기본타입 - 실제 데이터(값)를 저장하고 논리, 문자, 정수, 실수형으로 총 8개의 데이터 타입이 존재하며 각각 저장 크기가 다릅니다.
-
객체타입 - 데이터가 저장되어 있는 주소를 저장(객체의 주소), 기본형을 제외한 나머지 사용자정의 자료형을 말합니다.
데이터 타입
데이터 타입의 크기
컴퓨터는 2진수로 인지하기 때문에 2^n(n= 비트크기) 로 범위가 할당됩니다. 그리고 위 자료형 범위를 보면 byte 127, shot 32767 등 음수에 비해 -1의 범위를 갖는 것은 0을 포함하고 있기때문에 0을 제외한 나머지 정수 부분을 의미합니다.
1-1. 정수 & 실수
정수(byte, char, short, int, long)
-
byte - 색상 정보 및 파일, 이미지등 이진 데이터를 처리할 때 주로 사용됩니다.
-
char - Java는 모든 문자를 유니코드(unicode)로 처리합니다. 유니코드는 음수가 없기에 char 타입은 음수를 저장할 수 없으며 ' ' 로 감싸 문자를 선언할 수 있으며 ' ' 없이 직접 유니코드 정수값도 저장할 수 있습니다.
-
short - C언어와 호환을 위해 사용되며 비교적 잘 사용되지 않는 자료형입니다.
-
int - Java에서 정수연산을 하기 위한 기본 타입으로 코드를 입력시 8진수, 10진수, 16진수 표기가 가능합니다.
-
long - 수치가 큰 데이터를 다루는 프로그램에서 long 타입을 사용하며 은행 및 우주 관련 프로그램등에 사용됩니다. int 타입의 범위 이상의 수로 초기화할 때 숫자 뒤에 L을 붙여줘야 합니다.
실수(float, double)
-
소수점이 있는 데이터를 뜻하며 실수는 부동 소수점 방식으로 저장이 됩니다.
-
실수 1.2345는 부동소수점으로 표현하면 0.12345 * 10^1 이며 가수는 0.12345 지수는 1로 표현할 수 있습니다.
-
double은 float보다 약 2배의 가수 저장메모리 공간을 가지고 있어 높은 정밀도의 계산을 요구하는 조건에선 double을 사용해야 하며 자바는 실수 리터럴의 기본 타입은 double을 사용합니다.
부동 소수점 표현
자료형의 메모리 크기 구성
자료형 | 메모리크기 | bit 구성 |
float | 4Byte | 부호(1bit) + 지수(8bit) + 가수 (23bit) = 32bit = 4Byte |
double | 8Byte | 부호(1bit) + 지수(11bit) + 가수 (52bit) = 64bit = 8Byte |
1-2. 참과 거짓(논리타입)
논리 타입인 boolean은 true와false를 저장할 수 있는 데이터타입니다. 조건문이나 제어문의 실행흐름을 변경할 때 주로 사용되며 false일때 중지 true일때 시작의 의미로 활용됩니다.
1-3. 타입 변환
타입변환은 하나의 데이터타입이 다른 데이터타입으로 변환되는 것을 말합니다. byte -> int로 혹은 반대로 byte -> int 로 변환이 가능하며 전자의 변환은 자동(묵시적) 변환이라 말하며 후자는 강제(명시적) 변환이라 말합니다.
자동 변환 (4byte의 타입 -> 8byte의 타입)
- 프로그램 실행중 자동으로 타입변환이 일어나는데 이러한 조건은 작은 크기의 변수에서** 큰 크기의 변수**로 저장될때 발생합니다.
public class DataType { public static void main(String[] args) { int val = 20; double doubleVal = val; System.out.println(doubleVal); //result 20.0 } }
강제 변환 (4byte의 타입 -> 1byte의 타입)
- 큰 크기의 타입은 작은 크기의 타입으로 자동변환을 할 수 없습니다. 하지만 예를 들어 4byte의 int형의 크기를 쪼개어 끝의 1byte만 byte형의 변수에 저장하는 것은 가능합니다. 이런 강제 타입 변환을 캐스팅이라 말하며 ( ) 로 캐스팅 연산자를 사용합니다.
public class DataType { public static void main(String[] args) { long num1 = 3000; int num2 = (int)num1; //캐스팅 System.out.println(num2); //result 3000 } }
강제 변환의 주의할점은 사용자로 입력받은 값을 변환할때 값의 손실이 발생하지 않아야 하기 때문에 값의 보존이 될 수 있는지 확인해야하며 특히 정수 -> 실수의 변환에선 정밀도에 대한 측면도 데이터의 손실을 고려해서 사용해야 합니다.
'코딩' 카테고리의 다른 글
러스트 : map (basic data types in rust programming language) (0) | 2020.12.27 |
---|---|
러스트 자바스크립트 자바 : 객체 인스턴스 new 클래스 struct (0) | 2020.12.25 |
css : flex (0) | 2019.03.27 |
javascript : 모듈 module (0) | 2019.03.23 |
http-server 서버 실행 (0) | 2019.03.18 |