Optional

Optional

์ •์˜

  • (์ œ๋„ค๋ฆญ) T ํƒ€์ž… ๊ฐ์ฒด์˜ Wrapper Class

    public final class Optional<T> {
    	private final T value;
    	...
    }
    • ๋ชจ๋“  ์ข…๋ฅ˜์˜ ๊ฐ์ฒด ์ €์žฅ ๊ฐ€๋Šฅ

    • null๋„ ์ €์žฅ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ์ €์žฅํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹์Œ

      • ์• ๋‹น์ดˆ Optional์˜ ๋“ฑ์žฅ ๊ณ„๊ธฐ๊ฐ€ null์„ ์ง์ ‘ ๋‹ค๋ฃจ๋Š” ๊ฒƒ์˜ ์œ„ํ—˜์„ฑ(NullPointerException) ํ•ด๊ฒฐ์„ ์œ„ํ•จ์ž„

      • Optional์„ ํ†ตํ•ด null์„ ๊ฐ„์ ‘์ ์œผ๋กœ ๋‹ค๋ฃจ๊ธฐ ์œ„ํ•ด ๊ฐ์Œˆ(Wrap)

    • ๋‚ด๋ถ€์ ์œผ๋กœ ์กฐ๊ฑด๋ฌธ ํฌํ•จํ•˜๋Š” ํ•จ์ˆ˜ ์ง€์›ํ•ด if ์—†์ด null ์ฒดํฌ ๊ฐ€๋Šฅ

      • null์ผ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋Š” ๋ณ€์ˆ˜๋งˆ๋‹ค if๋กœ ์ฒดํฌํ•˜๋ฉด ์ฝ”๋“œ๊ฐ€ ์ง€์ €๋ถ„ํ•ด์ง

๊ธฐ๋Šฅ

  1. ์ƒ์„ฑ ๋ฉ”์†Œ๋“œ

    • Optional<T> of(T t), Optional<T> ofNullable(T t)

      • of๋Š” ์ „๋‹ฌ๊ฐ’์ด null์ด๋ฉด NullPointerException ๋ฐœ์ƒ

      • Optional ์ž์ฒด๊ฐ€ null์„ ๊ฐ์‹ธ๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด๋ฏ€๋กœ ์ฃผ๋กœ ofNullable ์‚ฌ์šฉ์ด ๋ฐ”๋žŒ์ง

    • Optional<T> Optional.empty()

      • Optional ๋‚ด value๊ฐ€ null์ธ Optional ๊ฐ์ฒด ์ƒ์„ฑ

  2. ์กฐํšŒ ๋ฉ”์†Œ๋“œ

    • T get()

      • ๊ฐ’ ๋ฐ˜ํ™˜

      • value๊ฐ€ null์ด๋ฉด ์˜ˆ์™ธ ๋ฐœ์ƒ

    • T orElse(T t)

      • ๊ฐ’ ๋ฐ˜ํ™˜

      • ์—†์œผ๋ฉด ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ „๋‹ฌ๋œ ๊ฐ’ ๋ฐ˜ํ™˜

    • T orElseGet(Supplier<T> s)

      • ๊ฐ’ ๋ฐ˜ํ™˜

      • ์—†์œผ๋ฉด ์ „๋‹ฌ๋œ ๋žŒ๋‹ค์‹์˜ ๊ฒฐ๊ณผ๊ฐ’ ๋ฐ˜ํ™˜

    • T orElseThrow(Exception e)

      • ๊ฐ’ ๋ฐ˜ํ™˜

      • ์—†์œผ๋ฉด ์ „๋‹ฌ๋œ ์˜ˆ์™ธ ๋ฐœ์ƒ

  3. value์˜ null ์—ฌ๋ถ€์— ๋”ฐ๋ฅธ ๋ถ„๊ธฐ ๋ฉ”์†Œ๋“œ

    • boolean isPresent()

      • ์žˆ์œผ๋ฉด true, ์—†์œผ๋ฉด false

    • void ifPresent(Consumer<T> c)

      • ์žˆ์œผ๋ฉด value์— ์ „๋‹ฌ๋œ ๋žŒ๋‹ค์‹ ์ ์šฉ

๊ธฐ๋ณธํ˜• Optional

  • ๊ธฐ๋ณธํ˜• ๋ณ€์ˆ˜๋ฅผ ๊ฐ์‹ธ๋Š” Wrapper ํด๋ž˜์Šค

    public final class OptionalInt {
    
    	private final boolean isPresent;
    	private final int value;
    	...
    
    }
    • value๋Š” ์ตœ์ดˆ๋กœ 0์œผ๋กœ ์ดˆ๊ธฐํ™”

    • value๊ฐ€ ์‹ค์ œ๋กœ 0์ผ ๋•Œ์™€ empty์ผ ๋•Œ๋ฅผ ๊ตฌ๋ถ„ํ•˜๊ธฐ ์œ„ํ•ด isPresent๋ผ๋Š” ๋ณ€์ˆ˜ ์กด์žฌ

      • empty๋ฉด value == 0์ด๊ณ  isPresent == false

      • 0์ด๋ฉด value == 0์ด๊ณ  isPresent == true

  • ๋‹ค์Œ์˜ ๊ฒƒ๋“ค์ด ์กด์žฌ

    • OptionalInt

    • OptionalLong

    • OptionalDouble

Last updated