티스토리 뷰

#2/JAVA

[JAVA] Optional 이란? + Iterable

_쿠나 2022. 11. 9. 16:18
728x90

 

JAVA에서 제공하는 클래스 중 하나인 Optional을 알아보자.

null 을 쉽게 처리하고자 도입이 되었다고 한다.

NullPointerException을 방지할 수 있도록 도와주는 클래스로 null 이 올 수 이쓴 값을 감싸는 Wrapper 클래스라는데 무슨 얘긴지는 나중에 이해될 듯하다.

Optoinal<String> optional = ... ;

optiona.isPresent(); //boolean

optional.ifPresent(this::somefunctino());
optional.ifPresent(string -> somefunction());

optiona.get(); //값에 접근하는 메서드

 

위와 같은 메서드들을 사용할 수 있음

그런데 optiona.get() 을 하기 전에 optional 객체가 값이 확실하게 있는지 확인을 해야한다. 

Optional<Person> somePerson = findbyId(1);

Person person = somePerson.orElseThrow(CustomException::new);

String name = person.getName();

if(findbyId(1).isPresent()){
	//이는 좋은 예는 아니다.
}

 

ifPresent ~ get 방식보다 orElse, orElseGet, orElseThrow 등을 사용하는 편을 권장!

findById(1).orElseGet(()-> new Person("NOBODY"));

orElseGet 사용 예..

 

 

그리고 Spring Data JPA를 사용할 때 Repository에서 리턴 타입을 Optional로 바로 받을 수 있어서,

JPA를 사용할 때 이 점을 활용하면 좋다.

 

😀CrudRepository.class 에서 보면

Optional<T> findById(ID id);

 

그리고 Iterable이 등장

Iterable<T> findAll();

 

Iterable은 Collection의 상위 인터페이스라고 한다. Iterator와는 또 다르다고 함!

https://docs.oracle.com/javase/8/docs/api/java/lang/Iterable.html

여기에 Iterable에 대한 설명이 있고.. 보면

Iterable 인터페이스에 있는 메서드가 forEach(), iterator(), spliterator() 가 있어서

Iterator<T> 타입을 반환할 수도 있다는 듯 하다.

 

Iterator는 Collection의 상위개념.. (An iterator over a collection)

 

 

 

 

728x90
댓글
250x250
250x250
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함