toggle menu

JAVA 정리 - Inner Class

2012. 7. 31. 15:57 JAVA



Inner Class
Inner Class의 장점은 Outer Class에 있는 모든 자원에 접근 가능!!

A.class
A$B.class

이너 클래스를 생성하기 위해서는 먼저 Outer Class를 생성한다.
A a = new A();
B b = a.new B();

독단적으로 사용할 수 없는 단점이 있다.

B가 static이라면 new A.B() 로 접근할 수 있지만 static끼리만 놀게 되는 규칙은 변함이 없다.


Inner Class의 내부 요소 접근에 대한 시야를 넓혀주는 좋은 예제
class Outer
{
	int value=10;
		
	class Inner
	{
		int value = 20;
		
		public void bb()
		{
			int value = 30;
			
			System.out.println(value); //30
			System.out.println(this.value); //20
			System.out.println(Outer.this.value); //10
		}
	}
}

public class InnerClassExam
{
	public static void main(String[] args)
	{
		Inner i = new Outer().new Inner();
		i.bb();
	}
}


^^


static으로 선언된 Inner Class
Inner Class를 static으로 생성하면 클래스 자체가 메모리 상에 객체가 생성된 것이 아니다.
단지 Outer에게 있어 static 형태로 존재하는 멤버변수처럼 여겨진다.

왜 new Outer.Inner() 로 새로 생성해주는가?

그 이유는 앞에서 이야기한 것처럼 static 형태로 선언된 것은 단지 외부에서 Outer의 static 전역변수처럼 쉽게 접근할 수 있게 된 것에 불과하다. 따라서 내부 클래스도 new 키워드로 새로 생성해주어야 한다.

한마디로 static 붙은 inner class는 단지 static 붙은 전역 변수 정도의 의미란 얘기다. 객체 자체가 생성되진 않았으므로 new로 생성해주어야 한다.

다만 static 붙은 inner class 내부에 static 붙은 변수가 존재한다면,
new 키워드없이, Outer.Inner.aaa 의 형식으로 접근할 수 있을 것이다.

이것 외에는 없다.




 

JAVA 관련 포스팅 더보기