꿀똥벌레
꿀똥벌레 개발 블로그
꿀똥벌레
전체 방문자
오늘
어제
  • 분류 전체보기 (90)
    • JAVA (17)
    • SPRING (14)
    • Elasticsearch (4)
    • GRADLE (2)
    • HTML, CSS (0)
    • JAVASCRIPT (0)
    • GIT (1)
    • Vue.js (1)
    • server (1)
    • Python (0)
    • IT리뷰 (0)
    • 인프라 (6)
    • IOS (21)
    • 디자인패턴 (20)
    • Kafka (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • ES
  • maxConnTotal
  • 엘라스틱서치
  • java
  • 스프링 인테그레이션
  • elasticsearch
  • 스프링 인티그레이션
  • mappings
  • KEEPALIVE
  • Index Template
  • 인덱스 템플릿
  • springintegration
  • persistent connection
  • maxConnPerRoute
  • connectionRequestTimeout
  • persistence connection
  • spring integration
  • SWIFT
  • Index
  • spring

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
꿀똥벌레

꿀똥벌레 개발 블로그

JAVA

JAVA Optional 기초

2021. 3. 19. 18:01

변수 선언

//null을 담고있는(비어있는) Optional 객체
Optional<T> 변수명 = Optional.empty();

//null이 아닌 객체름 담는 Optional 객체, null이 넘어오면 NPE를 던지므로 조심해서 사용해야 한다.
Optional<T> 변수명 = Optional.of(param);

//null인지 아닌지 확신할 수 없는 객체를 담고 있는 Optional 객체를 생성, null이 넘어올 경우 NPE를
 던지지 않고, 비어있는 Optional 객체를 얻어온다.
Optional<T> 변수명 = Optional.ofNullable(변수);

 

Optional이 담고 있는 객체 접근

//Optional 이 담고 있는 객체 접근
.get()

//비어있는 Optional 객체에 대해서 other를 반환
.orElse(T other)

//비어있는 Optional 객체에 대해서, 넘어온 인자를 반환
.orElseGet(Supplier<? extends T> other)

//비어 있는 Optional 객체에 대해 함수형 인자를 통해 생성된 객체를 반환
//비어있는 경우에만 호출되기 때문에 orElse 보다 성능상 이점을 기대할 수 있다.
.orElseThrow(Supplier<? extends X> exceptionSupplier)

 

Optional이 객체를 담고 있는지 확인

//Optional이 null을 담고있는지 확인(Optional 사용시에는 비추천하는 메소드이다)
Optional<Member> member = Optional.ofNullable(new Member());
member.isPresent(); // true or false return

 

 

Optional을 사용하는 이유는 스트림 "처럼" 사용하기 위함이 크다. 따라서 아래와 같이 사용할 수 있다.

public String getCityOfMemberFromOrder(Order order) {
	return Optional.ofNullable(order)
			.map(Order::getMember)
			.map(Member::getAddress)
			.map(Address::getCity)
			.orElse("Seoul");
}

 

Optional 의 filter 를 활용

public Optional<Member> getMemberIfOrderWithin(Order order, int min) {
	return Optional.ofNullable(order)
			.filter(o -> o.getDate().getTime() > System.currentTimeMillis() - min * 1000)
			.map(Order::getMember);
}

filter() 메소드는 넘어온 함수형 인자의 리턴 값이 false인 경우, Optional을 비워버리므로 그 이후 메소드 호출은 의미가 없어지게 된다.

또한 메소드의 리턴값이 Optional으로, 메소드를 사용하는 클라이언트에서 널값이 있을수도 있음을 고려하도록 해준다.

 

 

출처: www.daleseo.com/java8-optional-effective/

 

'JAVA' 카테고리의 다른 글

JPA @ManyToMany  (0) 2021.04.23
JPA @Inheritance  (0) 2021.04.23
JPA CASCADE 종류  (0) 2021.04.22
자바에서 제공하는 함수형 인터페이스  (0) 2021.03.18
자바 스트림 기초 사용법  (0) 2021.03.17
    꿀똥벌레
    꿀똥벌레
    개발자 꿀똥벌레 입니다.

    티스토리툴바