โจ์๋ฐ ํจ์ํ ํ๋ก๊ทธ๋๋ฐโจ
๐ [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() ๋ฑ
- ์คํธ๋ฆผ ์ฌ๋ฌ ๊ฐ๋ฅผ ์ฒด์ด๋ํ ์ ์๋ค.
'๊ฐ์ธ ๊ณต๋ถ > Java, Python' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
JVM ํ ์์ญ๊ณผ GC (0) | 2025.01.30 |
---|---|
[Java] ๋๋ค์, ๋ฉ์๋์ฐธ์กฐ (0) | 2025.01.09 |
[Java] Functional Interface (ํจ์ํ ์ธํฐํ์ด์ค) (0) | 2025.01.09 |
[Java] JRE์ JDK (2) | 2025.01.02 |
[Java] Java์ ํน์ง, Java ์คํ ๊ณผ์ , ์ธํฐํ๋ฆฌํฐ์ JIT ์ปดํ์ผ๋ฌ (0) | 2025.01.02 |