Java/이론 및 문법

[Java] 자료형(Data Type) 이해하기 : 기본 / 참조 자료형, 래퍼 클래스

adjh54 2023. 2. 21. 20:37
728x170
해당 글에서는 자료형 중 기본 자료형, 참조 자료형, 래퍼 클래스에 대해 이해하고 각각을 비교하여 이해를 돕기 위한 목적으로 작성을 하였습니다.

 

 

1) 기본 자료형(Primitive Data Type)


💡 데이터를 저장하기 위해 사용되는 자료형을 의미하며 변수에 “실제 값”을 가지는 것을 의미합니다.

 

[참고] 기본 자료형에 대한 구조 

 

분류타입크기기본값범위
정수형byte1byte0-128 ~ 127
정수형short2byte0-32768 ~ 32767
정수형int4byte0-2147483648 ~ 2147483647
정수형long8byte0L- 9223372036854775808 ~ 9223372036854775807
문자형char2byte‘\u0000’0 ~ 65535 (\u0000 ~ \uffff)
실수형float4byte0.0fsingle-precision 64-bit IEEE 754 floating point
실수형double8byte0.0ddouble-precision 64-bit IEEE 754 floating point
논리형boolean1bytefalsetrue, false

 

[더 알아보기]

💡 1 바이트(byte)는 8 비트(bit)입니다.

 
 

2) 참조 자료형 (Reference Data Type)


 💡 실제 값을 갖는것이 아닌 데이터가 저장된 메모리의 “주소 값”을 가지는 자료형이며, 해당 값은 객체를 참조하는 변수 타입을 의미합니다.

 
 

💡 [참고] 대표적인 참조자료형 종류 : 해당 내용뿐만 아니라 다양한 참조 자료형이 존재합니다.
참조 자료형설명
String문자열을 저장하는 데 사용되는 클래스입니다.
ArrayList동적 배열을 나타내는 클래스입니다.
HashMap키-값 쌍을 저장하는 데 사용되는 클래스입니다.
HashSet고유한 요소를 저장하는 데 사용되는 클래스입니다.
LinkedList연결 리스트를 나타내는 클래스입니다.
Queue큐를 나타내는 인터페이스입니다.
Stack스택을 나타내는 클래스입니다.

 
 

💡[참고] 해당 예시에서 Person이라는 클래스가 존재합니다. 이 클래스는 다른곳에서 new 연산자를 사용하여 생성되었으며, person1 변수는 Person 객체를 참조하는 변수를 참조 자료형이라고 합니다.
class Person {
    String name;
    int age;
}

Person person1 = new Person();
person1.name = "John";
person1.age = 25;

 

💡 기본 자료형과 참조 자료형의 비교
분류기본 자료형(Primitive Data Type)참조 자료형(Reference Data Type)
종류숫자, 문자, 논리값 등클래스, 인터페이스, 배열, 열거 타입 등
null 초기화 가능여부초기화 불가능초기화 가능
숫자간의 산술연산 가능여부산술연산 가능산술연산 불가능
제너릭 타입내 사용 가능여부사용 불 가능사용 가능

 
 

3) 래퍼 클래스(Wrapper Class)


💡 래퍼 클래스(Wrapper Class)

- 기본 자료형을 ‘객체(Object)’로 다루기 위해서 비 객체를 객체화 시키는 클래스로 “기본타입의 객체화”를 의미합니다. 즉 기본 자료형을 클래스로 감싸는 것입니다.

 

1. 기본자료형의 래퍼 클래스


분류기본자료형 타입(Primitive Type) 래퍼 클래스(Wrapper Class)
진위형booleanBoolean
문자형charCharacter
정수형byteByte
정수형shortShort
정수형intInteger
정수형longLong
실수형floatFloat
실수형doubleDouble

 

2. 박싱(Boxing)과 언박싱(Unboxing)


출처 : http://www.tcpschool.com/java/java_api_wrapper

 
 

1. 박싱(Boxing)

💡 기본 타입을 래퍼 클래스의 인스턴스로 변환하는 과정을 박싱(Boxing)이라고 합니다.
/*
 * Java 1.5 이상 버전의 경우 - 오토 박싱 (Auto Boxing)으로 별도의 수동적 처리 없이 Boxing 된다.
 * 기본 자료형 -> 래퍼 클래스 변환
 */
// [Java v1.5이상] 박싱 (Boxing) - 기본 자료형 -> 래퍼 클래스
int aInt = 3;
int bInt = 4;
Integer aInteger = aInt;
Integer bInteger = bInt;
Log.debug(aInteger, bInteger);

/*
 * Java 1.5 미만 버전의 경우 - 박싱(Boxing)으로 수동적인 처리로 Boxing 해야했다.
 * 기본 자료형 -> 래퍼 클래스 변환
 */
int aInt2 = 3;
int bInt2 = 4;
Integer aInteger2 = new Integer(aInt2);
Integer bInteger2 = new Integer(bInt2)
Log.debug(aInteger2, bInteger2);

 
 

2. 언박싱(Unboxing)

💡 래퍼 클래스의 인스턴스에 저장된 값을 다시 기본 타입으로 꺼내는 과정을 언박싱(Unboxing)이라고 합니다.
/*
 * Java 1.5 이상 버전의 경우 - 오토 언박싱 (Auto UnBoxing)으로 별도의 수동적 처리 없이 UnBoxing 된다.
 * 래퍼 클래스 -> 기본 자료형
 */
Integer cInteger = 3;
Integer dInteger = 4;
int cInt = cInteger;
int dInt = dInteger;
Log.debug(cInt, dInt);

/*
 * Java 1.5 미만 버전의 경우 - 박싱(UnBoxing)으로 수동적인 처리로 UnBoxing 해야했다.
 * 래퍼 클래스 -> 기본 자료형
 */
Integer cInteger = new Integer(3);
Integer dInteger = new Integer(4);
int cInt = cInteger.intValue();
int dInt = dInteger.intValue();

 

분류기본 자료형 (Primitive Type) 래퍼 클래스(Wrapper Class)오토 언박싱
진위형booleanBooleana.booleanValue()
문자형charCharactera.charValue()
정수형byteBytea.byteValue()
정수형shortShorta.shortValue()
정수형intIntegera.intValue()
정수형longLonga.longValue()
실수형floatFloata.floatValue()
실수형doubleDoublea.doubleValue()

 

[더 알아보기]

💡오토 언박싱(Auto Unboxing) 이란?

- 래퍼 클래스의 인스턴스에 저장된 값을 다시 기본 타입으로 꺼내는 과정을 자동으로 처리해주는 기능입니다. 이 기능은 Java 1.5 이상 버전에서 지원됩니다. 따라서 별도의 수동적인 처리 없이 래퍼 클래스를 기본 자료형으로 변환할 수 있습니다.

 
 

4) 기본 자료형(Primitive Data Type)과 래퍼 클래스(Wrapper Class)의 비교


1. 비교 요약


분류기본 자료형래퍼 클래스
사용 목적간단하고 빠르게 처리가 필요한 경우객체로 다루어야 하는 경우
값 비교 방법== 연산자를 이용하여 비교한다equals() 메소드를 사용하여 비교한다
처리 속도빠르다느리다
메모리 사용량작다크다
null 초기화 가능 여부불가능가능
외부에서 변경 가능 여부가능불가능
숫자의 산술연산 가능 여부가능불가능
제너릭 타입 내에서 사용 가능 여부불가능가능

 

2. 비교 상세


1. null로 초기화 가능여부


💡 기본 자료형은 null로 초기화가 불가능하며 래퍼 클래스의 경우는 null로 초기화가 가능합니다.
int num1 = null;    // Wrap using 'Integer.parseInt()'
Integer num2 = null;

 
 

2. 숫자의 산술연산 가능 여부


💡 기본 자료형(int)는 숫자의 산술연산이 가능하지만 래퍼 클래스(Integer)의 경우는 산술연산이 불가능합니다.
int a = 3;
int b = 4;
log.debug("산술 연산 테스트 :" + a + b);

Integer c = 3; // 
Integer d = 4;
log.debug("산술 연산 테스트 :" + c + d);

 
 

3. 제너릭 타입 사용 가능여부


💡 기본 자료형(int)는 제너릭 타입내에 사용이 불가능 하지만 래퍼 클래스(Integer)의 경우에는 제너릭 타입으로 사용이 가능하다.
ArrayList<int> intArrayList = new ArrayList<int>();     // replace 'int' with 'java.lang.Integer'
ArrayList<Integer> integerArrayList = new ArrayList<Integer>();

 
 
 

💡 기본자료형과 래퍼클래스간의 변환방법은 아래의 글에서 이어집니다.

[Java/Short] 기본 자료형과 래퍼 클래스의 박싱(Boxing)과 언박싱(Unboxing) 방법

해당 페이지에서는 자주 사용하는 개발 패턴으로 "기본 자료형을 래퍼 클래스로 변환(Boxing)하거나 래퍼 클래스를 기본 자료형으로 변환(Unboxing)”하는 방법에 대해서 공유합니다. 1) 기본 자료형

adjh54.tistory.com

 

 
 
오늘도 감사합니다. 😀
 
 

그리드형