[Java] 내부 클래스와 익명 클래스

13417 단어 JavaJava

내부(inner) 클래스

클래스 안에 또 다른 클래스를 선언하는 것으로 이렇게 하면 두 클래스의 멤버에 쉽게 접근 가능하다.

클래스 끼리의 데이터를 공유할 수 있다는 점이 좋아보이지만 로직이 복잡해질 수 록 꼬일 수 있다.

public class OuterClass {
    int num = 10;
    String str1 = "Java";
    static String str11 = "world";

    public OuterClass() {
        System.out.println("OuterClass constructor");
    }

    class InnerClass {
        int num = 100;
        String str2 = str1;

        public InnerClass() {
            System.out.println("InnerClass constructor");
        }
    }

    static class SInnerClass {
        int num = 1000;
        // static 클래스는 외부 클래스 멤버에 접근 불가
        String str3 = str11;

        public SInnerClass() {
            System.out.println("static InnerClass constructor");
        }
    }
}
public class Main {
    public static void main(String[] args) {
        OuterClass oc = new OuterClass();
        System.out.println("oc.num : " + oc.num);
        System.out.println("oc.str1 : " + oc.str1);

        System.out.println();

        // inner 클래스
        OuterClass.InnerClass in = oc.new InnerClass();
        System.out.println("in.num : " + in.num);
        System.out.println("in.str2 : " + in.str2);

        System.out.println();

        // static 클래스
        OuterClass.SInnerClass si = new OuterClass.SInnerClass();
        System.out.println("si.num : " + si.num);
        System.out.println("si.str3 : " + si.str3);

        System.out.println();

    }
}

실무에서는 잘 쓰이지 않는 코딩 방법이다.

익명(anonymous) 클래스

이름이 없는 클래스로 주로 메서드를 재정의 하는 목적으로 사용된다.

public class AnonymousClass {
    public AnonymousClass() {
        System.out.println("AnonymousClass constructor");
    }

    public void method() {
        System.out.println("--AnonymousClass's method START--");
    }
}
package inner;

public class Main {
    public static void main(String[] args) {
      	// 익명 클래스는 딱 한번만 실행된다.
        new AnonymousClass() {
            @Override
            public void method() {
                System.out.println("--AnonymousClass's Override method START --");
            }
        }.method();
    }
}

익명클래스는 인터페이스추상클래스에서 주로 이용된다.

좋은 웹페이지 즐겨찾기