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 발생할 수 있으므로 조심히 사용한다.