[Java] Inner Class, Inner Static Class

Inner Instance 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
// 외부 클래스가 먼저 생성된 이후에, 인스턴스 내부 클래스를 사용할 수 있다.
public class OutClass { // 외부 클래스
    private int num = 10; // 외부 클래스 private 변수
    private static int sNum = 10; // 외부 클래스 정적 변수
    private InClass inClass;
    
    public OutClass(){ // OutClass 생성자
        inClass = new InClass();
    }

    class InClass{ // 인스턴스 내부 클래스
        int inNum = 100; // 내부 클래스의 인스턴스 변수
//        내부 클래스는 외부 클래스를 생성한 이후에 사용해야 하기 때문에
//        static이 허용되지 않는다.
//        static int sInNum = 10;
//        static void staticInTest(){
//            // static is not allowed;
//        }
        void inTest(){
            System.out.println(num); // 외부 클래스의 변수 사용 가능
            System.out.println(sNum); // 외부 클래스의 static 변수 사용 가능
        }

        public void usingClass(){
            inClass.inTest();
        }
    }
}

Inner Static 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
// 외부 클래스를 생성하지 않고 inner static class 생성 가능
public class OutClass { // 외부 클래스
    private int num = 10; // 외부 클래스 private 변수
    private static int sNum = 10; // 외부 클래스 정적 변수

    static class InStaticClass { // 인스턴스 내부 클래스
        int inNum = 100; // 내부 클래스의 인스턴스 변수
        // static이 허용된다.
        static int sInNum = 10;

        static void staticInTest() {
//            System.out.println(num); // 외부클래스의 인스턴스 변수 불가능
            System.out.println(sNum);
//            System.out.println(inNum); // 내부클래스의 인스턴스 변수 불가능
            System.out.println(sInNum);
        }

        void inTest() {
          //(외부 클래스 객체가 생성되지 않았을 수 있음) -> num에 접근 불가능
          // inTest()는 OutClass.InStaticClass의 instance가 생성된 이후 사용 가능
//            System.out.println(num); // 외부클래스의 인스턴스 변수 불가능
            System.out.println(sNum);
            System.out.println(inNum);
            System.out.println(sInNum);
        }

        public void usingClass() {
            // 외부 클래스를 생성하지 않고 inner static class 생성 가능
            OutClass.InStaticClass sInClass = new OutClass.InStaticClass();
        }
    }
}

Tags: ,

Categories:

Updated:

Leave a comment