λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
TIL

03/04(μ›”) 내일배움캠프 Java 48일차 TIL - Optional

by 감자개발꾼 2024. 3. 4.

 

πŸ“–  μ˜€λŠ˜μ˜ ν•™μŠ΅ ν‚€μ›Œλ“œ

  • Optional

 

πŸ₯”  Optional

- μžλ°”8μ—μ„œλŠ” Optional<T> 클래슀λ₯Ό μ‚¬μš©ν•΄ Null Pointer Exception 을 방지할 수 μžˆλ„λ‘ λ„μ™€μ€λ‹ˆλ‹€.

- Optional 은 null이 올 수 μžˆλŠ” 값을 κ°μ‹ΈλŠ” Wrapper ν΄λž˜μŠ€μž…λ‹ˆλ‹€.

- Optional 이 λΉ„μ–΄μžˆλ”λΌλ„, 참쑰해도 Null Pointer Exception 이 λ°œμƒν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

- Optional 은 값이 μ—†λŠ” 경우λ₯Ό ν‘œν˜„ν•˜κΈ° μœ„ν•œ ν΄λž˜μŠ€μž…λ‹ˆλ‹€.

 

 

πŸ₯”  Optional 객체 μ ‘κ·Ό

Optional 객체에 μ ‘κ·Όν•˜κΈ° μœ„ν•΄μ„œλŠ” get() λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•œλ‹€.

κ·ΈλŸ¬λ‚˜, 이 방법은 값이 μ—†λŠ” κ²½μš°μ— μ˜ˆμ˜€κ°€ λ°œμƒν•  수 μžˆμœΌλ―€λ‘œ isPresent() λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬,

값이 μ‘΄μž¬ν•˜λŠ”μ§€μ˜ μ—¬λΆ€λ₯Ό ν™•μΈν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€.

 

Optional 객체에 값이 μžˆμ„ κ²½μš°μ—λŠ” orElse()λ‚˜ orElseGet() λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ λŒ€μ²΄ 값을 μ œκ³΅ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

 

❗️ 값이 null 인 Optional μƒμ„±ν•˜κΈ°

Optional<Car> emptyOptional = Optional.empty();

 

- empty() λ©”μ„œλ“œ : 값을 갖지 μ•ŠλŠ” 빈 Optional 객체λ₯Ό 생성

 

 

❗️ κ°’이 μžˆλŠ” Optional μƒμ„±ν•˜κΈ°

Optional<Car> hasDataOptional = Optional.of(new Car());

 

- of() λ©”μ„œλ“œ : 값이 null 이 μ•„λ‹Œ κ²½μš°μ—λ§Œ Optional 객체λ₯Ό 생성

 

 

❗️ κ°’이 μžˆμ„ μˆ˜λ„ 없을 μˆ˜λ„ μžˆλŠ” Optional μƒμ„±ν•˜κΈ°

Optional<Car> hasDataOptional = Optional.ofNullable(getCarFromDB());

 

- ofNullable() λ©”μ„œλ“œ : 값이 null 인 κ²½μš°μ—λ„ Optional 객체λ₯Ό 생성

 

 

❗️ Optional 객체 μ‚¬μš©ν•΄μ„œ κ°’ λ°›μ•„μ˜€κΈ°

Optional<String> carName = getCarNameFromDB();
// orElse() λ₯Ό 톡해 값을 λ°›μ•„μ˜΅λ‹ˆλ‹€, νŒŒλΌλ―Έν„°λ‘œλŠ” null인 경우 λ°˜ν™˜ν•  값을 μ μŠ΅λ‹ˆλ‹€.
String realCarName = carName.orElse("NoCar");

// μœ„λŠ” μ˜ˆμ‹œμ½”λ“œκ³  μ‹€μ œλŠ” 보톡 μ•„λž˜μ™€ 같이 μ‚¬μš©ν•©λ‹ˆλ‹€.
String carName = getCarNameFromDB().orElse("NoCar");

// orElseGet()μ΄λΌλŠ” λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•΄μ„œ 값을 λ°›μ•„μ˜¬ 수 μžˆμŠ΅λ‹ˆλ‹€.
// νŒŒλΌλ―Έν„°λ‘œλŠ” μ—†λŠ” 경우 싀행될 ν•¨μˆ˜λ₯Ό μ „λ‹¬ν•©λ‹ˆλ‹€.
Car car = getCarNameFromDB().orElseGet(Car::new);

// 값이 μ—†μœΌλ©΄, κ·Έ μ•„λž˜ λ‘œμ§μ„ μˆ˜ν–‰ν•˜λŠ”λ° 큰 μž₯μ• κ°€ λ˜λŠ”κ²½μš° μ—λŸ¬λ₯Ό λ°œμƒμ‹œν‚¬μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.
Car car = getCarNameFromDB()
.orElseThrow(() -> new CarNotFoundException("NO CAR!)

 

 

 

πŸ“š  μ˜€λŠ˜μ˜ 회고

Java 의 문법뢀터 기초λ₯Ό μŒ“μ•„κ°€λ©° Spring 곡뢀λ₯Ό ν•΄μ•Ό ν•  것 κ°™μŠ΅λ‹ˆλ‹€!

쀑간쀑간 μ κ²€μ˜ μ‹œκ°„μ„ 가지며 Java둜 λŒμ•„μ˜€κ² μŠ΅λ‹ˆλ‹€.