[Java] Optional과 Null

programmeaow·2022년 6월 13일
0

Java

목록 보기
12/13

Optional

Java 8 버전 부터 등장한 기능이다.

null이 발생하게 되면 NullPointerException 또한 발생하게 되므로 null값 검증을 해줘야만 한다.

if (age != null) {
	service.check(age);
} 

이런 검증 코드를 작성하게 되는 경우 변수가 많아지거나 경우의 수가 많아지면 작성 해야하는 코드가 길어지는 불편함이 존재한다.

✔️ Optional이란?

null이 올 수 있는 값을 감싸는 래퍼 클래스

래퍼 클래스에 값을 저장하기 때문에 만약 null이 발생하더라도 NullPointerException이 발생하지 않는다.




🎯 Optional 활용하기

Optional 을 사용하기 위해서는 Optional 객체를 생성해야 한다.

먼저 기본 문법에 관해 알아보자.
.of() , .ofNullable() 로 해당 객체 생성이 가능하다.

//Optional 사용하기

Type 변수명1;

Optional<String> 변수명2 = Optional.of(변수명1);
Optional<String> 변수명2 = Optional.ofNullable(변수명1);

- of 와 ofNullable 은 다르다!

.of() : 값이 절대 null이 아닌 경우에 사용
.ofNullable() : 값이 null일 수도, null이 아닐 수도 있는 경우에 사용

of()null인 경우 사용하면 NullPointerException이 발생한다.



.ofNullable() 로 객체를 생성한 뒤 출력해보자.

String t = null;
Optional<String> name = Optional.ofNullable(t);
System.out.println(t);

//출력 : Optional.empty

null이 데이터임에도 불구하고 NullPointerException이 발생하지 않은 것을 확인할 수 있다.



.isPresent() 를 사용하여 데이터의 존재 여부를 확인해보자.

String t = null;
Optional<String> name = Optional.ofNullable(t);
System.out.println(name.isPresent());

//출력 : false	

t의 값이 null이므로 데이터는 존재하지 않는다. 따라서 false가 반환된다.
이번에는 t에 [ apple ] 데이터를 넣은 뒤 다시 출력해보자.

String t = "apple";
Optional<String> name = Optional.ofNullable(t);
System.out.println(name.isPresent());

//출력 : true	

null이 아니므로 true가 반환되어 출력되었다.



tnull이 아니면 문자열의 길이를 출력하는 메서드를 작성해보자.

String t = "apple";

if( t != null ) {
	System.out.println(t.length());
}

//출력 : 5

if문을 사용하여 tnull검증을 해야하기 때문에 변수가 많아지게 되면 코드가 길어지는 단점이 생긴다.

이런 경우 .ifPresent() 와 람다식을 이용하여 if문을 작성할 수 있다.

String t = "apple";
Optional<String> name = Optional.ofNullable(t);

opt.ifPresent( v -> System.out.println(v.length()) );

//출력 : 5

null 검증시 필요한 if문 작성의 번거로움을 줄일 수 있는 장점이 있다.



.orElse()는 값이 null인 경우에만 parameter로 받아온 값을 반환한다.
아무 과일도 선택하지 않으면 자동으로 복숭아를 출력하게 해보자.

  1. 과일을 선택한 경우 : apple 선택
String t = "apple";
Optional<String> name = Optional.ofNullable(t);

System.out.println(name.orElse("peach"));

//출력 : apple
  1. 과일을 선택하지 않은 경우 : Null
String t = null;
Optional<String> name = Optional.ofNullable(t);

System.out.println(name.orElse("peach"));

//출력 : peach

데이터가 null인 경우에만 .orElse()가 실행되는 것을 확인할 수 있다.




- 읽어보기

Optional의 orElse와 orElseGet 차이 및 예시 코드

profile
개발이란 뭘까

0개의 댓글