<T>타입의 래퍼 클래스 - optional<T>
래퍼클래스 = Integer 나 Long 등
public final class Optional<T>{
private final T value; // T타입의 참조변수를 가지고 있다.
}
어떤 타입이든가 전부 저장할수 있다. null도 저장가능
Optional의 필드 이유
1.null을 직접 다루는것은 위험하다. nullpointException이 발생한다.
그래서 간접적으로 null을 다루이 위함이다.
2.null체크작업을 안해도 된다.
3.result null 을 하던것을 optional 객체에 null을 넣어서 반환.
optional 객체 생성하기
String str = "abc";
Optional<String> optval = optional.of(str);
Optional<String> optval = optional.of("abc");
Optional<String> optval = optional.of(null);
//optional 에 이렇게 그냥 null을 넣으면 nullPointException 이 발생한다.
Optional<String> optval = optional.ofNullable(null);
//null을 넣을땐 꼭 ofNullable로 넣어줘야 한다.
null대신 빈 Optional<T> 객체를 사용하자.
Optional<String> optval = null; //가능은 하나 바람직하지 ㅇ낳음
Optional<String> optval = Optional<String>empty() //빈객체로 초기화
Optional<T> 객체의 값 가져오기
Optional<String> optval = optional.of("abc");
String str1 = optval.get(); //optval에 지정된 값을 반환 , null 이면 예외 발생
String str2 = optval.orElse(); // optval에 지정된 값이 null이면 ""을 반환
String str3 = optval.orElseGet(String::new); // 람다식 사용가능 () -> new String();
String str4 = optval.orElesThrow (NullpointException::new) //null이면 에러 발생
isPresent() = Optional객체의 값이 null 이면 false , 아니면 true를 반환
if(optional.ofNullable(str).isPresent()) {}
ifPersent = optional 객체값이 null이 아닐때만 작업 수행
OptionalInt , OptionalLong , OptionalDouble
기본형 값을 감싸는 레퍼클레스
public final class OptionalInt{
private final boolean isPersent; //값이 저장되어 있다면 true
private final int value; //int 타입의 변수
}
Optional<T> 도 여도 상관없지만
다운캐스팅등을 생략할수 있어서 특정 타입의 Optional을 사용
OptionalInt값 가져오기 int getAsInt()
각 타입별로 값을 가져오는 메서드가 다르다
optional <T> T get();
optionalInt int getAsInt();
optionalLong long getAsLong();
optionalDouble double getAsDouble();
빈 Optional객체와의 비교
OptionalInt opt = optionalInt.of(0) // optionalInt에 0을 저장
OptionalInt opt2 = optionalInt.empty() ; //optionalInt에 0저장
isPresent 가 0인지 아무것도 없는지 구별해준다.
'JAVA' 카테고리의 다른 글
스트림9 최종연산 reduce() (0) | 2023.03.16 |
---|---|
스트림8 최종연산 forEach() (0) | 2023.03.16 |
스트림7 flatMap() 스트림의 스트림을 스트림으로 변환 (0) | 2023.03.16 |
스트림6 peek() 스트림소모 없이 요소 조회 (0) | 2023.03.16 |
스트림5 map() 스트림의 내용 변환 (0) | 2023.03.16 |