[JAVA] Optional

Optional

1. ๊ฐœ๋…

  • ๊ฐ’์˜ ์กด์žฌ์œ ๋ฌด๊ฐ€ ํ™•์‹คํ•˜์ง€ ์•Š์„ ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ์ปจํ…Œ์ด๋„ˆ
  • NullPointerException ๋ฐฉ์ง€

2. ์ƒ์„ฑ

๋ฉ”์„œ๋“œ ์„ค๋ช…
Optional.of(T) null์ด ์•„๋‹ˆ์–ด์•ผ ํ•จ, null์ด๋ฉด NPE
Optional.ofNullable(T) null ๊ฐ€๋Šฅ
Optional.empty() ๋นˆ Optional ์ƒ์„ฑ

์ฝ”๋“œ

Optional<String> opt1 = Optional.of("Hello");        // null์ด ์•„๋‹Œ ๊ฐ’
Optional<String> opt2 = Optional.ofNullable(null);   // null์ผ ์ˆ˜๋„ ์žˆ์Œ
Optional<String> opt3 = Optional.empty();            // ๋น„์–ด ์žˆ๋Š” Optional

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

๋ฉ”์„œ๋“œ ์„ค๋ช…
get() ๊ฐ’ ๋ฐ˜ํ™˜, ๋น„์–ด์žˆ๋Š” ๊ฒฝ์šฐ NPE

4. NPE ์—†์ด ๊ฐ’ ๊บผ๋‚ด๊ธฐ

๋ฉ”์„œ๋“œ ์„ค๋ช…
orElse(T) ๊ธฐ๋ณธ๊ฐ’ ๋ฐ˜ํ™˜
orElseGet(Supplier) ์ง€์—ฐ ๊ณ„์‚ฐ๋œ ๊ธฐ๋ณธ๊ฐ’ ์ œ๊ณต
orElseThrow() ์˜ˆ์™ธ ๋˜์ง

์ฝ”๋“œ

// ๊ฐ’์ด ์žˆ์œผ๋ฉด ๋ฐ˜ํ™˜, ์—†์œผ๋ฉด "๊ธฐ๋ณธ๊ฐ’"
String name = opt.orElse("์ธ ํ‚ค์‹œ๋งˆ");
System.out.println(name);

// ๊ฐ’์ด ์žˆ์œผ๋ฉด ๋ฐ˜ํ™˜, ์—†์œผ๋ฉด ํ•จ์ˆ˜ ์‹คํ–‰ํ•ด์„œ ๋ฐ˜ํ™˜
String name2 = opt.orElseGet(() -> "์ธ ํ‚ค์‹œ๋งˆ" + "์นด๋ผ์Šค๋…ธ");
System.out.println(name2);

// ๊ฐ’์ด ์—†์œผ๋ฉด ์˜ˆ์™ธ ๋˜์ง€๊ธฐ
String name3 = opt.orElseThrow(() -> new IllegalArgumentException("์—†์Œ"));
์ธ ํ‚ค์‹œ๋งˆ
์ธ ํ‚ค์‹œ๋งˆ์นด๋ผ์Šค๋…ธ
Exception in thread "main" java.lang.IllegalArgumentException: ์—†์Œ
at practice.Practice.lambda$12(Practice.java:190)
at java.util.Optional.orElseThrow(Unknown Source)
at practice.Practice.main(Practice.java:190)

5. ๊ฐ’ ์กด์žฌ ์—ฌ๋ถ€ ํ™•์ธ

๋ฉ”์„œ๋“œ ์„ค๋ช…
isPresent true - ์กด์žฌ
isEmpty true - ๋ถ€์žฌ, java11๋ถ€ํ„ฐ ์ง€์›

์ฝ”๋“œ

if (!opt.isPresent()) {
		    System.out.println("๋น„์–ด์žˆ๊ตฌ๋‚˜!");
		}

Categories:

Updated:

Leave a comment