๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๊ฐœ์ธ ๊ณต๋ถ€/Java, Python

[Java] ์ŠคํŠธ๋ฆผ

by syLim___ 2025. 1. 10.
728x90

โœจ์ž๋ฐ” ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐโœจ

๐Ÿ“‹ [Java] Functional Interface (ํ•จ์ˆ˜ํ˜• ์ธํ„ฐํŽ˜์ด์Šค)
๐Ÿ“‹ [Java] ๋žŒ๋‹ค์‹, ๋ฉ”์„œ๋“œ์ฐธ์กฐ
๐Ÿ“‹ [Java] ์ŠคํŠธ๋ฆผ

 


 

โœ… ์™ธ๋ถ€ ๋ฐ˜๋ณต์ž๋ฅผ ์ด์šฉํ•œ ๋ฐ˜๋ณต ์ž‘์—…

Collection์— ๋Œ€ํ•ด ํŠน์ • ๋ฐ˜๋ณต ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•  ๋•Œ, for๋ฌธ์ด๋‚˜ Iterator๋ฅผ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด for๋ฌธ์ด๋‚˜ Iterator๋ฅผ ์™ธ๋ถ€ ๋ฐ˜๋ณต์ž๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

 

์™ธ๋ถ€ ๋ฐ˜๋ณต์ž๋Š” ์ปฌ๋ ‰์…˜ ์™ธ๋ถ€์— ์กด์žฌํ•˜๋ฉด์„œ, ์ปฌ๋ ‰์…˜ ๋‚ด๋ถ€์— ์žˆ๋Š” ์š”์†Œ๋“ค์„ ํ•˜๋‚˜์”ฉ ๊บผ๋‚ด์™€์„œ ๋ฐ˜๋ณต ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

 

๋”ฐ๋ผ์„œ ์™ธ๋ถ€ ๋ฐ˜๋ณต์ž๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด, ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ๋ฐ˜๋ณต ์ž‘์—…์„ ์ œ์–ดํ•ด์•ผ ํ•œ๋‹ค.

 

๋”๋ณด๊ธฐ

์™ธ๋ถ€ ๋ฐ˜๋ณต์ž ์‚ฌ์šฉ ์˜ˆ์‹œ

 

import java.util.Arrays;
import java.util.Iterator;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        List<String> items = Arrays.asList("A", "B", "C");

        // for๋ฌธ์„ ์‚ฌ์šฉํ•œ ์™ธ๋ถ€ ๋ฐ˜๋ณต
        for (String item : items) {
            System.out.println(item);
        }

        // Iterator๋ฅผ ์‚ฌ์šฉํ•œ ์™ธ๋ถ€ ๋ฐ˜๋ณต
        Iterator<String> iterator = items.iterator();
        while (iterator.hasNext()) {
            System.out.println(iterator.next());
        }
    }
}

 

 

โœ… ์ŠคํŠธ๋ฆผ์„ ์ด์šฉํ•œ ๋ฐ˜๋ณต ์ž‘์—… (๋‚ด๋ถ€ ๋ฐ˜๋ณต์ž)

 

์ŠคํŠธ๋ฆผ์€ ์š”์†Œ๋“ค์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•(=ํ•จ์ˆ˜)์„ ์ปฌ๋ ‰์…˜ ๋‚ด๋ถ€๋กœ ์ฃผ์ž…์‹œ์ผœ์„œ, ์ปฌ๋ ‰์…˜์ด ์Šค์Šค๋กœ ๊ฐ ์š”์†Œ๋“ค์— ๋Œ€ํ•ด ํ•ด๋‹น ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋„๋ก ์„ค๊ณ„๋˜์—ˆ๋‹ค.

์š”์†Œ๋“ค์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ํ•จ์ˆ˜ํ˜• ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋‹ค. (์˜ˆ์‹œ: ๋žŒ๋‹ค์‹, ๋ฉ”์„œ๋“œ ์ฐธ์กฐ)

 

๋”ฐ๋ผ์„œ ๋‚ด๋ถ€ ๋ฐ˜๋ณต์ž๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด, ๋ฐ˜๋ณต ์ž‘์—…์˜ ์ œ์–ด๊ถŒ์ด ์ปฌ๋ ‰์…˜ ๋‚ด๋ถ€๋กœ ๋“ค์–ด๊ฐ€๊ธฐ ๋•Œ๋ฌธ์—

๊ฐœ๋ฐœ์ž๋Š” ์š”์†Œ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋กœ์ง๋งŒ ( ๋žŒ๋‹ค์‹์ด๋‚˜ ๋ฉ”์„œ๋“œ ์ฐธ์กฐ๋ฅผ ์ด์šฉํ•ด์„œ) ์ž‘์„ฑํ•˜์—ฌ ์ „๋‹ฌํ•ด์ฃผ๊ณ , ๋ฐ˜๋ณต ์ž‘์—…์˜ ์„ธ๋ถ€์ ์ธ ์ œ์–ด๋Š” ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š์•„๋„ ๋œ๋‹ค.

 

์—ฌ๊ธฐ์„œ ๋งํ•˜๋Š” ๋ฐ˜๋ณต ์ž‘์—…์˜ ์ œ์–ด๋ž€

์˜ˆ๋ฅผ ๋“ค๋ฉด ์š”์†Œ ํ•˜๋‚˜ํ•˜๋‚˜์— ์ ‘๊ทผํ•˜๋Š” ์ž‘์—…, ๋ฐ์ดํ„ฐ๋ฅผ ๋‚˜๋ˆ„์–ด ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๋Š” ์ž‘์—… ๋“ฑ์ด ์žˆ๋‹ค.

 

ํŠนํžˆ ๋ณ‘๋ ฌ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๋Š” ๊ฒฝ์šฐ, ์™ธ๋ถ€ ๋ฐ˜๋ณต์ž๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด

๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ์ปฌ๋ ‰์…˜์„ ๋‚˜๋ˆ„๊ณ , ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ ์Šค๋ ˆ๋“œ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์‹คํ–‰์‹œํ‚ค๊ณ , ์ž‘์—… ํ›„ ์ž์›์„ ์ •๋ฆฌํ•˜๋Š” ๋“ฑ์˜ ์ถ”๊ฐ€์ ์ธ ์ฝ”๋“œ๋ฅผ ๋งŽ์ด ์ž‘์„ฑํ•ด์•ผ ํ•˜๋ฏ€๋กœ ๋งค์šฐ ๋ฒˆ๊ฑฐ๋กœ์šธ ๊ฒƒ์ด๋‹ค.

 

ํ•˜์ง€๋งŒ ์ŠคํŠธ๋ฆผ API๋Š” ์ด๋Ÿฌํ•œ ์ž‘์—…๋“ค์„ ์ž๋™ํ™”ํ•˜์—ฌ, ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ณ„๋„ ์ฝ”๋“œ๋กœ ์ž‘์„ฑํ•˜์ง€ ์•Š์•„๋„ ๋ณ‘๋ ฌ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ค€๋‹ค.

 

๐Ÿ“Œ ์ŠคํŠธ๋ฆผ์„ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ  ์ •๋ฆฌ

1. ์ŠคํŠธ๋ฆผ์€ ์ฒ˜๋ฆฌ ์†๋„๊ฐ€ ๋น ๋ฅด๋‹ค.

 - ๋‚ด๋ถ€ ๋ฐ˜๋ณต์ž๋Š” ์™ธ๋ถ€ ๋ฐ˜๋ณต์ž์™€ ๋‹ฌ๋ฆฌ ์ปฌ๋ ‰์…˜์˜ ์š”์†Œ๋ฅผ ํ•˜๋‚˜ํ•˜๋‚˜ ๊บผ๋‚ด์˜ค๋Š” ์ž‘์—…์ด ํ•„์š” ์—†๋‹ค.

 - ๋ฐ˜๋ณต ์ž‘์—…์˜ ์ œ์–ด๋ฅผ ์ปฌ๋ ‰์…˜ ๋‚ด๋ถ€๋กœ ์˜ฎ๊ฒจ, ์ตœ์ ํ™”๋œ ๋ฐฉ์‹์œผ๋กœ ์ฒ˜๋ฆฌํ•œ๋‹ค.

 

2. ํšจ์œจ์ ์ธ ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.

 - ์ŠคํŠธ๋ฆผ API๋Š” ๋ฉ€ํ‹ฐ์ฝ”์–ด CPU๋ฅผ ์ตœ๋Œ€ํ•œ ํ™œ์šฉํ•˜์—ฌ ์ž‘์—…์„ ์ž๋™์œผ๋กœ ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌํ•˜๋„๋ก ๊ตฌํ˜„๋˜์–ด ์žˆ๋‹ค.

 - ๊ฐœ๋ฐœ์ž๊ฐ€ ์ž‘์—…์„ ๋ถ„๋ฐฐํ•˜๊ณ , ์Šค๋ ˆ๋“œ๋ฅผ ์ œ์–ดํ•˜๋Š” ๋ฒˆ๊ฑฐ๋กœ์šด ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค.

 - ๋ณ‘๋ ฌ ์ŠคํŠธ๋ฆผ (parallelStream())

 

3. ํ•จ์ˆ˜ํ˜• ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด, ๋‹ค์–‘ํ•œ ์š”์†Œ ์ฒ˜๋ฆฌ ๋กœ์ง์„ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค.

 - ์ฝ”๋“œ๊ฐ€ ๊ฐ„๊ฒฐํ•˜๊ณ , ์ง๊ด€์ ์ด๋ฏ€๋กœ ๊ฐ€๋…์„ฑ์ด ์ข‹์•„์ง„๋‹ค.

 - ๋žŒ๋‹ค์‹์€ ์ต๋ช… ๋ฉ”์„œ๋“œ์ฒ˜๋Ÿผ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ, ์ผํšŒ์„ฑ ์ž‘์—…์— ์ ํ•ฉํ•˜๋‹ค!

 

4. ์ค‘๊ฐ„ ์ฒ˜๋ฆฌ์™€ ์ตœ์ข… ์ฒ˜๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ํŒŒ์ดํ”„๋ผ์ธ์„ ํ˜•์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

 - ์ค‘๊ฐ„ ์—ฐ์‚ฐ ๋ฉ”์„œ๋“œ: filter(), map(), sorted() ๋“ฑ

 - ์ตœ์ข… ์—ฐ์‚ฐ ๋ฉ”์„œ๋“œ: forEach(), collect() ๋“ฑ

 - ์ŠคํŠธ๋ฆผ ์—ฌ๋Ÿฌ ๊ฐœ๋ฅผ ์ฒด์ด๋‹ํ•  ์ˆ˜ ์žˆ๋‹ค.

728x90