티스토리 뷰

반응형

NullPointException

자바에서 Null이 들어 있는 데이터를 다룰 때, NullPointException을 발생시킬 가능성을 내포 하고 있어서 항상 주의해야 합니다. 아래 코드 처럼 null로 선언된 문자열(String) 값의 길이를 출력할 때 Exception이 발생합니다.

public static void main(String[] args) {
    String str = null;//외부 입력값이 null로 들어 온 경우로 가정합니다.
    System.out.println(str.length());
}
//실행결과
Exception in thread "main" java.lang.NullPointerException

만약 Exception을 발생시키지 않고 싶다면 아래와 같은 방어적 코딩을 필수로 진행해야 합니다.

public static void main(String[] args) {
    String str = null;//외부 입력값이 null로 들어 온 경우로 가정합니다.
    if(str == null){
        System.out.println(0);
    }
    else {
        System.out.println(str.length());
    }

    //실행결과 0
}

Null 처리를 위한 코드가 길게 자리를 차지하고, 본래의 로직에 집중할 수 없게 됩니다.

Optional

null 처리를 간편하게 하기 위해서 자바8에 Optional 클래스가 추가 되었습니다. Optional은 데이터를 담고 있는 상자 같은 역할을 하게 되는데, Optional을 이용하면 위와 같은 방어적 코딩을 아래와 같이 진행 할 수 있습니다.

String str = null;//외부 입력값이 null로 들어 온 경우로 가정합니다.
Optional<String> strOptional = Optional.ofNullable(str);
System.out.println(strOptional.orElse("").length());

Optional.empty로 선언하면 null로 선언한 것과 다름 없습니다. 하지만 데이터를 가져올 때 orElse() 메소드로 가져오고 orElse() 메소드의 인자로 기본값을 주게 되면 null인 데이터의 경우 기본값으로 변환됩니다. NullPointException발생의 위험이 사라지게 되고, 코드도 훨씬 간결해집니다.

Optional 클래스 객체 생성하는 메소드

  • Optional.empty()  - 데이터가 없는 Optional 객체를 생성
  • Optional.ofNullable(입력데이터) - 입력데이터에 null이 들어 올 수 있는 가능성이 있는 Optional 객체 생성
  • Optional.of(입력데이터) - 입력데이터에 null이 들어 올 수 없는 Optional 객체 생성

Optional 클래스 객체 데이터 꺼내오는 메소드

  • get() - 데이터를 가져오고, 데이터가 없는 경우 null을 반환
  • orElse(기본값) - 데이터를 가져오고, 데이터가 없는 경우 인자로 들어간 기본값을 반환
  • orElseGet(기본값을 반환해 줄 람다식) - 데이터를 가져오고, 데이터가 없는 경우 인자로 들어간 람다식의 로직으로 기본값을 만들어서 반환
  • Supplier<String> stringSupplier = new Supplier<String>() {
        @Override
        public String get() {
            return "기본값";
        }
    };
    
  • orElseThrow(예외를 반환해 줄 람다식) - 데이터를 가져오고, 데이터가 없는 경우 인자로 들어간 예외를 발생
  • Supplier<Exception> exceptionSupplier = new Supplier<Exception>() {
        @Override
        public Exception get() {
            return new Exception();
        }
    };
    

참고 도서 - 자바의 신 (이상민 저자)

반응형
댓글