ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Java] ํ•จ์ˆ˜ํ˜• ์ธํ„ฐํŽ˜์ด์Šค์™€ ๋žŒ๋‹ค
    ๐Ÿ’ปProgramming/Java 2024. 2. 23. 17:10

    ํ•จ์ˆ˜ํ˜• ์ธํ„ฐํŽ˜์ด์Šค๋ž€?

    ์ถ”์ƒ ๋ฉ”์„œ๋“œ๋ฅผ ๋”ฑ 1๊ฐœ๋งŒ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์ธํ„ฐํŽ˜์ด์Šค.

    SAM(Single Abstract Interface) ์ธํ„ฐํŽ˜์ด์Šค๋ผ๊ณ ๋„ ํ•œ๋‹ค. 

    @FunctionalInterface๋ฅผ ์ด์šฉํ•˜์—ฌ ํ‘œํ˜„ํ•œ๋‹ค. 

    @FunctionalInterface
    public interface RunSomething {
        void doIt();
    }

     

    ์ž๋ฐ” 8์ด์ƒ๋ถ€ํ„ฐ๋Š” abstract๋ฅผ ๋ช…์‹œํ•ด์ฃผ์ง€ ์•Š์•„๋„ ์ž๋™์œผ๋กœ ์ถ”์ƒ ๋ฉ”์„œ๋“œ๋กœ ๊ฐ„์ฃผ๋œ๋‹ค.

    ๋งŒ์•ฝ @FunctionalInterface์–ด๋…ธํ…Œ์ด์…˜์„ ๋ถ™์ด๊ณ  ์ถ”์ƒ ๋ฉ”์„œ๋“œ๋ฅผ ๋‘๊ฐœ ์ด์ƒ ์ถ”๊ฐ€ํ–ˆ์„ ๊ฒฝ์šฐ์— ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. 

    static ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ๋˜, default ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ๋˜ ์ถ”์ƒ ๋ฉ”์„œ๋“œ๊ฐ€ ํ•œ๊ฐœ์ธ ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๋ฌด์กฐ๊ฑด "ํ•จ์ˆ˜ํ˜• ์ธํ„ฐํŽ˜์ด์Šค"์ด๋‹ค.

    ํ•จ์ˆ˜ํ˜• ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ€?

    Java8 ์ด์ „: ์ต๋ช… ๋‚ด๋ถ€ ํด๋ž˜์Šค ์ด์šฉ

    public class Foo {
        public static void main(String[] args) {
            // ์ต๋ช… ๋‚ด๋ถ€ ํด๋ž˜์Šค (anonymous inner class)
            RunSomething runSomething = new RunSomething() {
                @Override
                public void doIt() {
                    System.out.println("Hello!");
                    System.out.println("Hi!");
                }
            };
        }
    }

     

    java8 ์ดํ›„: ๋žŒ๋‹ค ํ‘œํ˜„์‹์„ ์ด์šฉ

    public class Foo {
        public static void main(String[] args) {
            // ์ต๋ช… ๋‚ด๋ถ€ ํด๋ž˜์Šค (anonymous inner class)
            RunSomething runSomething = () -> {
                System.out.println("Hello!");
                System.out.println("Hi!");
            };
        }
    }

    ์™€ ๊ฐ™์ด ์ฝ”๋“œ๋ฅผ ํ›จ์”ฌ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์ถ•์†Œ ๊ฐ€๋Šฅ.

    ๋žŒ๋‹ค ํ‘œํ˜„์‹(Lambda Expressions)์ด๋ž€?

    ํ•จ์ˆ˜ํ˜• ์ธํ„ฐํŽ˜์ด์Šค์˜ "์ธ์Šคํ„ด์Šค"๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ์“ฐ์ผ ์ˆ˜ ์žˆ๋‹ค.

    ์ฝ”๋“œ๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.

    ๋ฉ”์†Œ๋“œ์˜ ๋งค๊ฐœ๋ณ€์ˆ˜, ๋ฆฌํ„ด ํƒ€์ž…, ๋ณ€์ˆ˜๋กœ ๋งŒ๋“ค์–ด ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

    Java์—์„œ ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด๋ž€?

    ํ•จ์ˆ˜๋ฅผ First class object๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

    ์ˆœ์ˆ˜ ํ•จ์ˆ˜(Pure function)

       - ์‚ฌ์ด๋“œ ์ดํŽ™ํŠธ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์—†๋‹ค -> ํ•จ์ˆ˜ ๋ฐ–์— ์žˆ๋Š” ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜์ง€ ๋ชปํ•œ๋‹ค.

       (* ํ•จ์ˆ˜ ๋ฐ–์— ์žˆ๋Š” ๊ฐ’์„ ์ฐธ์กฐํ•˜๊ฑฐ๋‚˜ ๋ณ€๊ฒฝํ•˜๋ ค๊ณ  ํ•˜๋ฉด ์•ˆ๋œ๋‹ค. ์˜ค๋กœ์ง€ ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ ์“ฐ๋Š” ๊ฐ’, ํ•จ์ˆ˜๊ฐ€ ์ „๋‹ฌ๋ฐ›์€ ํŒŒ๋ผ๋ฏธํ„ฐ๋งŒ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•˜๋‹ค.)

       - ํ•จ์ˆ˜ ๋ฐ–์— ์ •์˜๋˜์–ด์žˆ๋Š” ์ƒํƒœ๊ฐ€ ์—†๋‹ค.

    ๊ณ ์ฐจ ํ•จ์ˆ˜(High-Order Function): ํ•จ์ˆ˜๊ฐ€ ํ•จ์ˆ˜๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›์„ ์ˆ˜ ์žˆ๊ณ  ํ•จ์ˆ˜๋ฅผ ๋ฆฌํ„ดํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

    ๋ถˆ๋ณ€์„ฑ

    ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 

    ํ—ท๊ฐˆ๋ฆฌ๋Š” ๋ฌธ์ œ์™€ ์˜ค๋ฅ˜๋ฅผ ํ”ผํ•  ์ˆ˜ ์žˆ๋‹ค. 

    ํ…Œ์ŠคํŠธ์™€ ๋””๋ฒ„๊น… ์šฉ์ด

    ๋” ๋‚˜์€ ๋ชจ๋“ˆํ™”์™€ ์งง์€ ์ฝ”๋“œ๋ฅผ ์ œ๊ณต

    ๊ฐœ๋ฐœ ์ƒ์‚ฐ์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค

    ๊ฐ€๋…์„ฑ์ด ๋†’์€ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ ์‰ฝ๋‹ค

    ๋ถ€์ˆ˜ ํšจ๊ณผ๋ฅผ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ๋‹ค

    ํ•จ์ˆ˜ ๋‹จ์œ„์˜ ์ฝ”๋“œ ์žฌ์‚ฌ์šฉ ์šฉ์ด

    ํ”„๋กœ๊ทธ๋žจ์˜ ๋™์ž‘์„ ์˜ˆ์ธกํ•˜๊ธฐ ์‰ฝ๋‹ค

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

    ์ˆ˜๋งŽ์€ ํ•จ์ˆ˜๋“ค์„ ํŒŒ์•…ํ•˜๊ณ  ์œ ์ง€๊ด€๋ฆฌํ•˜๊ธฐ ํž˜๋“ฌ

    ๊ด‘๋ฒ”์œ„ํ•œ ํ™˜๊ฒฝ ์„ค์ •์ด ํ•„์š”ํ•  ์ˆ˜ ์žˆ๋‹ค

    ํ•จ์ˆ˜๊ฐ€ ๋งŽ์•„์งˆ ์ˆ˜๋ก ํ•จ์ˆ˜๋ฅผ ์กฐํ•ฉํ•˜๊ธฐ ๋ณต์žกํ•ด์ง€๋ฉฐ ๊พธ์ค€ํ•œ ๋ฆฌํŒฉํ† ๋ง์ด ํ•„์š”ํ•  ์ˆ˜ ์žˆ๋‹ค

    References

    ์ธํ”„๋Ÿฐ - ๋ฐฑ๊ธฐ์„ ์˜ ๋” ์ž๋ฐ”, Java 8

    https://code-lab1.tistory.com/245

    '๐Ÿ’ปProgramming > Java' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

    [Java] HashMap ์‚ฌ์šฉ๋ฒ•  (0) 2024.03.10
    [Java] extends์™€ implements์˜ ์ฐจ์ด  (0) 2023.10.04
Designed by Tistory.