기억의 실마리
2024. 9. 18. 13:54

Data Type

자료의 "형"을 뜻하며 말 그대로 데이터의 타입이다.

필자는 Frontend가 주력인 개발자로서 Javascript를 기본으로

개발을 해왔기 때문에 Typescript 를 활용하지 않는다면

모든 객체(함수, obj, arr 등)와 변수에 별도로 타입을 지정할 일이 없다.

 

하지만 JAVA 언어를 사용하기 위해서는 모든 클래스에

타입 지정이 필수이며, 사실 Javascript를 제외한다면 대다수의

언어에서 타입지정은 필수이다.

 

JAVA에서 정의하는 타입은 Javascript에서 정의하는 타입과 크게

다르지 않고 일부 개념을 제외하면 거의 동일한 구조이다.

Javascript에서 크게 원시타입, 참조타입으로 구분한다면

JAVA에서는 일반형, 참조형으로 구분하고 있다.

 

일반형 (Primitive Type)

Javascript에서는 원시타입으로 불리는 Boolean, Number 등과 비슷한 형태로

메모리상에서 실제 값을 가지고 있는 자료형을 말하며 아래와 같은 일반형이 존재한다.

 

- 기본형 타입의 특징

  1. 소문자로 구성 되어있다.
  2. 변수에 선언과 동시에 초기화되어 null이 아닌 초기값이 존재한다.
  3. 비객체 타입(참조형이 아님)으로 모두 null을 할당받을 수 없다.
  4. 저장공간에 실제 값을 가지고 있다.
  5. 모든 타입은 메모리 Stack에 저장된다.

 

- 오해할 수 있는 문자형 타입

문자형 타입중에 String과 char가 존재한다.

진정한 기본형인 문자형 타입은 char이며,

String은 JAVA에서 문자열을 좀 더 편하게 사용할 수 있도록

제공하는 참조형 타입이다. 그렇기 때문에 타입 구성이

소문자로 되어있지 않고 대문자로 시작하는 "String"인 것이다.

 

  타입 할당 메모리 크기 기본 값 범위
논리형 boolean 1byte false true, false
문자형 char 2byte (Unicode) '\u0000' 0 ~ 65,535
정수형 int (default) 4byte 0 -2,147,483,648 ~ 2,147,483,647
byte 1byte 0 -128 ~ 127
short 2byte  0 -32,768 ~ 32,767
long 8byte 0L -9,223,372,036,854,775,808
~ 9,223,372,036,854,775,807
실수형 float 4byte 0.0F (3.4 X 10-38) ~ (3.4 X 1038) 의 근사값
double (default) 8byte 0.0 (1.7 X 10-308) ~ (1.7 X 10308) 의 근사값

 

  • 일반형 예제 소스코드
class PrimitiveType() {
	int number;
    boolean isBoolean;
    double isDouble;
}

// number = 0
// isBoolean = false
// isDouble = 0.0

 

 

참조형 (Reference Type)

참조형 타입은 클래스, 배열, 열거형 타입 등을 참조형이라 하며,

변수에 할당되어 메모리상에 존재할 때 null 또는 객체가 가지는

참조가능한 주소를 할당할 수 있다.

 

- 참조형 타입의 특징

  1. 기본형과 다르게 실제 값이 아닌 데이터가 저장 되어있는 주소를 가진다.
  2. 참조형 내부의 값은 메모리 내부 힙(heap)에 저장하고 참조형 데이터가 가진 주소를 통해 접근가능하다.
  3. 참조형 변수는 null로 초기화 가능하고 이는 GC(Garbage Collection) 대상으로 이어질 수 있다.

 

타입 기본 값 할당 메모리 크기
배열 (Array) null 4byte
(주소만을 담기 때문)
열거 (Enumeration) null
클래스 (Class) null
인터페이스 (Interface) null

 

 

  • 참조형 예제 소스코드
class ReferenceType() {
	String title = "Title";
    String[] contents = new String[] { "배열임", "이것은 참조형" }
    Date date = new Date();
    Data data = new Data();
}

// title = "Title"
// contents = main.ref@682a0b20 (패키지경로@참조주소)
// date = main.ref@682a0b21 (패키지경로@참조주소)
// data = main.ref@682a0b22 (패키지경로@참조주소)

class Data() {
	int value;
    char content
}

 

 

마치며...

Javascript를 주력으로 개발을 하다보니 평소 자료형(Data Type)에 대해서 깊게 생각하지 못했던 것 같다. 타 언어에도 관심을 가지고 배우며 점점 개발자로서의 시야도 넓어지는 것 같다. 이번에 JAVA를 공부하면서 Javascript가 얼마나 편한 언어인지 깨닫는 계기가 되었다... JS 최고.