π μ€λμ νμ΅ ν€μλ
- 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λ‘ λμμ€κ² μ΅λλ€.