java

[210430] java 기본 자료형

hjk927 2021. 4. 30. 11:26

 

.

 

java wrapper에 대해 정리하다가 기본 자료형에 관련된 내용을 함께 정리하게 되었는데, 내용이 길어져서 글을 따로 올리게 되었다. 

 

 

docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html 의 내용 대부분을 번역하여 작성하였다. 

 

 

1. Primitive Data Types


알다시피, 자바를 사용할 때는 정적으로 모든 변수를 선언해주어야 한다. 자바는 8개의 기본 데이터 타입을 제공한다. 

 

data type size description
byte 8-bit(-128 ~ 127) 정수형 변수로 큰 배열에서 메모리를 절약할 때 유용하다. 
short 16-bit(-32,768 ~ 32,767) 정수형 변수로 큰 배열에서 메모리를 절약할 때 유용하다. 
int  32-bit(-2³¹ ~ 2³¹-1)   정수형의 기본 데이터 타입으로 사용된다. 
long 64-bit(-2⁶³ ~ 2⁶³-1) int가 제공하는 것보다 더 큰 범위를 필요로 할 때 사용하는 정수형 변수이다.
float (3.4 * 10³) ~ (3.4 X 10³) IEEE 754 32-bit single-precision를 따르는 부동 소수점 실수형 변수이다. 큰 실수형 배열에서 메모리를 절약해야 할 때 double 대신 사용한다. 값의 오차가 생길 수 있다. 
double (1.7 * 10³) ~ (1.7 X 10³) IEEE 754 64-bit double-precision를 따르는 부동 소수점 실수형 변수이다. 
boolean - true와 false 두 가지 값만을 저장할 수 있는 변수이다. 간단한 분기 상태를 저장할 때 사용한다. 
char 16-bit(0 ~ 65,535) 하나의 유니코드 문자를 저장한다. 

 

필드에 선언되었으나 초기화되지 않은 변수들은 컴파일러에 의해 기본 값(대체로 0이거나 null)으로 설정된다. 그렇지만, 프로그래밍을 할 때는 명시적으로 변수를 초기화하는 것이 좋다. 

data type default value(for fields)
byte 0
short 0
int 0
long 0L
float 0.0f
double 0.0d
char '\u0000'
boolean false

 

지역 변수의 경우는 다르다. 초기화되지 않은 지역 변수에 컴파일러가 따로 값을 할당해주지 않는다. 그러므로, 지역 변수를 사용할 때 반드시 값을 할당해주어야 한다. 

 

 

 

Literals


기본 데이터 타입은 객체가 아니기 때문에, 변수 생성 시 new 키워드를 사용할 필요가 없다. 리터럴은 소스 코드의 고정된 값을 대표한다. 예시로, 아래처럼 기본 데이터 타입 변수에 리터럴을 할당할 수 있다. 

boolean result = true;

char capitialC = 'C';

byte b = 100;

short s = 10000;

float f = 1.0f;

 

1. Integer Literals

byte, short, int, long을 정수 리터럴으로 생성할 수 있다. long의 경우는 리터럴의 맨 끝에 알파벳 L이나 l을 붙인다. 리터럴은 아래 숫자 체계에 따라 표현할 수 있다. 

 

  • 10진수 기반으로 0-9를 포함한 숫자 
  • 16진수 기반으로 0-9, A-F를 포함한 숫자 
  • 2진수 기반으로 0과 1을 포함한 숫자(Java SE 7 이후 버전에서 생성 가능)

사용 예제는 아래와 같다. 16진수는 '접두사로 0x'를, 2진수는 '0b'를 붙인다. 

// The number 26, in decimal
int decVal = 26;
//  The number 26, in hexadecimal
int hexVal = 0x1a;
// The number 26, in binary
int binVal = 0b11010;

 

 

2. Floting-Point Literals

float의 경우 리터럴의 맨 끝에 F나 f를 붙인다. double의 경우는 선택적으로 D나 d를 붙일 수 있다. 또한, 과학적 표기법에 따라 E나 e를 붙일 수도 있다. 

double d1 = 123.4;
// same value as d1, but in scientific notation
double d2 = 1.234e2;
float f1  = 123.4f;

 

 

3. Character and String Literals

char 리터럴과 String 리터럴은 대체로 Unicode(UTF-16) 문자를 포함한다. char 리터럴은 작은 따옴표('')를, String 리터럴은 큰 따옴표("")를 사용해서 표현한다. 

 

몇몇 특별한 기호에 대해서는 이스케이프 시퀀스(\)를 사용해서 표현할 수 있다. :  \b (backspace), \t (tab), \n (line feed), \f (form feed), \r (carriage return), \" (double quote), \' (single quote), and \\ (backslash)

 

 

 

+. 숫자 리터럴에서 언더바 사용하기 

Java SE 7 이후로, 숫자에 언더바(_)를 사용해서 자릿수를 표현할 수 있게 되었다. 정수 리터럴 숫자열을 언더바를 통해 나눠서 볼 수 있으며, 가독성을 높일 수 있다. 

    public static void main(String[] args) throws IOException {
        int tmp2 = 100_000_000;
        System.out.println(tmp2);
    }

언더바를 사용해서 초기화 한 변수를 출력한 결과

 

아래와 같이 언더바를 사용할 수 있다. 

long creditCardNumber = 1234_5678_9012_3456L;
long socialSecurityNumber = 999_99_9999L;
float pi =  3.14_15F;
long hexBytes = 0xFF_EC_DE_5E;
long hexWords = 0xCAFE_BABE;
long maxLong = 0x7fff_ffff_ffff_ffffL;
byte nybbles = 0b0010_0101;
long bytes = 0b11010010_01101001_10010100_10010010;

 

언더바는 숫자의 사이에만 사용할 수 있다. 아래와 같은 위치에는 사용할 수 없다. 

 

  • 숫자의 맨 앞이나 맨 끝
  • 부동 소수점 리터럴의 소수점에 인접한 위치
  • F, L 기호 앞
  • 기타 String이나 숫자가 올 것으로 예상되는 위치 

 


oracle에서 제공하는 document를 단순히 변역하는 글이 되었다. 알고 있는 내용이었으나, 누군가에게 설명한다는 생각을 하며 직접 정리를 해보니 더 개념을 잘 알 수 있게 되었다. 다음 글에서는 원 목적이었던 wrapper를 정리할 것이다. 

 

 

 

 

- 참고 자료 

www.tcpschool.com/java/java_api_wrapper

docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html