본문 바로가기
카테고리 없음

[Java] 데이터 타입, Primitive vs Reference, Wrapper class

by breezyday 2023. 1. 2.

1. 데이터 타입(자료형)

Java에는 크게 기본형 타입과, 참조형 타입이 있다.

2. 기본형 타입 (Primitive Data Types)

Java의 기본형 타입은 Java에서 Pre-defined data type으로 8가지가 있다.

구분 Data Type 길이
(byte)
기본값 비고
정수형 byte 1 0  
  short 2 0  
  int 4 0  
  long 8 0  
실수형 float 4 0.0  
  double 8 0.0  
문자형 char 2 \u0000 문자 한개, 유니코드 타입 저
문자열을 다루는 타입은 기본형 타입이 아니다.
논리형 boolean 1 false true, false : 참, 거짓을 표현
java에서 데이터를 다루는 최소단위는 1byte이다.

3. 참조형 타입 (Reference Data Types)

Java의 참조형 타입은 User-defined data types으로 기본형에 속하지 않는 데이터 형이다. 대표적인 예는 클래스(class), 배열(array), 인터페이스(interface), 문자열(String/immutable) 등이 있다. 

 

참조형 변수는 데이터가 저장된 메모리의 주소 값을 저장하는 변수이다. 참조형 타입의 변수가 선언되면 사용하기 위해 메모리 영역을 할당해야 한다. new 키워드를 사용하여 JVM(Java Virtual Machine)에서 관리하는 메모리의 Heap 영역에 할당하고 이 메모리의 주소를 변수에 저장하여 사용한다. 참조형 변수는 기본값이 null이다.

4. Integer vs int : Wrapper class

Java에서 Integerint 데이터 타입wrapper class이다. Wrapper class기본형 데이터 타입인 int를 Object인 Integer로 변환하는 클래스이다. Wrapper class는 기본형 타입의 값을 저장하고 있으며, 기본형 타입을 처리하기 위한 다양한 메서드를 지원하고 있다. 두 데이터 타입 간에는 묵시적인 형 변환(Autoboxing, Unboxing : Java 1.5 이상)이 이루어져 자유롭게 대입 및 연산이 가능하다.

public class Main {
    public static void main(String args[]) {
    
        Integer a = new Integer("123");       // 문자열을 바탕으로 정수를 생성
        int     b = Integer.valueOf("123");   // String을 Integer로 변환하는 메서드
        
        // Autoboxing and Unboxing
        int     c = a;
        Integer d = c;
        
        // 서로 다른 데이터 타입의 자동 변환 및 연산
        System.out.print(a + new Float("10.1"));
        
        // 다양한 메서드 지원
        String  bin = Integer.toBinaryString(123);
        String  hex = Integer.toHexString(123);
        
        System.out.print(bin + "\n" + hex);
    }
}
// 결과
133.1
1111011
7b

Java 기본형 타입 크기 출력

/*
 * Java Primitive Data Type의 
 * - 최대 최소값과 byte크기, bit크기를 출력하시오.
 * - Wrapper class를 사용하면 간단히 해결할 수 있다.
 */
public class Java003 {
    public static void main(String args[]) {
        
        // 정수형 : byte, short, int, long
        // - java는 unsigned(부호없는) 형이 없다.
        System.out.println("byte 크기  : " 
                + Byte.BYTES + "bytes," 
                + Byte.SIZE + "bits  "
                + Byte.MIN_VALUE + "~" + Byte.MAX_VALUE);

        System.out.println("short 크기 : " 
                + Short.BYTES + "bytes," 
                + Short.SIZE + "bits "
                + Short.MIN_VALUE + "~" + Short.MAX_VALUE);

        System.out.println("int 크기   : " 
                + Integer.BYTES + "bytes," 
                + Integer.SIZE + "bits "
                + Integer.MIN_VALUE + "~" + Integer.MAX_VALUE);

        System.out.println("long 크기  : " 
                + Long.BYTES + "bytes," 
                + Long.SIZE + "bits "
                + Long.MIN_VALUE + "~" + Long.MAX_VALUE);
        System.out.println();
        
        // 실수형 : float, double
        System.out.println("float 크기 : " 
                + Float.BYTES + "bytes," 
                + Float.SIZE + "bits "
                + Float.MIN_VALUE + "~" + Float.MAX_VALUE);

        System.out.println("double크기 : " 
                + Double.BYTES + "bytes," 
                + Double.SIZE + "bits "
                + Double.MIN_VALUE + "~" + Double.MAX_VALUE);
        System.out.println();

        // 문자형 : char
        // - 예외적으로 문자형만 unsigned short의 범위를 가진다.
        // Wrapper 클래스를 사용하면 간단히 알아낼 수 있다.
        System.out.println("char 크기  : " 
                + Character.BYTES + "bytes," 
                + Character.SIZE + "bits "
                // 숫자 범위로 표현하기 위해 (int)로 캐스팅함
                // 범위는 unsigned short
                + (int)Character.MIN_VALUE + "~" + (int)Character.MAX_VALUE);
        System.out.println();

        // 논리형 : boolean
        // - BYTES, SIZE, MIN_VALUE, MAX_VALUE를 지원하지 않음
        System.out.println("boolean  : " 
                + Boolean.TRUE + " 참," 
                + Boolean.FALSE + " 거짓 ");
        System.out.println();
    }        
}
// 결과
byte 크기  : 1bytes,8bits  -128~127
short 크기 : 2bytes,16bits -32768~32767
int 크기   : 4bytes,32bits -2147483648~2147483647
long 크기  : 8bytes,64bits -9223372036854775808~9223372036854775807

float 크기 : 4bytes,32bits 1.4E-45~3.4028235E38
double크기 : 8bytes,64bits 4.9E-324~1.7976931348623157E308

char 크기  : 2bytes,16bits 0~65535

boolean   : true 참,false 거짓

5. 심화학습

https://www.geeksforgeeks.org/data-types-in-java/

https://www.geeksforgeeks.org/primitive-data-type-vs-object-data-type-in-java-with-examples/

https://www.geeksforgeeks.org/difference-between-an-integer-and-int-in-java/

https://www.geeksforgeeks.org/autoboxing-unboxing-java/

https://www.geeksforgeeks.org/wrapper-classes-java/

 

 

 

 

 

댓글