중첩 클래스, 내포 클래스, 이너 클래스 등등의 표현으로 사용되는 클래스 내부에 있는 클래스를 말한다.

클래스 내부의 클래스는 static 맴버 클래스, static이 아닌 맴버 클래스, 익명클래스, 지역 클래스가 있다.

이전에 static 클래스와 static이 아닌 클래스의 차이가 대체 무었인가로 고민했었는데 이 항목에서 깔끔하게 설명을 해주었다.

static이 아닌 맴버 클래스는  바깥 클래스의 자원(맴버 변수)을 사용할수 있다. 라는것이다.
static 맴버 클래스는 바깥 클래스의 자원을 사용할수 없다. static 맴버변수를 제외하면 말이다.

이런 차이점 때문에 비static 클래스는 생성될때 항상 바깥 클래스의 객체를 참조하게 되기 때문에  GC를 할때 내부 클래스의 객체가 살아있으면 외부 클래스의 객체도 사라지지 않는다. 
뭔소린지 모르겠으면 어쨋든 static 맴버 클래스보다 비 static 맴버 클래스 쓰는게 더 느리다고 기억해라.

요점은 외부 클래스의 자원(변수, 함수 등등등)을 쓸일이 없다면 항상 static 맴버 클래스로 만들어 두자.
public class Test {
	static class A{
		
	}
}
이렇게 생긴 A라는 클래스가 static 맴버 클래스다. 비 static 맴버 클래스는 그냥 앞에 static이 안붙은놈을 말한다.

그럼 이제 익명 클래스와 지역 클래스가 남았다.

익명 클래스는 항목 21. 전략을 표현할 때 함수 객체를 사용하자. 에서 나왔던 그놈이다. 

지역 클래스는 { } 가 있는 어디든지 클래스를 선언해서 사용하는것이다. 정말 {} 안쪽이라면 어디든지.. 메소드 안에서도 만들수 있다.
public class Test {
	void a() {
		class B {
			void b() {
				System.out.println("hello world");
			}
		}
		B b = new B();
		b.b();
	}
	public static void main(String[] args) {
		Test t=new Test();
		t.a();
	}
}
요따구로 쓰는건데 뭐 쓸일이 있겠냐 싶다

Posted by 동적할당
: