Item 55. Optional

์˜ต์…”๋„ ๋ฐ˜ํ™˜์€ ์‹ ์ค‘ํžˆ ํ•˜๋ผ

์ž๋ฐ”์—์„œ๋Š” ๋ฉ”์„œ๋“œ ๊ฒฐ๊ณผ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์—†์„ ๋•Œ ์•„๋ž˜ ์„ธ ๊ฐ€์ง€ ์„ ํƒ์ง€๊ฐ€ ์กด์žฌํ•œ๋‹ค.

  • ์˜ˆ์™ธ ๋˜์ง€๊ธฐ

  • null ๋ฐ˜ํ™˜

  • Optional ๋ฐ˜ํ™˜

์ด ์ค‘ null์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์œ ์—ฐํ•˜๊ณ  ์‚ฌ์šฉํ•˜๊ธฐ ์‰ฌ์šฐ๋ฉฐ, null ๋ฐ˜ํ™˜ ๋ฉ”์„œ๋“œ๋ณด๋‹ค ์˜ค๋ฅ˜ ๊ฐ€๋Šฅ์„ฑ์ด ์ ๋‹ค. ๋งŒ์•ฝ Optional ๋ฐ˜ํ™˜์„ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ํ–ˆ์„ ๋• ์ ˆ๋Œ€ null์„ ๋ฐ˜ํ™˜ํ•˜์ง€ ๋ง์•„์•ผ ํ•œ๋‹ค.(Optional ์ •์ฑ… ์œ„๋ฐ˜) ๋ฐ˜ํ™˜๊ฐ’์ด ์—†์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ด๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ์•Œ๋ ค์ค˜์•ผ ํ•  ๋•Œ Optional์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

class Example {
    public static <E extends Comparable<E>> Optional<E> max(Collection<E> c) {
        if (c.isEmpty()) {
            return Optional.empty();
        }

        E result = null;
        for (E e : c) {
            if (result == null || e.compareTo(result) > 0) {
                result = Objects.requireNonNull(e);
            }
        }

        return Optional.of(result);
    }
}

Optional ๋ฐ˜ํ™˜์˜ ๋‹จ์ 

๋งŽ์€ ์ด์ ์„ ์ฃผ๋Š” Optional์ด์ง€๋งŒ ์ปฌ๋ ‰์…˜, ๋งต, ์ŠคํŠธ๋ฆผ, ๋ฐฐ์—ด, ์˜ต์…”๋„ ๊ฐ™์€ ์ปจํ…Œ์ด๋„ˆ ํƒ€์ž…์—๋Š” Optional์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ์ด ์ ํ•ฉํ•˜์ง€ ์•Š๋‹ค.

  • ์ปฌ๋ ‰์…˜ / ๋ฐฐ์—ด: ์ปฌ๋ ‰์…˜๊ณผ ๋ฐฐ์—ด์€ ์ด๋ฏธ ๋นˆ ์ปฌ๋ ‰์…˜๊ณผ ๋ฐฐ์—ด์„ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— Optional์„ ๋ฐ˜ํ™˜ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค.

  • ๋งต: ํ‚ค๊ฐ€ ์—†๋‹ค๋Š” ์‚ฌ์‹ค์ด ๋‘ ๊ฐ€์ง€ ๋ฐฉ์‹์œผ๋กœ ํ‘œํ˜„๋˜๊ธฐ ๋•Œ๋ฌธ์— ํ˜ผ๋ž€์„ ์ค„ ์ˆ˜ ์žˆ๋‹ค.

  • ๊ทธ ์™ธ: ์„ฑ๋Šฅ์— ๋ฏผ๊ฐํ•œ ์ƒํ™ฉ์—์„œ๋Š” Optional์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ์ด ์ ํ•ฉํ•˜์ง€ ์•Š๋‹ค.

Last updated

Was this helpful?