728x90
๋ฐ์ํ
๐ 1. Function ์ธํฐํ์ด์ค
Function<T, R>๋ ์๋ฐ์ ํจ์ํ ์ธํฐํ์ด์ค๋ก, ์ ๋ ฅ ํ์ T์ ์ถ๋ ฅ ํ์ R์ ๊ฐ๋ ํจ์๋ฅผ ์ ์ํ ์ ์์ต๋๋ค.
@FunctionalInterface
public interface Function<T, R> {
R apply(T t); // T๋ฅผ ์
๋ ฅ๋ฐ์ R์ ๋ฐํ
}
โ ์์ ์ค๋ช :
Function<String, Integer> stringToInt;
- Function<String, Integer>: String์ ์ ๋ ฅ์ผ๋ก ๋ฐ์ Integer๋ฅผ ๋ฐํํ๋ ํจ์๋ฅผ ์ ์ํ๋ ํจ์ํ ์ธํฐํ์ด์ค์ ๋๋ค.
- stringToInt๋ Function ํ์ ์ ์ฐธ์กฐ ๋ณ์๋ฅผ ์ ์ธํ ๊ฒ์ ๋๋ค.
๐ 2. ๋๋ค ํํ์ (Lambda Expression)
๋๋ค ํํ์์ ์ต๋ช ํจ์๋ฅผ ๊ฐ๊ฒฐํ๊ฒ ์์ฑํ๋ ๋ฌธ๋ฒ์ ๋๋ค.
stringToInt = (s) -> Integer.parseInt(s);
- (s) → String ํ์ ์ ๋งค๊ฐ๋ณ์ s๋ฅผ ๋ฐ์ต๋๋ค.
- -> → ๋๋ค ์ฐ์ฐ์ (์ ๋ ฅ๊ณผ ์คํ๋ถ๋ฅผ ๋ถ๋ฆฌ)
- Integer.parseInt(s) → s๋ฅผ int๋ก ๋ณํํ๋ Integer ํด๋์ค์ ์ ์ ๋ฉ์๋ ํธ์ถ
๐ฆ ์ฌ์ฉ ์์ :
System.out.println(stringToInt.apply("100")); // ์ถ๋ ฅ: 100
๐ 3. ๋ฉ์๋ ์ฐธ์กฐ (Method Reference)
๋ฉ์๋ ์ฐธ์กฐ๋ ๋๋ค ํํ์์ ๋์ฑ ๊ฐ๊ฒฐํ๊ฒ ์์ฑํ๋ ๋ฐฉ์์ ๋๋ค.
stringToInt = Integer::parseInt;
โ ํด์:
- Integer::parseInt → Integer ํด๋์ค์ ์ ์ ๋ฉ์๋ parseInt๋ฅผ ์ฐธ์กฐ.
- ๋ฉ์๋ ์ฐธ์กฐ๋ ๊ธฐ์กด ๋๋ค ํํ์์ ๊ฐ๋ตํ๋ ํํ์ ๋๋ค.
- ์ ์ฝ๋๋ s -> Integer.parseInt(s)์ ๋์ผํ๊ฒ ์๋ํฉ๋๋ค.
๐ 4. apply() ๋ฉ์๋ ์ฌ์ฉ
Function ์ธํฐํ์ด์ค์์ ์ ๊ณตํ๋ apply() ๋ฉ์๋๋ ์ ์๋ ํจ์์ ๋ก์ง์ ์คํํฉ๋๋ค.
stringToInt.apply("100"); // ๊ฒฐ๊ณผ: 100
- apply ๋ฉ์๋๋ "100"์ ์ ๋ ฅ์ผ๋ก ๋ฐ์ Integer.parseInt("100")์ ์คํํ๊ณ , ๊ฒฐ๊ณผ๋ก 100์ ๋ฐํํฉ๋๋ค.
๐ 5. ์ ๋ฆฌ: Function vs ๋๋ค์ vs ๋ฉ์๋ ์ฐธ์กฐ
๋ฐฉ์ ์ค๋ช ์์
| ์ต๋ช ํด๋์ค | ํด๋์ค๋ฅผ ์ง์ ์ ์ํ๊ณ ์ฌ์ฉ | new Function<String, Integer>() { public Integer apply(String s) { return Integer.parseInt(s); }} |
| ๋๋ค ํํ์ | ์ต๋ช ํจ์๋ฅผ ๊ฐ๊ฒฐํ๊ฒ ์ ์ | (s) -> Integer.parseInt(s) |
| ๋ฉ์๋ ์ฐธ์กฐ | ๋ฉ์๋ ์ฐธ์กฐ๋ก ๊ฐ๊ฒฐํ๊ฒ ํํ | Integer::parseInt |
๐ 6. ์์ ์ฝ๋ (์ ์ฒด)
import java.util.function.Function;
public class LambdaExample {
public static void main(String[] args) {
// ๋๋ค ํํ์ ์ฌ์ฉ
Function<String, Integer> stringToIntLambda = (s) -> Integer.parseInt(s);
System.out.println("Lambda ๊ฒฐ๊ณผ: " + stringToIntLambda.apply("123"));
// ๋ฉ์๋ ์ฐธ์กฐ ์ฌ์ฉ
Function<String, Integer> stringToIntMethodRef = Integer::parseInt;
System.out.println("Method Reference ๊ฒฐ๊ณผ: " + stringToIntMethodRef.apply("123"));
}
}
โ ์ถ๋ ฅ:
Lambda ๊ฒฐ๊ณผ: 123
Method Reference ๊ฒฐ๊ณผ: 123
๐ฏ ์์ฝ:
- Function<T, R>: T๋ฅผ ๋ฐ์ R์ ๋ฐํํ๋ ํจ์ํ ์ธํฐํ์ด์ค
- ๋๋ค ํํ์ ((x) -> {...}): ๊ฐ๊ฒฐํ๊ฒ ์ต๋ช ํจ์ ์ ์
- ๋ฉ์๋ ์ฐธ์กฐ (ClassName::method): ์ด๋ฏธ ์กด์ฌํ๋ ๋ฉ์๋๋ฅผ ์ฐธ์กฐํ๋ ๋ฐฉ์
์๋ฐ 8 ์ด์์์ ์ฌ์ฉ๋๋ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ ํต์ฌ ๊ฐ๋ ์ ๋๋ค.
'Category > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [JAVA] instanceof vs getClass() ์์๋ณด๊ธฐ (1) | 2025.02.27 |
|---|---|
| [JAVA] var๋? (0) | 2025.02.27 |
| [JAVA] ๋ฐ๋ณต๋ฌธ ์ ๋ฆฌ (0) | 2025.01.12 |