ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [18] Inner Class
    Develpment/Java Sample Source 2020. 9. 13. 21:29

     Anonymous Inner Class

     

    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
    32
    33
    34
    35
    package inner_class04;
     
    import java.util.Random;
    import java.util.Scanner;
     
    public class AnonymousClass
    {
        public static void main(String[] args)
        {
            /* 내부 클래스의 종류
             * 1. Member 내부 클래스
             * 2. Local(지역) 내부 클래스
             * 3. Static 내부 클래스
             * 4. Anonymous(익명) 클래스
             */
            
            /* 익명 클래스
             * 한번만 사용하고 버려지는 객체를 사용할 때 쓰는 개념...
             */
            int random = new Random().nextInt(5);
            System.out.println(random);
            
            // 익명, 사용을 마치면 참조하는 곳이 없으므로 가비지 컬렉터에서 처리한다.
            random = new Random().nextInt(10);
            System.out.println(random);
            
            // 계속 사용해야 하는 경우...
            Random rnd = new Random();
            random = rnd.nextInt(5);
            
            // 익명 Scanner
            String str = new Scanner(System.in).next();
        }
    }
     
    cs


     

     Anonymous Inner Class 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
    32
    33
    package inner_class04;
     
    import java.awt.Button;
    import java.awt.Frame;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
     
    public class Event
    {
        static int count = 0;
        
        public static void main(String[] args)
        {
            Frame f = new Frame();
            Button btn = new Button("기능");
            
            f.setSize(300300);
            f.add(btn);
            f.setVisible(true);
            
            // 익명 내부 클래스
            btn.addActionListener( 
                    new ActionListener() {
                            @Override
                            public void actionPerformed(ActionEvent e) {
                                btn.setLabel("" + count++);
                                System.exit(0);
                            }
                    }
            );
        }
    }
     
    cs


     Member Inner Class

     

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    package inner_class01;
     
    public class MemberInner
    {
        int a = 10;
        private int b = 100;
        static int c = 200;
        
        // 맴버 내부 클래스
        class Inner{
            public void printData()
            {
                System.out.println(a);
                System.out.println(b);
                System.out.println(c);
            }
        }
    }
     
    cs
     
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    package inner_class01;
     
    public class MemberMain
    {
        public static void main(String[] args)
        {
            // 맴버 내부 클래스
            MemberInner mi = new MemberInner();
            MemberInner.Inner inner = mi.new Inner();
            
            mi.a = 90;
            
            inner.printData();
        }
    }
     
    cs


     Local Inner Class

     

    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
    package inner_class02;
     
    public class LocalInner
    {
        // 지역내부 클래스 : 매서드 안에 클래스가 정의도어 있는 경우
        int a = 100;
        
        public void innerTest(int n)
        {
            int b = 200;
            final int c = 300;
            
            class Inner
            {
                public void getData()
                {
                    System.out.println(a);
                    System.out.println(b);    // 일반 지역 변수도 상수화, 해당 클래스는 매번 새로 생성되어 사용 되기 때문에...
                    System.out.println(c);
                }
            }
            
            Inner i = new Inner();
            i.getData();
        }
    }
     
    cs
     
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    package inner_class02;
     
    public class LocalMein
    {
        public static void main(String[] args)
        {
            LocalInner li = new LocalInner();
            li.innerTest(3);
        }
    }
     
    cs


     Static Inner Class 

     

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    package inner_class03;
     
    public class StaticInner
    {
        /* 스태틱 내부 클래스 : 맴버 내부 클래스에 static 변수가 존재 한다면,
         * 내부 클래스를 static으로 정의해줘야 한다.
        */
        
        static int a = 100;
        
        static class Inner
        {
            static int d = 500;
            
            public void getData()
            {
                System.out.println(a);
            }
        }
        
        
    }
     
    cs

     

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    package inner_class03;
     
    import inner_class03.StaticInner.Inner;
     
    public class StaticMain
    {
        public static void main(String[] args)
        {
            //StaticInner.Inner inner = new StaticInner.Inner();
            
            // 스태틱 클래스는 외부 클래스의 접근 없이 바로 객체생성이 가능.
            Inner inner = new Inner();    // import 해줘야 한다...
        }
    }
     
    cs


    'Develpment > Java Sample Source' 카테고리의 다른 글

    [17] Generic  (0) 2020.09.13
    [16] Class  (0) 2020.09.13
    [15] String  (0) 2020.09.13
    [14] arrary-multi  (0) 2020.09.13
    [13] Array-single  (0) 2020.09.13

    댓글

Designed by Tistory.