내부클래스와 익명클래스

실전 자바 강좌 (ver.2018) - 초보부터 개발자 취업까지!! 강의를

개인공부하며 정리하는 용도의 포스팅입니다.

학습목표


  • 클래스 안에 또 다른 클래스를 선언하는 방법과 이름이 없는 클래스를 선언하는

    방법에 대해 학습

내부(inner)클래스


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

public class MainClass {
    
    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 inner 클래스
        OuterClass.SInnerClass si = new OuterClass.SInnerClass();
        System.out.println("si.num : " + si.num);
        System.out.println("si.str3 : " + si.str3);
        
        System.out.println();
    }
}
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;
        String str3 = str11;
        
        public SInnerClass() {
            System.out.println("static InnerClass constructor");
        }
    }
}
  • OuterClass oc = new OuterClass(); -> public class OuterClass
  • OuterClass.InnerClass in = oc.new InnerClass(); -> class InnerClass
  • OuterClass.SInnerClass si = new OuterClass.SInnerClass(); -> static class SInnerClass

익명(anonymous)클래스


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

package lec20Pjt001;

public class AnonymousClass {
    
    public AnonymousClass() {
        System.out.println("AnonymousClass constructor");
    }
    
    public void method() {
        System.out.println("-- AnonymousClass's method START --");
    }
}
new AnonymousClass() {
    
    @Override
    public void method() {
        System.out.println("-- AnonymousClass's Override method START --");
    };
}.method();

결과

AnonymousClass constructor
-- AnonymousClass's Override method START --

Reference


실전 자바 강좌 (ver.2018) - 내부 클래스와 익명 클래스

Comments