본문 바로가기

카테고리 없음

[java] 자바 - 데이터 타입

자바를 주 언어로 사용하지만 부끄럽게도 많은 것을 알지 못하고 설사 아는 부분도 남에게 제대로 설명하지 못하는 부분도 있습니다. 개인적으로 기초가 중요하다 생각하고 객체지향언어중 하나인 자바와 친해지기 위해 학습하고 정리하는 포스팅입니다. (Java 개발 환경설정은 따로 포스팅하지 않습니다. )

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
    }
}

 

강제 변환의 주의할점은 사용자로 입력받은 값을 변환할때 값의 손실이 발생하지 않아야 하기 때문에 값의 보존이 될 수 있는지 확인해야하며 특히 정수 -> 실수의 변환에선 정밀도에 대한 측면도 데이터의 손실을 고려해서 사용해야 합니다.

 

참고

이것이 자바다
위키백과