Optional 사용하기 및 메서드 정리

라헬·2022년 12월 25일
0

public class Person{
private Otional car;
public Optional getCar() P
return car;
}

사람이 차를 소유할 수도 없을 수도 있으니 Optional로 정의했다.

public class Car {
private Optional insurance; //자동차 보험에 가입되어 있을 수도 없을 수도 있으므로 Optional로 정의한다.
public Optional getInsurance() {
return insurance;
}
}

public class Insurance{
private String name; // 보험회사마다 이름이 무조건 있으니까
public String getName() {
return name;
}
}

Optional클래스를 사용하면서 사람은 차를 참조하며 차는 보험을 참조하는데 사람이 차를 가질수도 아닐 수도, 차는 보험에 가입되어 있을 수도 아닐 수도 명확히 보인다.

그래서 Optional의 객체는 어떻게 만드는데?

빈 Optional을 만들어보자.
Optional optCar = Optional.empty();

null이 아닌 값으로 만들어볼까?
Optional optCar = Optional.of(car);

이제 차가 없으면 NullPointException이 발생

null값을 저장하고 싶으면 ?
Optional optCar = Optional.ofNullable(car);

두개를 합칠 수도 있나?
public Insurance findCheapestInsurance(Person person, Car car ) {
//다양한 보험회사가 제공하는 서비스를 조회하고 데이터를 비교해서 가장 저렴한 보험료를 제공하는 보험회사를 찾는 서비스가 있다고 가정해보자
return cheapestCompany;
}

Optional인 두 객체들을 인수로 받아서 안전하게 구현해보자

public Optional nullSafeFindCheapseInsurance(
Optional person, Optional car) {
if( person.isPresent() && car.isPresent()) {
return Optional.of(findCheapestInsurance(person.get(), car.get()));
} else {
return Optional.empty();
}
}

필터로 특정값 거르기

Optional optInsurance = ...;
optInsurace.filter(insurance ->
"CambridgeInsurance".equals(insurace.getName()))
.ifPresent(x -> System.out.println("ok"));

🖤 empty : 빈 Optional 인스턴스 반환
🖤 filter : 값이 존재하며 프레디케이트와 일치하면 값을 포함해서 Optional을 반환하고 값이 없거나 프레디케이트와 일치하지 않으면 빈 Optional 반환
🖤 flatMap : 값이 존재하면 인수로 제공된 함수를 적용한 Optional을 반환하고 없으면 빈 Optional 반환
🖤 get : 값이 존재하면 Optional이 감싸고 있는 값을 반환, 없으면 NoSuchElementException발생
🖤 ifPresent : 값이 존재하면 지정된 Consumer 실행 없으면 아무것도 안 함
🖤 ifPresentOrElse : 값이 존재하면 지정된 Consumer실행 없으면 아무것도 안 함
🖤 isPresent : 값이 존재하면 true, 아니면 false
🖤 map : 값이 존재하면 제공된 매핑 함수를 적용
🖤 of : 값이 존재하면 값을 감싸는 Optional을 반환하고, 값이 null이면 NullPointerException 발생
🖤 ofNullable : 값이 존재하면 값을 감싸는 Optional을 반환, 값이 null이면 빈 Optional 반환
🖤 or : 값이 존재하면 같은 Optional 반환, 없으면 Supplier에서 만든 Optional을 반환
🖤 orElse : 값이 존재하면 값을 반환, 없으면 기본값
🖤 orElseGet : 값이 존재하면 값을 반환, 없으면 Supplier에서 제공하는 값 반환
🖤 orElseThrow : 값이 존재하면 값을 반환, 없으면 Supplier에서 생성한 예외 발생
🖤 stream : 값이 존재하면 존재하는 값만 포함하는 스트림을 반환, 없으면 빈 스트림

profile
성장하고 싶은 풀스택 개발자

0개의 댓글