optional 객체

Optional 객체는 NPE가 발생하지않도록 하기위해 사용한다.


public class Optional_test {

   public static void main(String[] args) {
		
	Optional<String> stropt = Arrays.asList("dsg", "kmb").stream().findFirst();	//   .findFirst() : 먼저나온것을 가져온다
		
	// 1)  .get()  :  Optional 객체에서 값을 가져올때
	System.out.println("1) stropt : " + stropt.get());
		
	// 2)  .orElseGet()  :  Optional 객체에 값에 상관없이 새 객체로 생성할때
	System.out.println("2) stropt : " + stropt.orElseGet(String::new)); 
		
	// 3) .orElseThrow()  :  null을 허용하지않을때 null이 넘어올경우 발생시킬 예외를 지정해줄때
	System.out.println("3) stropt : " + stropt.orElseThrow(IllegalArgumentException::new));  
	
	// 4-1)  .of()  :  특정값을 보낼때 NPE 발생할수있음  vs  ofNullable(), ifPresent()
      //Optional.of(null).ifPresent(s -> System.out.println(s));
		
	// 4-2) ofNullable()  :  null이 있더라도 NPE 발생하지않고 아무것도 안나옴  -->  즉 null 이 발생할수도있는 값이 들어올때 방어로직으로 사용 
	Optional.ofNullable(null).ifPresent(s -> System.out.println(s));		// 아무값도 안나옴(빈공간)
		
	// 4-3) .ofNullable()  :  ofNullable()내부의 매개변수값이 null 이면  -->  Optional.empty
	String str = null;
	var str1 = Optional.ofNullable(str);		
	System.out.println("4-3) str1 : " + str1);		// str1 : Optional.empty
		
	// 4-3) ofNullable().orElse()  :  ofNullable() 내부의 매개변수값이 null이라면 .orElse() 메서드 활용해서  어떤 메세지를 나오게 할지 정함
	var str2 = Optional.ofNullable(str).orElse("null");
	System.out.println("4-3) str2 : " + str2);
		
	// 4-4) Wrapper 클래스는 null 값을 허용
	Integer int1 = null;
	var integer = Optional.ofNullable(int1).orElse(0);
	System.out.println("4-4) integer : " + integer);
		
	}
}

결과는 다음과 같다

좋은 웹페이지 즐겨찾기