티스토리 뷰
반응형
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 "기본값";
}
};
Supplier<Exception> exceptionSupplier = new Supplier<Exception>() {
@Override
public Exception get() {
return new Exception();
}
};
참고 도서 - 자바의 신 (이상민 저자)
반응형
'Java' 카테고리의 다른 글
For-each문은 For문 보다 얼마나 빠를까? (5) | 2019.01.25 |
---|---|
자바의 Default Method (디펄트 메소드) (3) | 2019.01.21 |
Java 예외처리하기 (0) | 2018.12.18 |
Java 프로그램 연산 속도 계산하기 (currentTimeMillis / nanoTime) (0) | 2018.12.17 |
Java에서 정규표현식 사용하기 (0) | 2018.12.13 |
댓글