Java 래퍼 필요성 - 기본형 그리고 Null

기본형 타입 변수는 값을 필수로 갖고 있어야 한다.
하지만 개발 시 데이터가 없다고 "없음" 표시 또는 하이픈 처리가 필요할 때 기본형 타입 문제로 코드 복잡성이 커질 수 있다.


int i1;
System.out.println(i1);

int 형 변수에 값을 할당하지 않고 사용하면 컴파일 오류가 발생한다.

그리고 final 키워드 붙은 타입은 필수로 값 할당 해야 한다. 실제 개발에는 누락될 수 있고 반환 되는 예외 코드도 혼동을 일으켜 코드가 복잡할 수 있다.

findNum 메소드

  • 배열에 있는 값 중 일치하는 값이 있는 경우 반환한다.
  • 배열에 있는 값 중 일치하는 값이 없는 경우 -1 반환한다.
public class Main {
    public static void main(String[] args) {
        int[] arr = {-1, 0, 10, 20, 30, 40};
        System.out.println(findNum(arr, -1));
        System.out.println(findNum(arr, 0));
        System.out.println(findNum(arr, 10));
        System.out.println(findNum(arr, 100));
    }

    private static int findNum(int[] arr, int target) {
        for (int v : arr) {
            if (v == target) {
                return v;
            }
        }
        return -1;
    }
}

-1
0
10
-1

예제 코드를 살펴보면 배열에서 -1 값과 비교해 값이 있으므로 -1 값 반환하였다.
이후 100 값과 비교해 없으므로 예외로 값 -1 반환하고 있다.
이처럼 값이 없는 경우 기본 형 숫자 표현으로 혼동이 발생하였다.

대응 방안으로는 객체를 사용해 반환되는 null 값을 사용하는 방법이다.


Tint(Wrapper) 클래스 사용하기

public class Tint {
    private final int value;

    public Tint(int value) {
        this.value = value;
    }

    public int getValue() {
        return value;
    }

    @Override
    public String toString() {
        return String.valueOf(value);
    }
}

기본형 변수 대신 Tint 래퍼로 사용한다.

Main.class

public class Main {
    public static void main(String[] args) {
        Tint[] arr = {new Tint(-1), new Tint(0), new Tint(10), new Tint(20), new Tint(30), new Tint(40)};
        System.out.println(findNum(arr, -1));
        System.out.println(findNum(arr, 0));
        System.out.println(findNum(arr, 10));
        System.out.println(findNum(arr, 100));
    }

    private static Tint findNum(Tint[] arr, int target) {
        for (Tint v : arr) {
            if (v.getValue() == target) {
                return v;
            }
        }
        return null;
    }
}

-1
0
10
null

값을 못 찾을경우 명확하게 null 값으로 표기해준다.

💡
null 반환에 주의할 점은 NullPointerException 발생할 수 있으므로 조심히 사용한다.