Java

[Effective Java] ์•„์ดํ…œ 55. ์˜ต์…”๋„ ๋ฐ˜ํ™˜์€ ์‹ ์ค‘ํžˆ ํ•˜๋ผ.

quedevel 2023. 3. 25. 15:57
728x90
๋ฐ˜์‘ํ˜•

๐ŸŽฏ ์•„์ดํ…œ 55. ์˜ต์…”๋„ ๋ฐ˜ํ™˜์€ ์‹ ์ค‘ํžˆ ํ•˜๋ผ.

๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜์ง€ ๋ชปํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๊ณ , ํ˜ธ์ถœํ•  ๋•Œ๋งˆ๋‹ค ๋ฐ˜ํ™˜๊ฐ’์ด ์—†์„ ๊ฐ€๋Šฅ์„ฑ์„ ์—ผ๋‘์— ๋‘ฌ์•ผ ํ•˜๋Š” ๋ฉ”์„œ๋“œ๋ผ๋ฉด ์˜ต์…”๋„์„ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•  ์ƒํ™ฉ์ผ ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ์˜ต์…”๋„ ๋ฐ˜ํ™˜์—๋Š” ์„ฑ๋Šฅ ์ €ํ•˜๊ฐ€ ๋’ค๋”ฐ๋ฅด๋‹ˆ, ์„ฑ๋Šฅ์— ๋ฏผ๊ฐํ•œ ๋ฉ”์„œ๋“œ๋ผ๋ฉด null์„ ๋ฐ˜ํ™˜ํ•˜๊ฑฐ๋‚˜ ์˜ˆ์™ธ๋ฅผ ๋˜์ง€๋Š” ํŽธ์ด ๋‚˜์„ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์˜ต์…”๋„์„ ๋ฐ˜ํ™˜๊ฐ’ ์ด์™ธ์˜ ์šฉ๋„๋กœ ์“ฐ๋Š” ๊ฒฝ์šฐ๋Š” ๋งค์šฐ ๋“œ๋ฏˆ๋‹ค.


์˜ต์…”๋„์€ ์›์†Œ๋ฅผ ์ตœ๋Œ€ 1๊ฐœ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” '๋ถˆ๋ณ€'์ปฌ๋ ‰์…˜์ด๋‹ค.

๋ณดํ†ต์€ T๋ฅผ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•˜์ง€๋งŒ ํŠน์ • ์กฐ๊ฑด์—์„œ๋Š” ์•„๋ฌด๊ฒƒ๋„ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š์•„์•ผ ํ• ๋•Œ T ๋Œ€์‹  Optional๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ์„ ์–ธํ•˜๋ฉด ๋œ๋‹ค.

  • ์ปฌ๋ ‰์…˜์—์„œ ์ตœ๋Œ“๊ฐ’์„ ๊ตฌํ•œ๋‹ค(์ปฌ๋ ‰์…˜์ด ๋น„์—ˆ์œผ๋ฉด ์˜ˆ์™ธ๋ฅผ ๋˜์ง„๋‹ค).
public static <E extends Comparable<E>> E max(Collection<E> c) {
    if (c.isEmpty())
        throw new IllegalArgumentException("๋นˆ ์ปฌ๋ ‰์…˜");

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

    return result;
}

์ด ๋ฉ”์„œ๋“œ์—์„œ ๋นˆ ์ปฌ๋ ‰์…˜์„ ๊ฑด๋„ค๋ฉด IllegalArgumentException์„ ๋˜์ง„๋‹ค. ์ด์ „์—๋„ Optional๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ํŽธ์ด ๋” ๋‚ซ๋‹ค๊ณ  ์ด์•ผ๊ธฐ ํ–ˆ๋Š”๋ฐ, ๊ทธ๋ ‡๊ฒŒ ์ˆ˜์ •ํ•œ ๋ชจ์Šต์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • ์ปฌ๋ ‰์…˜์—์„œ ์ตœ๋Œ“๊ฐ’์„ ๊ตฌํ•ด Optional๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
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๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค. - ์ŠคํŠธ๋ฆผ ๋ฒ„์ „
public static <E extends Comparable<E>> Optional<E> max(Collection<E> c) {
    return c.stream().max(Comparator.naturalOrder());
}

์ฐธ๊ณ  ์ž๋ฃŒ

Joshua Bloch, ใ€ŽEffective Java 3/Eใ€, ๊ฐœ์•ž๋งต์‹œ ์˜ฎ๊น€, ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ธ์‚ฌ์ดํŠธ(2018)
http://www.kyobobook.co.kr/product/detailViewKor.laf?ejkGb=KOR&mallGb=KOR&barcode=9788966262281&orderClick=LEa&Kc=

728x90
๋ฐ˜์‘ํ˜•