λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

λͺ©λ‘μ΄ μ—†μŠ΅λ‹ˆλ‹€.

[JAVA] λ‚΄λΆ€ν΄λž˜μŠ€

πŸ—£ Language/JAVA
    λ°˜μ‘ν˜•

    λ‚΄λΆ€ 클래슀의 μ’…λ₯˜


    λ‚΄λΆ€ ν΄λž˜μŠ€λŠ” 클래슀 μ•ˆμ— λ‹€λ₯Έ 클래슀λ₯Ό μ„ μ–Έν•˜κ³  ν™œμš©ν•˜λŠ” 것인데 μ΄λŠ” λ©€λ²„λ³€μˆ˜μ™€ 같이 μ„ μ–Έλ˜λŠ” μœ„μΉ˜μ— λ”°λΌμ„œ μ’…λ₯˜κ°€ λ‚˜λ‰œλ‹€. μ‚¬μš©λ˜λŠ”κ²ƒλ„ λ©€λ²„λ³€μˆ˜μ™€ λΉ„μŠ·ν•˜λ‹€. (JDK 1.1 이후에 μΆ”κ°€λœ κΈ°λŠ₯)

    λ‚΄λΆ€ν΄λž˜μŠ€λŠ” 주둜 AWTλ‚˜ Swingκ³Ό 같은 GUIμ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 이벀트처리 μ™Έμ—λŠ” 잘 μ‚¬μš©ν•˜μ§€ μ•Šμ„ μ •λ„λ‘œ μ‚¬μš©λΉˆλ„κ°€ 높지 μ•ŠκΈ° λ•Œλ¬Έμ— λ‚΄λΆ€ 클래슀의 κΈ°λ³Έ 원리와 νŠΉμ§•μ„ μ΄ν•΄ν•˜λŠ” μ •λ„κΉŒμ§€λ§Œ ν•™μŠ΅ν•΄λ„ μΆ©λΆ„ν•˜λ‹€.


    λ‚΄λΆ€ 클래슀의 μ’…λ₯˜λŠ” λ‹€μŒκ³Ό κ°™λ‹€

    1. 멀버 λ‚΄λΆ€ 클래슀

    - 멀버 λ³€μˆ˜ μ„ μ–Έν•˜λŠ” μœ„μΉ˜μ— μ •μ˜ν•˜λŠ” λ‚΄λΆ€ 클래슀

    - μ™ΈλΆ€ 클래슀의 μΈμŠ€ν„΄μŠ€κ°€ μƒμ„±λ˜μ–΄μ•Όλ§Œ 객체 생성 κ°€λŠ₯

    - 주둜 μΈμŠ€ν„΄μŠ€ 멀버듀과 κ΄€λ ¨λœ μž‘μ—…μ— μ‚¬μš©λ  λͺ©μ μœΌλ‘œ μ„ μ–Έ

    2. static λ‚΄λΆ€ 클래슀 (μ€‘μ²©ν΄λž˜μŠ€)

    - 멀버 λ³€μˆ˜λ₯Ό μ„ μ–Έν•˜λŠ” μœ„μΉ˜μ—μ„œ static으둜 μ •μ˜ν•œ λ‚΄λΆ€ 클래슀

    - μ™ΈλΆ€ ν΄λž˜μŠ€μ™€ μƒκ΄€μ—†λŠ” 클래슀라고 생각해도 됨

    - static멀버, 특히 staticλ©”μ„œλ“œμ—μ„œ μ‚¬μš©λ  λͺ©μ μœΌλ‘œ μ„ μ–Έ

    3. 지역 λ‚΄λΆ€ 클래슀

    3-1. 이름이 μžˆλŠ” 지역 클래슀

    - μ™ΈλΆ€ 클래슀의 λ©”μ„œλ“œλ‚˜ μ΄ˆκΈ°ν™”λΈ”λŸ­ μ•ˆμ— μ„ μ–Έν•˜λ©°, μ„ μ–Έλœ μ˜μ—­ λ‚΄λΆ€μ—μ„œλ§Œ μ‚¬μš© κ°€λŠ₯

    3-2. 이름이 μ—†λŠ” 지역 클래슀 (읡λͺ… 클래슀) - λžŒλ‹€ ν‘œν˜„μ‹(lambda expression)

    - 클래슀의 μ„ μ–Έκ³Ό 객체의 생성을 λ™μ‹œμ— ν•˜λŠ” μ΄λ¦„μ—†λŠ” 클래슀(일회용)


    ν•œ 클래슀λ₯Ό λ‹€λ₯Έ 클래슀의 λ‚΄λΆ€ 클래슀둜 μ„ μ–Έν•˜λ©΄ 두 클래슀의 멀버듀간에 μ„œλ‘œ 접근이 μ‰¬μ›Œμ§€κ³  μ™ΈλΆ€μ—λŠ” λΆˆν•„μš”ν•œ 클래슀λ₯Ό κ°μΆ€μœΌλ‘œμ„œ μ½”λ“œμ˜ λ³΅μž‘μ„±μ„ 쀄일 수 μžˆλ‹€.


    μˆœμ„œλŒ€λ‘œ 예제λ₯Ό μ‚΄νŽ΄λ³΄μž.


    예제 1


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    class InnerEx1 { 
          class InstanceInner { 
                int iv=100
                // static int cv=100;                   // μ—λŸ¬! staticλ³€μˆ˜λ₯Ό μ„ μ–Έν•  μˆ˜ μ—†λ‹€. 
                final static int CONST = 100;       // static final은 μƒμˆ˜μ΄λ―€λ‘œ ν—ˆμš©ν•œλ‹€. 
          } 
          static class StaticInner { 
                int iv=200
                static int cv=200;       //       static클래슀만 static멀버λ₯Ό μ •μ˜ν•  μˆ˜ μžˆλ‹€. 
          } 
          void myMethod() { 
                class LocalInner { 
                      int iv=300
                      // static int cv=300;                   // μ—λŸ¬! staticλ³€μˆ˜λ₯Ό μ„ μ–Έν•  μˆ˜ μ—†λ‹€. 
                      final static int CONST = 300;       // static final은 μƒμˆ˜μ΄λ―€λ‘œ ν—ˆμš©ν•œλ‹€. 
                } 
          } 
          public static void main(String args[]) { 
                System.out.println(InstanceInner.CONST); 
                System.out.println(StaticInner.cv); 
          } 
    }
    cs


    [μ‹€ν–‰κ²°κ³Ό]

    100
    200


    λ‚΄λΆ€ 클래슀의 μœ ν˜• μ€‘μ—μ„œ static λ‚΄λΆ€ 클래슀(μ€‘μ²©ν΄λž˜μŠ€)만 static멀버λ₯Ό κ°€μ§ˆ 수 μžˆλ‹€. 거의 쓰이지 μ•Šμ§€λ§Œ λ‚΄λΆ€ν΄λž˜μŠ€μ—μ„œ staticλ³€μˆ˜λ₯Ό μ„ μ–Έν•΄μ•Όν•˜λŠ” 경우 static λ‚΄λΆ€ 클래슀λ₯Ό μ„ μ–Έν•΄μ•Όλ§Œ ν•œλ‹€.




    예제 2


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    class InnerEx2 { 
          class InstanceInner {} 
          static class StaticInner {} 
     
          InstanceInner iv = new InstanceInner(); // μΈμŠ€ν„΄μŠ€ λ©€λ²„κ°„μ—λŠ” μ„œλ‘œ μ§μ ‘ μ ‘근이 κ°€λŠ₯ν•˜λ‹€. 
          static StaticInner cv = new StaticInner();    // static λ©€λ²„κ°„μ—λŠ” μ„œλ‘œ μ§μ ‘ μ ‘근이 κ°€λŠ₯ν•˜λ‹€. 
     
          static void staticMethod() { 
                  // staticλ©€λ²„λŠ” μΈμŠ€ν„΄μŠ€ λ©€λ²„에 μ§μ ‘ μ ‘κ·Όν•  μˆ˜ μ—†λ‹€. 
                // InstanceInner obj1 = new InstanceInner();       
                StaticInner obj2 = new StaticInner(); 
     
                   // κ΅³μ΄ μ ‘κ·Όν•˜λ €λ©΄ μ•„λž˜μ™€ κ°™μ΄ κ°μ²΄λ₯Ό μƒμ„±ν•΄μ•Όν•œλ‹€. 
                // μΈμŠ€ν„΄μŠ€ λ‚΄λΆ€ν΄λž˜μŠ€λŠ” μ™ΈλΆ€ν΄λž˜μŠ€λ₯Ό λ¨Όμ € μƒμ„±ν•΄μ•Όλ§Œ μƒμ„±ν•  μˆ˜ μžˆλ‹€. 
                InnerEx2 outer = new InnerEx2(); 
                InstanceInner obj1 = outer.new InstanceInner(); 
          } 
     
          void instanceMethod() { 
                  // μΈμŠ€ν„΄μŠ€ λ©”μ„œλ“œμ—μ„œλŠ” μΈμŠ€ν„΄μŠ€λ©€λ²„와 static멀버 λͺ¨λ‘ μ ‘κ·Ό κ°€λŠ₯ν•˜λ‹€. 
                InstanceInner obj1 = new InstanceInner(); 
                StaticInner obj2 = new StaticInner(); 
                  // λ©”μ„œλ“œ λ‚΄μ— μ§€μ—­μ μœΌλ‘œ μ„ μ–Έλœ λ‚΄λΆ€ν΄λž˜μŠ€λŠ” μ™ΈλΆ€μ—μ„œ μ ‘κ·Όν•  μˆ˜ μ—†λ‹€. 
                // LocalInner lv = new LocalInner(); 
          } 
     
          void myMethod() { 
                class LocalInner {} 
                LocalInner lv = new LocalInner(); 
          } 
    }
    cs


    μΈμŠ€ν„΄μŠ€ λ©€λ²„λŠ” 같은 ν΄λž˜μŠ€μ— μžˆλŠ” μΈμŠ€ν„΄μŠ€λ©€λ²„μ™€ static멀버 λͺ¨λ‘ μ§μ ‘ν˜ΈμΆœμ΄ κ°€λŠ₯ν•˜μ§€λ§Œ, staticλ©€λ²„λŠ” μΈμŠ€ν„΄μŠ€λ©€λ²„λ₯Ό 직접 ν˜ΈμΆœν•  수 없듯이, λ‚΄λΆ€ν΄λž˜μŠ€μ˜ μΈμŠ€ν„΄μŠ€ν΄λž˜μŠ€μ™€ static클래슀 μ—­μ‹œ λ§ˆμ°¬κ°€μ§€λ‹€. 예λ₯Όλ“€μ–΄ λ‹€μŒκ³Ό 같은 μ˜ˆμ œμ—μ„œ μΈμŠ€ν„΄μŠ€ν΄λž˜μŠ€λŠ” μ™ΈλΆ€ 클래슀의 μΈμŠ€ν„΄μŠ€ 멀버λ₯Ό 객체 생성없이 λ°”λ‘œ μ‚¬μš©ν•  수 μžˆμ§€λ§Œ, μŠ€νƒœν‹±ν΄λž˜μŠ€λŠ” μ™ΈλΆ€ν΄λž˜μŠ€μ˜ μΈμŠ€ν„΄μŠ€λ©€λ²„λ₯Ό 객체 생성을 ν•΄μ£Όμ–΄μ•Ό μ‚¬μš©ν•  수 μžˆλ‹€.


    예제 3


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    class InnerEx3 { 
          private int outerIv = 0
          static int outerCv = 0
     
          class InstanceInner { 
                int iiv = outerIv;             // μ™ΈλΆ€ν΄λž˜μŠ€μ˜ private멀버도 μ ‘κ·Όκ°€λŠ₯ν•˜λ‹€. 
                int iiv2 = outerCv; 
          } 
     
          static class StaticInner { 
                // staticν΄λž˜μŠ€λŠ” μ™ΈλΆ€ν΄λž˜μŠ€μ˜ μΈμŠ€ν„΄μŠ€ λ©€λ²„에 μ ‘κ·Όν•  μˆ˜ μ—†λ‹€. 
                // int siv = outerIv; 
                static int scv = outerCv; 
          } 
     
            void myMethod() { 
                int lv = 0
                final int LV = 0
     
                class LocalInner { 
                      int liv = outerIv; 
                      int liv2 = outerCv; 
                        // μ™ΈλΆ€ν΄λž˜μŠ€μ˜ μ§€μ—­λ³€μˆ˜λŠ” final이 λΆ™μ€ λ³€μˆ˜(μƒμˆ˜)만 μ ‘κ·Όκ°€λŠ₯ν•˜λ‹€. 
                      // int liv3 = lv; 
                      int liv4 = LV; 
                } 
          }
    }
    cs


    지역 ν΄λž˜μŠ€λŠ” μ™ΈλΆ€ 클래슀의 μΈμŠ€ν„΄μŠ€λ©€λ²„μ™€ static멀버λ₯Ό λͺ¨λ‘ μ‚¬μš©ν•  수 있으며, 지역 ν΄λž˜μŠ€κ°€ ν¬ν•¨λœ λ©”μ„œλ“œμ—μ„œ μ •μ˜λœ μ§€μ—­λ³€μˆ˜λ„ μ‚¬μš©ν•  수 μžˆλ‹€. 단, final이 뢙은 μ§€μ—­λ³€μˆ˜λ§Œ μ ‘κ·Ό κ°€λŠ₯ν•˜λ‹€. λ©”μ„œλ“œκ°€ μˆ˜ν–‰μ„ λ§ˆμ³μ„œ μ§€μ—­λ³€μˆ˜κ°€ μ†Œλ©Έλœ μ‹œμ μ—λ„, 지역 클래슀의 μΈμŠ€ν„΄μŠ€κ°€ μ†Œλ©Έλœ μ§€μ—­λ³€μˆ˜λ₯Ό μ°Έμ‘°ν•˜λ €λŠ” κ²½μš°κ°€ λ°œμƒν•  수 있기 λ•Œλ¬Έμ— κ·Έλ ‡λ‹€κ³  ν•œλ‹€.


    예제 4


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    class Outer { 
          int value=10;       // Outer.this.value                         
     
          class Inner { 
                int value=20;       // this.value 
                void method1() { 
                      int value=30
                      System.out.println(" value :" + value); 
                      System.out.println(" this.value :" + this.value); 
                      System.out.println("Outer.this.value :" + Outer.this.value); 
                } 
          }
    }
     
    class InnerEx5 { 
          public static void main(String args[]) { 
                Outer outer = new Outer(); 
                Outer.Inner inner = outer.new Inner(); 
                inner.method1(); 
          } 
    }
    cs


    [μ‹€ν–‰κ²°κ³Ό]

    value :30 

    this.value :20 

    Outer.this.value :10 


    μœ„μ˜ μ˜ˆμ œλŠ” λ‚΄λΆ€ν΄λž˜μŠ€μ™€ μ™ΈλΆ€ν΄λž˜μŠ€μ— μ„ μ–Έλœ λ³€μˆ˜μ˜ 이름이 같을 λ•Œ λ³€μˆ˜ μ•žμ— 'this' λ˜λŠ” 'μ™ΈλΆ€ν΄λž˜μŠ€λͺ….this'λ₯Ό λΆ™μ—¬μ„œ μ„œλ‘œ ꡬ별할 수 μžˆλ‹€λŠ” 것을 보여쀀닀.



    읡λͺ… 클래슀 예제


    읡λͺ… ν΄λž˜μŠ€λŠ” μ΄λ¦„이 μ—†κΈ° λ•Œλ¬Έμ— μƒμ„±μžλ„ κ°€μ§ˆ 수 μ—†μœΌλ©°, μ‘°μƒν΄λž˜μŠ€μ˜ μ΄λ¦„μ΄λ‚˜ κ΅¬ν˜„ν•˜κ³ μž ν•˜λŠ” μΈν„°νŽ˜μ΄μŠ€μ˜ 이름을 μ‚¬μš©ν•΄μ„œ μ •μ˜ν•œλ‹€. λ•Œλ¬Έμ— ν•˜λ‚˜μ˜ 클래슀둜 μƒμ†λ°›λŠ” λ™μ‹œμ— μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•˜κ±°λ‚˜ ν•˜λ‚˜ μ΄μƒμ˜ μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•  수 μ—†λ‹€. μ˜€λ‘œμ§€ 단 ν•˜λ‚˜μ˜ 클래슀λ₯Ό μƒμ†λ°›κ±°λ‚˜ 단 ν•˜λ‚˜μ˜ μΈν„°νŽ˜μ΄μŠ€λ§Œμ„ κ΅¬ν˜„ν•  수 μžˆλ‹€.


    1
    2
    3
    4
    5
    6
    7
    8
    class InnerEx{ 
          Object iv = new Object(){ void method(){} };             // μ΅λͺ…ν΄λž˜μŠ€ 
          static Object cv = new Object(){ void method(){} };       // μ΅λͺ…ν΄λž˜μŠ€ 
     
          void myMethod() { 
                Object lv = new Object(){ void method(){} };       // μ΅λͺ…ν΄λž˜μŠ€ 
          } 
    }
    cs


    μœ„μ˜ μ˜ˆμ œλŠ” λ‹¨μˆœνžˆ 읡λͺ…ν΄λž˜μŠ€μ˜ μ‚¬μš© 예λ₯Ό 보여 μ€€ 것이닀. 이 예제λ₯Ό 컴파일 ν•˜λ©΄ λ‹€μŒκ³Ό 같이 4개의 클래슀파일이 μƒμ„±λœλ‹€.

    InnerEx.class

    InnerEx$1.class ← 읡λͺ…ν΄λž˜μŠ€

    InnerEx$2.class ← 읡λͺ…ν΄λž˜μŠ€

    InnerEx$3.class ← 읡λͺ…ν΄λž˜μŠ€


    읡λͺ…ν΄λž˜μŠ€λŠ” 이름이 μ—†κΈ° λ•Œλ¬Έμ— 'μ™ΈλΆ€ν΄λž˜μŠ€λͺ…$숫자.class'의 ν˜•μ‹μœΌλ‘œ 클래슀파일λͺ…이 κ²°μ •λœλ‹€.


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    import java.awt.*
    import java.awt.event.*
     
    class InnerEx
          public static void main(String[] args) 
          { 
                Button b = new Button("Start"); 
                b.addActionListener(new EventHandler()); 
          } 
     
    class EventHandler implements ActionListener 
          public void actionPerformed(ActionEvent e) { 
                System.out.println("Action Event occured!!!"); 
          } 
    }
    cs


    μœ„μ˜ 예제λ₯Ό 읡λͺ…ν΄λž˜μŠ€λ₯Ό μ΄μš©ν•΄μ„œ λ³€κ²½ν•˜λ©΄ λ‹€μŒκ³Ό 같이 λœλ‹€.


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    import java.awt.*
    import java.awt.event.*
     
    class InnerEx8 
          public static void main(String[] args) 
          { 
                Button b = new Button("Start"); 
                b.addActionListener(new ActionListener() { 
                            public void actionPerformed(ActionEvent e) { 
                                  System.out.println("Action Event occured!!!"); 
                            } 
                      } 
                ); 
          }
    }
    cs


    μœ„μ˜ 예제λ₯Ό λžŒλ‹€μ‹μ„ μ΄μš©ν•΄μ„œ λ³€κ²½ν•˜λ©΄ λ‹€μŒκ³Ό 같이 λœλ‹€.


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    import java.awt.*
    import java.awt.event.*
     
    class InnerEx
          public static void main(String[] args) 
          { 
                Button b = new Button("Start"); 
                b.addActionListener(()->
                       System.out.println("Action Event occured!!!"); 
                ); 
          }
    }
    cs


    μ΄λŸ°μ‹μœΌλ‘œ 주둜 AWTλ‚˜ Swingκ³Ό 같은 GUIμ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μ΄λ²€νŠΈμ²˜λ¦¬μ— μ‚¬μš©λœλ‹€.



    λžŒλ‹€μ‹μ€ ν•¨μˆ˜λ₯Ό λ³€μˆ˜μ— λ‹΄μ•„λ‘˜ 수 μžˆλŠ”λ° μžλ°” 8μ—μ„œ λžŒλ‹€μ‹μ΄ μΆ”κ°€λ˜κ³  λ‚˜μ„œλŠ” ν•˜λ‚˜μ˜ λ³€μˆ˜μ— ν•˜λ‚˜μ˜ ν•¨μˆ˜λ₯Ό 맀핑할 수 있게 λ˜μ—ˆλ‹€.


    1
    Func add = (int a, int b) -> a + b;
    cs


    μœ„μ™€κ°™μ΄ λ³€μˆ˜μ— ν•¨μˆ˜λ₯Ό λ‹΄κ³  μ‹Άμ„λ•Œ Funcμ΄λΌλŠ” νƒ€μž…μ€ 무엇이어야 ν• κΉŒ?


    λ°”λ‘œ interface이닀. μ•„λž˜μ™€ 같이 FuncμΈν„°νŽ˜μ΄μŠ€λ₯Ό μž‘μ„±ν•˜λ©΄ λœλ‹€


    1
    2
    3
    interface Func {
        public int calc(int a, int b);
    }
    cs


    이 μΈν„°νŽ˜μ΄μŠ€μ—μ„œλŠ” calcλΌλŠ” ν•˜λ‚˜μ˜ μΆ”μƒλ©”μ„œλ“œλ₯Ό 가지고 λ‚΄λΆ€ κ΅¬ν˜„μ€ μ–΄λ–»κ²Œ 할지 아직 정해지지 μ•Šμ•˜λ‹€.

    λ‚΄λΆ€ κ΅¬ν˜„μ„ μœ„μ—μ„œ λžŒλ‹€μ‹μ„ ν†΅ν•΄μ„œ κ΅¬ν˜„ν•΄μ€€ 것인데 μ—¬κΈ°μ„œ μ˜λ¬Έμ€ FuncμΈν„°νŽ˜μ΄μŠ€μ— λ©”μ„œλ“œλ₯Ό μΆ”κ°€ν•˜κ²Œ 되면?? μ–΄λ–»κ²Œ 될까


    λžŒλ‹€μ‹μœΌλ‘œ κ΅¬ν˜„ν–ˆλ˜ add ν•¨μˆ˜ μ½”λ“œμ—μ„œ 였λ₯˜κ°€ λ°œμƒν•œλ‹€. 기본적으둜 λžŒλ‹€μ‹μ„ μœ„ν•œ μΈν„°νŽ˜μ΄μŠ€μ—μ„œ μΆ”μƒλ©”μ„œλ“œλŠ” 단 ν•˜λ‚˜μ—¬μ•Όν•œλ‹€. 이λ₯Ό μœ„ν•΄ λžŒλ‹€μ‹μ„ μœ„ν•œ μΈν„°νŽ˜μ΄μŠ€μž„μ„ ν‘œν˜„ν•˜κΈ° μœ„ν•΄μ„œ @FunctionalInterfaceλΌλŠ” μ–΄λ…Έν…Œμ΄μ…˜μ„ μ‚¬μš©ν•œλ‹€. μ‹€μ œλ‘œ 이 μ–΄λ…Έν…Œμ΄μ…˜μ„ μ„ μ–Έν•˜λ©΄ ν•΄λ‹Ή μΈν„°νŽ˜μ΄μŠ€μ— λ©”μ„œλ“œλ₯Ό 두 개 이상 μ„ μ–Έν•˜λ©΄ μœ νš¨ν•˜μ§€ μ•Šλ‹€λŠ” 였λ₯˜λ₯Ό λ‚Έλ‹€. (컴파일러 μˆ˜μ€€μ—μ„œ 였λ₯˜ 확인이 κ°€λŠ₯)


    1
    2
    3
    4
    @FunctionalInterface
    interface Func {
        public int calc(int a, int b);
    }
    cs


    μœ„μ˜ add λ³€μˆ˜μ— 담은 ν•¨μˆ˜λ₯Ό λ‹€μŒκ³Ό 같이 ν™œμš©ν•  수 μžˆλ‹€.


    1
    int result = add.calc(1,2+ add.calc(34); // 10
    cs



    μ°Έκ³  : http://jhmocu.tistory.com/41

    https://m.blog.naver.com/kjc8108/220654750643

    http://linuxism.tistory.com/1002

    λ°˜μ‘ν˜•