Item 46. Side-Effect-Free Function

์ŠคํŠธ๋ฆผ์—์„œ๋Š” ๋ถ€์ž‘์šฉ ์—†๋Š” ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ผ

์ŠคํŠธ๋ฆผ์€ ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์— ๊ธฐ์ดˆํ•œ ํŒจ๋Ÿฌ๋‹ค์ž„์ด๊ธฐ ๋•Œ๋ฌธ์—, ์ŠคํŠธ๋ฆผ์—๋„ ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ํŒจ๋Ÿฌ๋‹ค์ž„์ด ์ ์šฉ๋œ๋‹ค. ์ŠคํŠธ๋ฆผ ํŒจ๋Ÿฌ๋‹ค์ž„์˜ ํ•ต์‹ฌ์€ ๊ณ„์‚ฐ์„ ์ผ๋ จ์˜ ๋ณ€ํ™˜์œผ๋กœ ์žฌ๊ตฌ์„ฑํ•˜๋Š” ๋ถ€๋ถ„์ธ๋ฐ, ์ด๋•Œ ๊ฐ ๋ณ€ํ™˜ ๋‹จ๊ณ„๋Š” ๊ฐ€๋Šฅํ•œ ํ•œ ์ด์ „ ๋‹จ๊ณ„์˜ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ›์•„ ์ฒ˜๋ฆฌํ•˜๋Š” ์ˆœ์ˆ˜ ํ•จ์ˆ˜์—ฌ์•ผ ํ•œ๋‹ค.

// ์•ˆ ์ข‹์€ ์˜ˆ์‹œ
class Example {
    public static void main(String[] args) {
        Map<String, Long> freq = new HashMap<>();
        try (Stream<String> words = new Scanner(file).tokens()) {
            // ์ŠคํŠธ๋ฆผ API๋ฅผ ์‚ฌ์šฉํ–ˆ์ง€๋งŒ ๋‹จ์ˆœ ๋ฐ˜๋ณต๋ฌธ์„ ์‚ฌ์šฉํ•œ ๊ฒƒ๊ณผ ๊ฐ™๋‹ค.
            words.forEach(word -> {
                // ๋‹จ์–ด๋ฅผ ์†Œ๋ฌธ์ž๋กœ ๋ณ€ํ™˜ํ•œ ๋‹ค์Œ, ์™ธ๋ถ€ ์ƒํƒœ๋ฅผ ์ˆ˜์ •(์—ฐ์‚ฐ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ์ผ ์ด์ƒ์˜ ์ผ์„ ์ˆ˜ํ–‰ ์ค‘)
                freq.merge(word.toLowerCase(), 1L, Long::sum);
            });
        }
    }
}

// ์ข‹์€ ์˜ˆ์‹œ
class Example {
    public static void main(String[] args) {
        Map<String, Long> freq;
        try (Stream<String> words = new Scanner(file).tokens()) {
            // ์ŠคํŠธ๋ฆผ ํŒŒ์ดํ”„๋ผ์ธ์„ ์ด์šฉํ•ด ์™ธ๋ถ€ ์ƒํƒœ๋ฅผ ์ˆ˜์ •ํ•˜์ง€ ์•Š๊ณ  ๋‹จ์–ด ๋นˆ๋„๋ฅผ ๊ณ„์‚ฐ
            freq = words
                .collect(groupingBy(String::toLowerCase, counting()));
        }
    }
}

forEach ์—ฐ์‚ฐ์€ ์ข…๋‹จ ์—ฐ์‚ฐ ์ค‘ ๊ธฐ๋Šฅ์ด ๊ฐ€์žฅ ์ ๊ณ  ์ŠคํŠธ๋ฆผ ๋‹ต์ง€ ๋ชปํ•œ ์—ฐ์‚ฐ์ด๊ธฐ ๋•Œ๋ฌธ์—, ์œ„์™€ ๊ฐ™์ด ์ŠคํŠธ๋ฆผ ํŒจ๋Ÿฌ๋‹ค์ž„์˜ ์žฅ์ ์„ ์ œ๋Œ€๋กœ ์‚ด๋ฆฌ์ง€ ๋ชปํ•  ์ˆ˜ ์žˆ๋‹ค. ๋•Œ๋ฌธ์— forEach ์—ฐ์‚ฐ์€ ์ŠคํŠธ๋ฆผ ๊ณ„์‚ฐ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๊ณ ํ•  ๋•Œ๋งŒ ์‚ฌ์šฉํ•˜๊ณ , ๊ณ„์‚ฐํ•˜๋Š” ๋ฐ๋Š” ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

Collectors

Collectors๋Š” ์ŠคํŠธ๋ฆผ์˜ ์›์†Œ๋ฅผ ์†์‰ฝ๊ฒŒ ์ปฌ๋ ‰์…˜์œผ๋กœ ๋ชจ์„ ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š”๋ฐ, ์ŠคํŠธ๋ฆผ์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ํ™œ์šฉํ•˜๋ ค๋ฉด Collectors๋ฅผ ์ž˜ ์•Œ์•„๋‘๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. toList, toSet, toCollection, toMap, groupingBy, partitioningBy ๋“ฑ ๋‹ค์–‘ํ•œ ๋ฉ”์„œ๋“œ๋ฅผ ์ œ๊ณตํ•˜๋Š”๋ฐ, ์ฑ…์˜ ๋ณธ๋ฌธ์„ ์ฐธ๊ณ ํ•˜๋ฉด ๋œ๋‹ค.

Last updated

Was this helpful?