본문 바로가기
Study/Java

[Java] 내부(inner) 클래스 & 익명(Anonymous) 클래스

by JYHAN 2020. 7. 3.

내부(inner) 클래스와 익명(anonymous) 클래스

내부(innter) 클래스

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

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");
		}
	}
	
	class SInnerClass{
		int num = 1000;
		String str3 = str1;
		
		public SInnerClass() {
			System.out.println("static InnerClass constructor");
		}
	}
}

public class MainClassTest {
	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();
		
		OuterClass.InnerClass in = oc.new InnerClass();
		System.out.println("in.num : "+in.num);
		System.out.println("in.str2 : "+in.str2);
		
		System.out.println();
		
		OuterClass.SInnerClass si = oc.new SInnerClass();
		System.out.println("si.num : "+si.num);
		System.out.println("si.str2 : "+si.str3);		
	}
}

---- result ----
OuterClass Constructor
oc.num : 10
oc.str1 : java

InnerClass Constructor
in.num : 100
in.str2 : java

static InnerClass constructor
si.num : 1000
si.str2 : java

 

익명(anonymous) 클래스

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

public class AnonymousClass {
	public AnonymousClass() {
		System.out.println("AnonymousClass Constructor");
	}
	public void method() {
		System.out.println("--- Method ---");
	}
}

public class MainClass {
	public static void main(String[] args) {
		new AnonymousClass() {
			@Override
			public void method() {
				System.out.println("--- Override Method ---");
			};
		}.method();
	}
}

---- result ----
AnonymousClass Constructor
--- Override Method ---

이름이 없다는 것은 한 번 쓰고 버린다는 의미이다

따라서 메서드를 재정의하고 뒤에서 바로 메서드를 호출한다

댓글