Home > 2024 > Java > ☕️[Java] 래퍼 클래스 - 기본형의 한계 2

☕️[Java] 래퍼 클래스 - 기본형의 한계 2
Java Programming Language

래퍼 클래스 - 기본형의 한계 2

기본형과 null

기본형은 항상 값을 가져야 합니다.
하지만 때로는 데이터가 ‘없음’이라는 상태가 필요할 수 있습니다.
다음 코드를 작성해봅시다.

package lang.wrapper;

public class MyIntegerNullMain0 {

  public static void main(String[] args) {
    int[] intArr = {-1, 0, 1, 2, 3};
    System.out.println(findValue(intArr, -1)); // -1
    System.out.println(findValue(intArr, 0));
    System.out.println(findValue(intArr, 1));
    System.out.println(findValue(intArr, 100)); // -1
  }

  private static int findValue(int[] intArr, int target) {
    for (int value : intArr) {
      if (value == target) {
        return value;
      }
    }
    return -1;
  }
}
  • findValue()는 배열에 찾는 값이 있으면 해당 값을 반환하고, 찾는 값이 없으면 -1을 반환합니다.
  • findValue()는 결과로 int를 반환합니다.
    • int와 같은 기본형은 항상 값이 있어야 합니다.
      • 여기서도 값을 반환할 때 값을 찾지 못하면 숫자 중 하나를 반환해야 하는데 보통 -1 또는 0을 사용합니다.

실행 결과

-1
0
1
-1

실행 결과를 보면 입력값이 -1일 때 -1을 반환합니다.
그런데 배열에 없는 값인 100을 입력해도 같은 -1을 반환합니다.
입력값이 -1일 때를 생각해보면, 배열에 -1 값이 있어서 -1을 반환한 것인지, 아니면 -1 값이 없어서 -1을 반환한 것인지 명확하지 않습니다.

객체의 경우 데이터가 없다는 null이라는 명확한 값이 존재합니다.

다음 코드를 작성해봅시다.

package lang.wrapper;

public class MyIntegerNullMain1 {

  public static void main(String[] args) {
    MyInteger[] intArr = {new MyInteger(-1), new MyInteger(0), new MyInteger(1)};
    System.out.println(findValue(intArr, -1)); // -1
    System.out.println(findValue(intArr, 0));
    System.out.println(findValue(intArr, 1));
    System.out.println(findValue(intArr, 100)); // null
  }

  private static MyInteger findValue(MyInteger[] intArr, int target) {
    for (MyInteger myInteger : intArr) {
      if (myInteger.getValue() == target) {
        return myInteger;
      }
    }
    return null;
  }
}

실행 결과

-1
0
1
null
  • 앞서 만든 MyInteger 래퍼 클래서를 사용했습니다.
  • 실행 결과를 보면 -1을 입력했을 때는 -1을 반환합니다.
  • 100을 입력했을 때는 값이 없다는 null을 반환합니다.

기본형은 항상 값이 존재해야 합니다.
숫자의 경우 0, -1 같은 값이라도 항상 존재해야 합니다.
반면에 객체인 참조형은 값이 없다는 null을 사용할 수 있습니다.
물론 null 값을 반환하는 경우 잘못하면 NullPointerException이 발생할 수 있기 때문에 주의해서 사용해야 합니다.