728x90
반응형
자바로 개발을 하다 보니 타입에 대한 강제성 때문에 곤란한 적이 한두 번이 아니다.
이런 점은 분명 데이터의 무결성을 지켜준다는 점에선 굉장히 이득이지만, 개발을 하면서 귀찮은 것이 한 둘이 아니다.
그리고 객체나 파라미터를 가지고 null이나 빈 문자열을 체크할 때가 많다.
if(student == null){
doSomething();
}else{
doSomething();
}
예를 들면 이런 경우다.
혹은
save(student)
와 같은 경우에 NPE가 발생하는 등, 수많은 경우에서 객체가 null일 때,
Exception을 발생시키는 게 아니라 값이 없음을 표현하고 없을 때, 로직을 처리하는 방안을 마련하는 게 좋다.
Exception을 발생시키는 건 썩 좋은 상황은 아니기 때문이다.
Optional의 등장 배경
… it was not to be a general purpose Maybe type,
as much as many people would have liked us to do so.
Our intention was to provide a limited mechanism for library method return types
where there needed to be a clear way to represent “no result” …
해석하면 서론에서 언급했던 이유와 비슷하다.
Optional은 제한적인 범위에서 라이브러리나 메서드 객채 등, 결과 값이 없음을 표현할 필요가 있다는 점에서 만들어졌고,
Integer같이 값을 감싸는 Wrapper 클래스이다.
그렇기 때문에 인스턴스화 할 수 없으며, 메서드는 Optional 객체 자체를 바라봐야 한다.
Optional<Student> opt =new Optional<>(); -> (X)
Optional<Student> opt =Optional.empty(); -> (O)
위처럼 의미다.
이 곳을 클릭하면 Optional을 사용할 때, 주의점이 소개되어있다.
null체크와 데이터 무결성 체크, 그리고 코드가 상당히 많이 줄 수 있다.
에제를 써가며 사용하는 것보단 공식 document를 보고 직접 활용해보는 편이 좋다.
예제 코드가 굉장히 자세히 잘 나와있으니 한 번 잘 사용해보자.
참고 :
728x90
728x90
'Java' 카테고리의 다른 글
WebSocket으로 실시간 채팅 구현하기.(springboot) (19) | 2021.04.13 |
---|---|
Could not initialize class org.codehaus.groovy.runtime.InvokerHelper (0) | 2021.03.12 |
spring에서 파라미터를 받는 방법 (0) | 2021.02.18 |
JSON 파싱하기. (0) | 2021.02.01 |
Error]Intelli J]Unable to parse template "Class" (0) | 2021.01.06 |
댓글