자료형 종류

java data types

자료형은 크게 기본 자료형참조 자료형으로 나누어진다. 이번 포스팅에서는 자바 프로그래밍에 있어서 기초가 되는 자료형에 한해서만 알아보기로 한다. 세부적인 내용은 추후 포스팅에서 다뤄보도록 하겠다.

기본 자료형(Primitive Type)

기본형은 우리가 흔히 알고 사용하는 int, float, char, boolean과 같은 자료형이다. 자바는 정적 타이핑으로 작성되는 언어이므로, 기본 자료형에 대해서 잘 알고 있어야 한다. 사용 목적에 맞는 자료형을 적재적소에 배치하는 것은 효율성 좋은 코드를 짤 수 있게 한다.

자료형 의미 메모리 사이즈 범위 기본값
byte 8-bit 정수 1 byte -2⁷ ~ 2⁷-1 0
short 16-bit 정수 2 bytes -2¹⁵ ~ 2¹⁵-1 0
int 32-bit 정수 4 bytes -2³¹ ~ 2³¹-1 0
long 64-bit 정수 8 bytes -2⁶³ ~ 2⁶³-1 0L
float 32-bit 부동소수점(IEEE 754) 4 bytes -3.40E+38 ~ 3.40E+38 0.0f
double 64-bit 부동소수점(IEEE 754) 8 bytes 1.79E+308 ~ 1.79E+308 0.0d
char 16-bit 유니코드 문자 2 bytes 0 ~ 2¹⁶-1 \u0000
boolean 논리형 1 bit 0 or 1 0 (false)

C/C++과 달리 자바는 정수형에서 unsigned형이 없다. 엄연히 따지면 java 8 이후부터는 int, long형에 한에서는 Wrapper Class를 통해 몇가지 정적 메서드를 사용할 수 있도록 하고 있다.

참조 자료형(Reference Type)

참조형기본 자료형을 기초로 하여 만들어진 자료형이다. 대표적으로 자바에서 제공하는 String, Array, Map, Set 등과 같은 클래스(Class)인터페이스(Interface), 열거형(Enum)이 여기에 해당한다. 추가적으로 필요에 따라 사용자가 참조형 타입을 정의할 수도 있다.

Object

모든 ClassEnumObject 클래스를 상속한다. 다시말해 Object는 모든 Class와 Enum의 일반화된 타입이라는 것이다. 여기서 주의할 점은 Interface는 Object를 상속하지 않는다는 사실이다. 이와 관련된 내용은 자바 api 문서 Tree에 잘 드러나 있다.

자바 api 문서에는 제공하는 모든 Class, Interface, Enum 등의 상세 스펙을 정의하고 있다. 이 사이트는 자바를 깊이 이해하는데 많은 도움을 주므로 자주 방문하면 좋다. 다만 자바 버전에 따라 api구현이 상이하므로 주의해야 한다.

String

String은 기본 자료형이 아니라는 사실은 익히 잘 알려져 있다. String은 char의 배열로 구현된 참조 자료형이다.

C/C++의 경우는 문자열을 사용하기 위해서 실제로 char형의 배열을 직접 사용한다.

자바가 C/C++과 달리 String형을 따로 제공하는 이유는 문자열에 유용한 메서드를 제공하기 위해서이다. charAt, concat, equals, indexOf, split와 같은 메서드를 이용하면 문자열을 쉽게 조작할 수 있다.

Array

배열 또한 마찬가지로 기본 자료형이 아니다. 이는 다음과 같은 간단한 코드를 통해서 테스트 해볼 수 있다.

int[] array = new int[10];
System.out.println(array instanceof Object);
// true

모든 클래스는 Object의 상속 클래스이므로 위 코드를 통해 배열이 기본형이 아님을 알 수 있다. 만약 배열이 기본형이었다면 위와 같은 코드의 실행 결과 false가 나와야 한다.

Wrapper 클래스

Wrapper Class는 기본 자료형을 감싼 클래스이다. 대표적으로 Byte, Short, Integer, Long, Float, Double, Character, Boolean이 있다. 이것을 사용하는 이유는 앞서 설명한 String을 사용하는 이유와도 동일하다. 기본 자료형을 클래스로 랩핑하면 얻을 수 있는 이점은 유용한 메서드를 제공할 수 있다는 점이다.

하지만 이보다 더 중요한 이유는 제네릭(Generic)에 있다. 제네릭에 사용되는 매개변수 TObject 자료형만 받을 수 있다. 이것은 다시 말해 클래스로 정의된 객체만을 전달받는다는 것이다. 다만 코드를 짜다보면 제네릭을 기본 자료형에 적용해야 하는 경우가 있다. 이러한 경우에는 Wrapper Class을 이용하면 문제가 해소된다.

제네릭을 통한 유연한 프로그래밍을 기본 자료형에도 적용할 수 있게 하기 위해 Wrapper Class를 제공한다고 생각하면 이해가 쉬울 것이다.

차이점

앞서 기본 자료형과 참조 자료형이 무엇인지, 그리고 어떠한 차이가 있는지에 대해서 알아보았다. 이들의 차이에 대해서 간단히 알아보고 이번 포스팅을 마치려고 한다.

  • 참조 자료형은 기본 자료형과 달리 메서드를 가질 수 있다.
  • 참조 자료형의 기본값은 null이다.
    • 따라서 참조형 객체가 초기화되지 않으면 nullPointerException이 발생한다.
  • 기본 자료형의 기본값은 위 를 참고하자.

참고문헌