[Java] Optional<T>

์กฐ์• ์˜นยท2025๋…„ 6์›” 5์ผ

๐Ÿ” Optional์ด๋ž€?

  • Java 8์—์„œ ๋“ฑ์žฅํ•œ ๊ฐ’์ด ์žˆ์„ ์ˆ˜๋„, ์—†์„ ์ˆ˜๋„ ์žˆ๋Š” ์ปจํ…Œ์ด๋„ˆ
  • null์„ ์ง์ ‘ ๋‹ค๋ฃจ์ง€ ์•Š๊ฒŒ ํ•ด ์ฃผ๋Š” ์•ˆ์ „ ์žฅ์น˜

โœ… null๊ณผ Optional์˜ ์ฐจ์ด

๊ตฌ๋ถ„null ๋ฐฉ์‹Optional ๋ฐฉ์‹
์žฅ์ - ๊ฐ„๋‹จํ•˜๊ณ  ์ง๊ด€์ 
- ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์ด ์ ์Œ
- null ์ฒดํฌ๋ฅผ ๊ฐ•์ œํ•  ์ˆ˜ ์žˆ์Œ
- ์ฝ”๋“œ์˜ ์˜๋„๊ฐ€ ๋ช…ํ™•ํ•จ
- NullPointerException ๋ฐฉ์ง€
๋‹จ์ - NullPointerException ๋ฐœ์ƒ ๊ฐ€๋Šฅ
- null ์ฒดํฌ๋ฅผ ์ˆ˜๋™์œผ๋กœ ํ•ด์•ผ ํ•จ
- ์ฝ”๋“œ๊ฐ€ ๋‹ค์†Œ ๋ณต์žกํ•ด์งˆ ์ˆ˜ ์žˆ์Œ
- ์•ฝ๊ฐ„์˜ ์„ฑ๋Šฅ ์˜ค๋ฒ„ํ—ค๋“œ
์ ํ•ฉํ•œ ์ƒํ™ฉ- ๊ฐ„๋‹จํ•œ null ์ฒดํฌ
- ์„ฑ๋Šฅ์ด ์ค‘์š”ํ•œ ๊ฒฝ์šฐ
- ๋ณต์žกํ•œ null ์ฒ˜๋ฆฌ
- API ์„ค๊ณ„ ์‹œ
- ์•ˆ์ •์„ฑ์ด ์ค‘์š”ํ•œ ๊ฒฝ์šฐ
// ์œ„ํ—˜ํ•œ null ์‚ฌ์šฉ
String name = user.getName(); // name์ด null์ด๋ฉด ๋ฐ”๋กœ NPE

// ์•ˆ์ „ํ•œ Optional
Optional<String> name = user.getOptionalName();
name.ifPresent(System.out::println);

โœ… Optional ๊ธฐ๋ณธ ์‚ฌ์šฉ๋ฒ•

1. Optional ์ƒ์„ฑ

Optional<String> name = Optional.of("Seobin");      
Optional<String> empty = Optional.empty();          
Optional<String> maybeNull = Optional.ofNullable(null); 

2. ๊ฐ’ ๊บผ๋‚ด๊ธฐ

Optional<String> nickname = Optional.of("Yun");

// 
if (!nickname.isEmpty()) {
	String newNickname = nickname.get();
}

// ๊ฐ’์ด ์žˆ์œผ๋ฉด ์ถœ๋ ฅ
nickname.ifPresent(System.out::println);

// ๊ธฐ๋ณธ๊ฐ’ ์ œ๊ณต
String result = nickname.orElse("๊ธฐ๋ณธ ๋‹‰๋„ค์ž„");

// ์˜ˆ์™ธ ๋˜์ง€๊ธฐ
String value = nickname.orElseThrow(() -> new IllegalArgumentException("๊ฐ’์ด ์—†์–ด์š”"));

3. ์ฒด์ด๋‹ ์‚ฌ์šฉ

Optional<User> user = findUserById(id);

String city = user
    .map(User::getAddress)
    .map(Address::getCity)
    .orElse("๊ธฐ๋ณธ ๋„์‹œ");

๐Ÿงพ ์ •๋ฆฌ

๊ตฌ๋ถ„๊ถŒ์žฅ ์—ฌ๋ถ€์ด์œ 
๋ฆฌํ„ด ํƒ€์ž…์— ์‚ฌ์šฉโœ…ํ˜ธ์ถœ์ž์—๊ฒŒ '์—†์Œ' ๊ฐ€๋Šฅ์„ฑ์„ ๋ช…์‹œํ•จ
ํŒŒ๋ผ๋ฏธํ„ฐ์— ์‚ฌ์šฉโŒํ˜ธ์ถœ์ž์—๊ฒŒ ํ˜ผ๋ž€, ์˜คํžˆ๋ ค if-check ๋” ํ•„์š”
์—”ํ‹ฐํ‹ฐ ํ•„๋“œโŒORM ๋งคํ•‘, ๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„ ๋“ฑ ๋ฌธ์ œ
์™ธ๋ถ€ API ์‘๋‹ต ๊ฐ€๊ณตโœ…๊ฐ’์ด ์—†์„ ์ˆ˜ ์žˆ์Œ์„ ํ‘œํ˜„ํ•˜๊ธฐ ์ข‹์Œ
profile
์•„์ž์žฃ

0๊ฐœ์˜ ๋Œ“๊ธ€