티스토리 뷰

728x90
반응형

목차

     

    자바에서 기본 자료형(primitive type)은 null을 가질 수 없으며,

     

    이는 자바의 설계 철학, 그리고 메모리 관리 방식에 기인한다.

     

    구체적으로 이해하기 위해서는 기본 자료형과 객체 참조형(reference type)의 차이점을 포함해

     

    자바의 설계 철학과 메모리 관리 방식까지 살펴볼 필요가 있다.

     

    간결하게 요약해 보자.

     

    기본 자료형 vs. 참조 자료형

     

     

    기본 자료형

     

    기본 자료형은 자바에서 가장 기본적인 데이터 타입이며, 값 자체를 저장한다.

     

    아래와 같은 8개의 기본 자료형이 있다.

     

    • 정수형: byte, short, int, long
    • 실수형: float, double
    • 문자형: char
    • 논리형: boolean

    기본 자료형은 메모리에서 고정된 크기의 공간을 차지하며, 실제 데이터 값을 직접 저장한다.

     

    참조 자료형

     

    참조 자료형을 객체의 주소를 저장한다.

     

    이는 클래스, 배열, 인터페이스 등의 인스턴스를 가리키는데, 예를 들어 String, Integer 등이 있다.

     

    참조 자료형은 힙 메모리 영역에 객체를 저장하고 스택 메모리 영역에는 객체의 주소(참조)를 저장한다.

     

    기본 자료형이 null을 가질 수 없는 이유

     

    메모리 관리와 성능

     

    기본형은 값 자체를 저장하기 때문에 메모리에서 고정된 크기의 공간을 차지한다.

     

    이는 메모리 접근이 빠르고 효율적인 이유이다.

     

    만약 기본 자료형에 null을 허용한다면, 메모리에서 추가적인 검사와 처리가 필요하게 되어 성능에 부정적인 영향을 끼칠 수 있다.

     

    자바의 설계 원칙

     

    자바는 타입 안정성을 중시하는 언어이다.

     

    기본 자료형은 값 자체를 직접 저장하기 때문에 null 값을 허용하지 않음으로써 타입 안정성을 보장한다.

     

    기본형이 null 값을 가질 수 있다면 NPE와 같은 에러가 발생할 가능성이 높아진다.

     

    단순성과 직관성

     

    기본 자료형은 단순한 값으로 취급된다.

     

    예를 들어 'int'는 정수 값을 저장하며, 'boolean'은 참 또는 거짓을 저장한다.

     

    기본 자료형에 null 값을 허용하면 이와 같은 단순성과 직관성이 훼손된다.

     

    의미가 불명확해지고 가독성이 떨어질 수 있다는 뜻이다.

     

    기본 자료형의 래퍼 클래스

     

    자바는 대신 기본 자료형을 객체처럼 다룰 수 있는 래퍼 클래스를 제공한다.

     

    래퍼 클래스는 기본 자료형을 객체로 감싸 참조 자료형처럼 사용할 수 있게 해 주며, 당연히 null 값을 가질 수 있게 해 준다.

     

    • int -> Integer
    • char -> Character
    • boolean -> Boolean
    • float -> Float
    • double -> Double
    • byte -> Byte
    • short -> Short
    • long -> Long
    Integer a = null; // 가능
    int b = null; // 불가능

     

     

    박싱과 언박싱

     

    자바 5부터 오토박싱(auto-boxing)과 언박싱(auto-unboxing) 기능이 도입되어 

     

    기본 자료형과 래퍼 클래스 간의 변환이 자동으로 이루어지게 되었다.

     

    이는 기본 자료형을 래퍼 클래스로, 래퍼 클래스를 기본 자료형으로 자동 변환해 준다.

    • 오토박싱: 기본 자료형을 래퍼 클래스로 자동 변환하는 것
    int a = 10;
    Integer b = a; // 오토박싱: int -> Integer

     

    • 언박싱: 래퍼 클래스를 기본 자료형으로 자동 변환하는 것
    Integer a = new Integer(10);
    int b = a; // 언박싱: Integer -> int

     

    오토박싱과 언박싱은 기본 자료형과 참조 자료형 간의 변환을 쉽게 해 주지만, 

     

    여전히 기본 자료형은 null 값을 가질 수 없다.

     

    예를 들어, null 값을 가진 래퍼 클래스를 기본 자료형으로 언박싱하려고 하면 NPE가 발생한다.

     

    Integer a = null;
    int b = a; // 언박싱 시 NullPointerException 발생

     

    기본 자료형과 초기화

     

    기본 자료형은 객체와 다르게 자동으로 초기화된다.

     

    예를 들어, 클래스의 인스턴스 변수로 선언된 기본 자료형은 자동으로 0 또는 false로 초기화된다.

     

    class MyClass {
        int a; // 자동으로 0으로 초기화
        boolean b; // 자동으로 false로 초기화
    }

    참조 자료형의 경우는 명시적으로 초기화하지 않으면 null로 초기화된다.

    반응형
    댓글
    공지사항
    최근에 올라온 글
    최근에 달린 댓글
    Total
    Today
    Yesterday
    링크
    «   2024/10   »
    1 2 3 4 5
    6 7 8 9 10 11 12
    13 14 15 16 17 18 19
    20 21 22 23 24 25 26
    27 28 29 30 31
    글 보관함