๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

ํ•จ์ˆ˜ํ˜• ์ธํ„ฐํŽ˜์ด์Šค, ๋žŒ๋‹ค์‹

์‹œํ๋ฆฌํ‹ฐ์ง€ํ˜ธ 2024. 1. 9.

ํ•จ์ˆ˜ํ˜• ์ธํ„ฐํŽ˜์ด์Šค

ํ•จ์ˆ˜ํ˜• ์ธํ„ฐํŽ˜์ด์Šค๋ž€ ๋‹จ ํ•˜๋‚˜์˜ ์ถ”์ƒ ๋ฉ”์„œ๋“œ๋งŒ ์„ ์–ธ๋œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

 

public interface InterFaceTest {
    int test(int a, int b);
}

 

-์ œ์•ฝ ์กฐ๊ฑด

์ผ๋ฐ˜ ์ธํ„ฐํŽ˜์ด์Šค์™€๋Š” ๋‹ค๋ฅด๊ฒŒ ํ•จ์ˆ˜ํ˜• ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๋‹จ ํ•˜๋‚˜์˜ ์ถ”์ƒ ๋ฉ”์„œ๋“œ๋งŒ ์„ ์–ธํ•ด์•ผํ•œ๋‹ค.

 

์™œ๋‚˜ํ•˜๋ฉด, int test(int a, int b) -> a + b;์™€ ๊ฐ™์ด 1 : 1 ๋กœ ๋Œ€์‘ ๋˜์–ด์•ผ ํ•˜๋Š”๋ฐ ๋‘ ๊ฐ€์ง€๋กœ ํ•ด๋†“์œผ๋ฉด ๋ถˆ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

@FunctionalInterface

๊ฐœ๋ฐœ์ž๊ฐ€ ์ด๋Ÿฌํ•œ ์ œ์•ฝ์„ ์ž˜ ์ค€์ˆ˜ํ•˜์˜€๋Š”์ง€ ์ž๋ฐ” ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ํ†ตํ•ด ํ™•์ธ์‹œํ‚ค๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ธํ„ฐํŽ˜์ด์Šค ์œ„์—

@FunctionalInterface ์–ด๋…ธํ…Œ์ด์…˜์„ ์ถ”๊ฐ€ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.

 

๋žŒ๋‹ค์‹์ด๋ž€

 

์‰ฝ๊ฒŒ ๋งํ•ด ๋ฉ”์„œ๋“œ๋ฅผ "ํ•˜๋‚˜์˜ ์‹"์œผ๋กœ ํ‘œํ˜„ํ•œ ๊ฒƒ์ด๋‹ค.

 

ํ•˜๋‚˜์˜ ์‹์œผ๋กœ ํ‘œํ˜„ํ•˜์—ฌ ํ›จ์”ฌ ๊ฐ„๋žตํ•˜๊ฒŒ ํ‘œํ˜„์ด ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋˜๋ฉฐ, ๋ฉ”์„œ๋“œ์˜ ์ด๋ฆ„๊ณผ ๋ฐ˜ํ™˜๊ฐ’์ด ์—†์–ด์ง€๋ฏ€๋กœ,

"์ต๋ช…ํ•จ์ˆ˜"

๋ผ๊ณ ๋„ ํ•œ๋‹ค.

 

์ด๋ฏธ์ง€ ์ถœ์ฒ˜: https://hstory0208.tistory.com/entry/Java%EC%9E%90%EB%B0%94-%EB%9E%8C%EB%8B%A4%EC%8B%9DLambda%EC%9D%B4%EB%9E%80-%EA%B7%B8%EB%A6%AC%EA%B3%A0-%EC%82%AC%EC%9A%A9%EB%B2%95

 

 

๋žŒ๋‹ค์‹์€ ์–ธ์ œ ์‚ฌ์šฉํ•˜๋‚˜?

 

์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์žˆ์„ ๋•Œ, ๊ตณ์ด ์žฌ์‚ฌ์šฉํ•˜์ง€ ๋ง๊ณ  ํŠน์ •ํ•œ ๊ฒฝ์šฐ๋งŒ ์ด์šฉํ• ๋•Œ์— ๊ตฌํ˜„ ํด๋ž˜์Šค๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ด ๊ท€์ฐฎ์„ ์ˆ˜๊ฐ€ ์žˆ๋‹ค.

 ์ด๋•Œ ์šฐ๋ฆฌ๋Š” ์ต๋ช… ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ธํ„ฐํŽ˜์ด์Šค์˜ ์ถ”์ƒ๋ฉ”์„œ๋“œ๋ฅผ ์žฌ์ •์˜ ํ•˜๊ฒŒ ๋˜๋Š”๋ฐ

 

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());

 

์ดํ•˜ ๊ฐ’์„ ์ฐธ์กฐํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๋Œ“๊ธ€