[Java] Type
Int vs Integer
- Int
자료형
산술 연산 가능
null 로 초기화 할 수 없음
- Integer
Wrapper 클래스
unboxing하지 않으면 산술 연산이 불가능 하지만, null값을 처리할 수 있다.
Boxing : 자료형 -> Wrapper 클래스
Unboxing : Wrpper 클래스 -> 자료형
/* 자바에서는 거의 자동으로 변환해줌
Optional
java.util.Optional
이러한 Optional 객체를 사용하면 예상치 못한 NullPointerException 예외를 제공되는 메소드로 간단히 회피할 수 있다.
즉, 복잡한 조건문 없이도 널(null) 값으로 인해 발생하는 예외를 처리할 수 있게 됩니다.
라이브러리 메서드가 반환할 결과값이 없음을 명백하게 표현할 필요가 있는 곳에서 제한적으로 사용 할 수 있는 메커니즘
메서드가 반환할 결과값이 ‘없음’을 명백하게 표현할 필요가 있고, null을 반환하면 에러를 유발할 가능성이 높은 상황에서 메서드의 반환 타입으로 사용하는 것이 주된 목적.
Use
orElse()
저장된 값이 존재하면 그 값을 반환하고, 값이 존재하지 않으면 인수로 전달된 값을 반환함.
orElseGet()
저장된 값이 존재하면 그 값을 반환하고, 값이 존재하지 않으면 인수로 전달된 람다 표현식의 결괏값을 반환함.
orElseThrow()
저장된 값이 존재하면 그 값을 반환하고, 값이 존재하지 않으면 인수로 전달된 예외를 발생시킴.
기본 타입 Optinal클래스
IntStream 클래스와 같이 기본 타입 스트림을 위한 별도의 Optional클래스를 제공함.
OptionalInt OptionalLong OptionalDouble
Optiopnal
Example
// 안 좋음
Optional<Member> member = ...;
if (member.isPresent()) {
return member.get();
} else {
return null;
}
// 좋음
Optional<Member> member = ...;
return member.orElse(null);
// 안 좋음
Optional<Member> member = ...;
if (member.isPresent()) {
return member.get();
} else {
throw new NoSuchElementException();
}
// 좋음
Optional<Member> member = ...;
return member.orElseThrow(() -> new NoSuchElementException());
주의사항
isPresent()-get() 대신 orElse()/orElseGet()/orElseThrow()
orElse(new …) 대신 orElseGet(()-> new …)
단지 값을 얻을 목적이라면 Optional 대신 null 비교
Optional 대신 비어있는 컬렉션 반환
Optional을 필드로 사용금지
Optional을 생성자나 메서드 인자로 사용 금지
Optional을 컬렉션의 원소로 사용 금지
of(), ofNullable() 혼동 주의
Optional
대신 OptionalInt, OptionalLong, OptionalDouble
참고 문서
- Optional http://homoefficio.github.io/2019/10/03/Java-Optional-%EB%B0%94%EB%A5%B4%EA%B2%8C-%EC%93%B0%EA%B8%B0/ http://tcpschool.com/java/java_stream_optional