ํจ์ํ ์ธํฐํ์ด์ค, ๋๋ค์
ํจ์ํ ์ธํฐํ์ด์ค
ํจ์ํ ์ธํฐํ์ด์ค๋ ๋จ ํ๋์ ์ถ์ ๋ฉ์๋๋ง ์ ์ธ๋ ์ธํฐํ์ด์ค๋ฅผ ์๋ฏธํ๋ค.
public interface InterFaceTest {
int test(int a, int b);
}
-์ ์ฝ ์กฐ๊ฑด
์ผ๋ฐ ์ธํฐํ์ด์ค์๋ ๋ค๋ฅด๊ฒ ํจ์ํ ์ธํฐํ์ด์ค๋ ๋จ ํ๋์ ์ถ์ ๋ฉ์๋๋ง ์ ์ธํด์ผํ๋ค.
์๋ํ๋ฉด, int test(int a, int b) -> a + b;์ ๊ฐ์ด 1 : 1 ๋ก ๋์ ๋์ด์ผ ํ๋๋ฐ ๋ ๊ฐ์ง๋ก ํด๋์ผ๋ฉด ๋ถ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ด๋ค.
@FunctionalInterface
๊ฐ๋ฐ์๊ฐ ์ด๋ฌํ ์ ์ฝ์ ์ ์ค์ํ์๋์ง ์๋ฐ ์ปดํ์ผ๋ฌ๋ฅผ ํตํด ํ์ธ์ํค๊ธฐ ์ํด์๋ ์ธํฐํ์ด์ค ์์
@FunctionalInterface ์ด๋ ธํ ์ด์ ์ ์ถ๊ฐํด์ฃผ์ด์ผ ํ๋ค.
๋๋ค์์ด๋
์ฝ๊ฒ ๋งํด ๋ฉ์๋๋ฅผ "ํ๋์ ์"์ผ๋ก ํํํ ๊ฒ์ด๋ค.
ํ๋์ ์์ผ๋ก ํํํ์ฌ ํจ์ฌ ๊ฐ๋ตํ๊ฒ ํํ์ด ๊ฐ๋ฅํ๊ฒ ๋๋ฉฐ, ๋ฉ์๋์ ์ด๋ฆ๊ณผ ๋ฐํ๊ฐ์ด ์์ด์ง๋ฏ๋ก,
"์ต๋ช ํจ์"
๋ผ๊ณ ๋ ํ๋ค.
๋๋ค์์ ์ธ์ ์ฌ์ฉํ๋?
์ธํฐํ์ด์ค๊ฐ ์์ ๋, ๊ตณ์ด ์ฌ์ฌ์ฉํ์ง ๋ง๊ณ ํน์ ํ ๊ฒฝ์ฐ๋ง ์ด์ฉํ ๋์ ๊ตฌํ ํด๋์ค๋ฅผ ์์ฑํ๋ ๊ฒ์ด ๊ท์ฐฎ์ ์๊ฐ ์๋ค.
์ด๋ ์ฐ๋ฆฌ๋ ์ต๋ช ํด๋์ค๋ฅผ ์ฌ์ฉํ์ฌ ์ธํฐํ์ด์ค์ ์ถ์๋ฉ์๋๋ฅผ ์ฌ์ ์ ํ๊ฒ ๋๋๋ฐ
class Main {
public static void main(String[] args) {
InterFaceTest ift = new InterFaceTest() {
@Override
public int test(int a, int b) {
return a + b;
}
};
System.out.println(ift.test(1,2)); //3
}
}
์ด๋ ๊ฒ ์ฒ์์ ์ต๋ช ๊ตฌํ ํด๋์ค๋ฅผ ์์ฑํด์ ๋ฉ์๋๋ฅผ ์ฌ์ ์ ํ๋ฉด, ๊ธธ์ด๊ฐ ๊ธธ์ด์ง๊ณ ๊ณง ๊ฐ๋ ์ฑ์ด ๋จ์ด์ง๋ค.
๊ทธ๋์ ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ๋ฐฉ๋ฒ์ด ์๋๋ฐ, ๋ฐ๋ก ๋๋ค์์ด๋ค.
class Main {
public static void main(String[] args) {
InterFaceTest ift = (a, b) -> a + b;
System.out.println(ift.test(1, 2)); //3
}
}
์ด๋ ๊ฒ ํจ์ํ ์ธํฐํ์ด์ค๋ฅผ ์ต๋ช ๊ตฌํ ํด๋์ค๋ก ๋๋ค์์ผ๋ก ์ฌ์ฉํ๋ฉด ํจ์ฌ ์งง์ ์ฝ๋๋ฅผ ๋ง๋ค ์ ์๋ค.
์ต๋ช ํจ์๋ผ๊ณ ๋ ํ๋ค.
ํ์ฉ ์์
์ฐ์ , BookFilter ์ธํฐํ์ด์ค๋ฅผ ๋ง๋ค์ด์ฃผ๊ณ ํจ์ํ ์ธํฐํ์ด์ค๋ผ๋ ๊ฒ์ ์ ์ธํ๋ ์ด๋ ธํ ์ด์ ์ ๋ฌ์์ค๋ค.
@FunctionalInterface
public interface BookFilter {
boolean fileter(Books book);
}
๊ทธ๋ฐ ๋ค์ ์ด๋ฅผ ํ์ฉํด์ ํจ์ํ ์ธํฐํ์ด์ค์ ๊ฐ์ฒด๋ฅผ ๋งค๊ฐ๋ณ์๋ฅผ ๋ฐ๋ ๋ฉ์๋ ์์ ๋ฃ์ด ๊ทธ ๋ฉ์๋๋ฅผ ๋๋ฆฐ๋ค.
// ์ฒซ ๋ฒ์งธ ๋ฐฉ๋ฒ
BookFilter b = new BookFilter() {
@Override
public boolean fileter(Books book) {
return category.equals(book.category.strip());
}
};
// ๋ ๋ฒ์งธ ๋ฐฉ๋ฒ(๋๋ค์)
BookFilter b = (book) -> category.equals(book.category.strip());
==============================================================================
public static int getAllBooksFilterby(BookFilter filter){
int count = 0;
for (int i = 0; i < books.size(); i++)
if (filter.fileter(books.get(i))) {
count++;
System.out.println("์ ๋ชฉ : " + books.get(i).bookName.strip() +", ์นดํ
๊ณ ๋ฆฌ : "
+ books.get(i).category.strip() + ", ๋์ถ ๊ฐ๋ฅ ์ฌ๋ถ : " + books.get(i).yesorno.strip());
}
return count;
}
getAllBooksFilterby(b);
์ด๋ ๊ฒ ๋ค์ด๊ฐ๋ฉด b ๊ฐ์ฒด์ ๋ฉ์๋๋ฅผ ํ์ฉํด์ ๊ฐ์ ๋ฐํํ๋ค.
๋ํ,
getAllBooksFilterby((book) -> category.equals(book.category.strip()));
๋ณ์ b๊ฐ
BookFilter b = (book) -> category.equals(book.category.strip());
์ดํ ๊ฐ์ ์ฐธ์กฐํ๊ณ ์๊ธฐ ๋๋ฌธ์ด๋ค.
'๊ฐ๋ฐ ์ง์, ์คํฌ๋ฆฝํธ > Java ๋ฌธ๋ฒ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Java์ Stream API์์ ์ฌ์ฉ๋๋ map ๋ฉ์๋์ ๋ฉ์๋ ์ฐธ์กฐ(method references) (0) | 2024.02.06 |
---|---|
java.util.function ํจํค์ง(์ง์ ์์ฑ์ค..) (0) | 2024.01.09 |
๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ(Object Oriented Programming) (1) | 2024.01.07 |
ํด๋์ค์ ์๋ฃ๊ตฌ์กฐ (1) | 2024.01.07 |
eclipse๋ก jar ํ์ผ ์คํํ๊ธฐ (0) | 2024.01.06 |
๋๊ธ