자바의 정석 - 스트림 (4)

송용준·2023년 6월 13일

Optional< T >

  • T 타입 객체의 래퍼클래스 - Optional< T >

    필요한 이유

    1. null을 직접 다루는 것은 위험 (NullpointException)
    2. null체크. if문 필수. 코드가 지저분
    3. null을 간접적으로 다루기 위해

Optional< T > 객체 생성하기

  • Optional< T > 객체를 생성하는 다양한 방법

한 단계 더 거치게 된다.

  • null 대신 빈 Optional< T > 객체를 사용하자
Optional<String> optVal = null;							// 널로 초기화. 바람직하지 않음
Optional<String> optVal = Optional.<String>empty();		// 빈 객체로 초기화

Optional< T > 객체의 값 가져오기

  • Optional< T > 객체의 값 가져오기 - get(), orElse(), orElseGet(), orElseThrow()

  • isPresent() - Optional객체의 값이 null이면 false, 아니면 true를 반환

import java.util.Optional;
import java.util.stream.Stream;

class Java {
	public static void main(String[] args)  {	
		// int[] arr = null;
		int[] arr = new int[0];
		System.out.println("arr.length = " + arr.length);
		
		// Optional<String> opt = null;		// ok. 하지만 바람직 하지 않음
		Optional<String> opt = Optional.empty();
		// Optional<String> opt = Optional.of("abc");
		System.out.println("opt = " + opt);
		// System.out.println("opt = " + opt.get());
		
		String str = "";
		
		
//		try {
//			str = opt.get();
//		} catch (Exception e) {
//			str = "";		// 예외가 발생하면 빈문자로 초기화
//		}		// 예외 발생
		
		
		// str = opt.orElse("EMPTY");			// Optional에 저장된 값이 null이면 "" 반환
		// str = opt.orElseGet(() -> new String());
		str = opt.orElseGet(String::new);		// 위문장을 람다식으로
		System.out.println("str = " + str);
	}
}

Optionalint, OptionalLong, OptionalDouble

  • 기본형 값을 감싸는 래퍼클래스
    쓰는 이유 : 성능을 올리려고

  • Optionalint의 값 가져오기 - int getAsint()

  • 빈 Optional객체와의 비교

profile
용용

0개의 댓글