https://youtu.be/W_kPjiTF9RI?list=PLW2UjW795-f6xWA2_MUhEVgPauhGl3xIp
📖본 포스팅은 '자바의 정석 - 남궁성 저자' 님의 책과 유튜브 강의를 보고 작성되었습니다.
[Optional<T>란?]
- T 타입의 객체의 래퍼 클래스(Integer, Long 등)
- 모든 종류의 객체를 저장할 수 있다.
- null도 저장가능하다. (장점임 Null은 직접 다루기 위험하기 때문이다.)
- null을 직접 다루는 것은 위험하다.
- Nullpointexception 발생 위험
- null 체크를 할 때 if문을 사용해야 해서 코드가 지저분해지게 된다.
- Optional 객체를 사용해서 위의 null을 직접 다룰 때의 단점을 신경쓰지 않고 null을 사용할 수 있다.
- null을 직접 다루는 것은 위험하다.
[Optional<T> 객체 생성하기]
- Optional<T> 객체를 생성하는 다양한 방법
- null 대신 빈 Optional<T> 객체를 사용하자.
Optional<String> optVal = null; //널로 초기화 바람직하지 않은 방법임
Optional<String> optVal = Optional.empty(); //빈 객체로 초기화 바람직한 방법임
[Optional<T>객체의 값 가져오기]
Optional객체의 값 가져오기 - get(), orElse(), orElseGet(), orElseThrow()
- get( ) - 저장된 값 반환해주고 null일 땐 예외발생
- orElse( ) - 저장된 값이 null일 때는 ""를 반환
- orElseGet( ) - 람다식 사용 가능 () -> new String( )
- orElseThrow( ) - null이면 예외 발생
- isPresent( ) - Optional 객체의 값이 null이면 false, 아니면 true 반환
[실습]
[빈 배열 만드는 방법]
package javajungsuk;
public class Java14_11 {
public static void main(String[] args) {
int[] arr = null ; // X
int[] arr = new int[0]; //O
System.out.println("arr.length = " +arr.length);
}
}
[Optional을 사용한 null 표현 - get( )]
package javajungsuk;
import java.util.Optional;
public class Java14_11 {
public static void main(String[] args) {
Optional<String> opt = null; //가능하지만 바람직하지 않음
Optional<String> opt = Optional.empty(); //O
System.out.println("opt= "+ opt.get());
}
}
- get( ) 사용 시 예외가 발생하기 때문에 이를 아래와 같이 처리해주어야 한다.
package javajungsuk;
import java.util.Optional;
public class Java14_11 {
public static void main(String[] args) {
Optional<String> opt = Optional.empty(); //O
System.out.println("opt= "+ opt.get());
String str = "";
try {
str = opt.get();//예외 발생
} catch (Exception e) {
str = ""; //예외 발생하면 빈문자로 초기화
}
System.out.println("str" + str);
}
}
[Optional을 사용한 null 표현 - orElse( )]
package javajungsuk;
import java.util.Optional;
public class Java14_11 {
public static void main(String[] args) {
Optional<String> opt = Optional.empty(); //O
System.out.println("opt= "+ opt.get());
String str = "";
str = opt.orElse("EMPTY"); //Optional에 저장된 값이 null이면 "" 반환
System.out.println("str = " +str);
}
}
[Optional을 사용한 null 표현 - orElseGet( )]
package javajungsuk;
import java.util.Optional;
public class Java14_11 {
public static void main(String[] args) {
Optional<String> opt = Optional.empty(); //O
System.out.println("opt= "+ opt.get());
String str = "";
str = opt.orElseGet(()-> new String());
str = opt.orElseGet(String::new);
System.out.println("str = " +str);
}
}
[더 높은 성능을 필요로 할 때 - OptionalInt,OptionalLong, OptionalDouble]
- 기본형 값을 감싸는 래퍼클래스
- 빈 Optional 객체와의 비교(값이 있어도 0이 저장 값이 없어도 기본값으로 0을 저장)
- 0을 저장한 값 아무 것도 저장하지 않은 값 비교를 위한 함수 -> isPresent
- isPresent를 사용해서 값이 있으면 true를 값이 없이 기본값으로 0이 들어가 있다면 false를 반환
'Java > 객체지향' 카테고리의 다른 글
[객체지향][스트림/Stream] - 스트림의 최종연산 (0) | 2022.03.29 |
---|---|
[객체지향][스트림/Stream] - 스트림의 중간연산(2) (0) | 2022.03.28 |
[객체지향][스트림/Stream] - 스트림의 중간연산(1) (0) | 2022.03.18 |
[객체지향][스트림/Stream] - 스트림의 연산 (0) | 2022.03.18 |
[객체지향][스트림/Stream] - 스트림 만들기 (0) | 2022.03.15 |