2011년 5월 10일 화요일

자바의 정적 내부클래스(Static nested classes)

자바의 내부클래스에 대해서 공부하고 있는데 오늘은 그 대미를 장식할 내부클래스중에서도 정적 내부클래스에 대해서 살펴보기로 하자. 비정적 내부클래스를 공부하였으니 정적 내부클래스는 무엇이겠는가? 당연히 비정적 내부클래스에 static을 붙인 형태가 바로 정적 내부클래스(Static nested classes)다. 그럼 어떤 형태인지 한번 보자.

class Outer
{
   ... //static으로 선언된 변수만 정적 내부클래스안에서 쓸수 있다

   static class StaticNestedClass //정적 내부클래스
   {
      ...
   }

   class Inner //비정적 내부클래스
   {
      ...
   }

}

비교하라고 내부클래스 두개 다 적어보았다. static으로 지정되면 값을 공유하며 객체생성없이 접근이 가능하고 또한 static으로 된 일반 멤버들은 그냥 가져다 쓸수 있지만 그렇지 않은 일반 멤버들은 객체를 생성해야만 쓸수 있다. 이미 static에 관한 내용은 예전 강좌에서 다루었으니 잘 떠오르지 않는다면 다시 한번 보고 이 자리에 오기 바란다. 느꼈겠지만 내부클래스를 공부하면서 계속해서 연계되는 부분이 발생하고 있다. 특히 그런 이유는 내부클래스도 클래스이기 때문에 겹치는게 많기 때문일 것이다.


그럼 위의 예를 기준으로 어떻게 정적 내부클래스에 접근해야되는지 자바코드를 살펴보자.

클래스명.정적 내부클래스명
Outer.StaticNestedClass

컴파일후 생성되는 실행파일
Outer$StaticNestedClass.class

그럼 이번에는 정적 내부클래스를 쓰기위한 객체생성 방법을 보기로 하자.

Outer.StaticNestedClass n = new Outer.StaticNestedClass( ); //Outer 밖에서
StaticNestedClass n = new Outer.StaticNestedClass( ); //Outer 안에서 생성

static이 객체없이 접근가능하므로 Outer 클래스의 객체없이도 정적 내부클래스의 객체를 만들수 있다는게 뽀인트(?)다. this 용법을 기억하는지 모르겠다. static에서 this를 쓸수 있는지 없는지 자세한건 여기를 누르고 예제를 살펴보면 알수 있다.^^

나는 정적 내부클래스다
1
2
11
22
22
I'm f()

결과는 위와 같다. static 내부클래스에서 멤버들의 호출을 통한 쓰임새를 자세히 알수 있도록 예제를 구성하였다. 짧은 프로그램이지만 정적 내부클래스의 요지를 파악하는데 부족함이 없을 것이다. 오늘로서 자바의 내부클래스에 대해서 마치겠다. 내부클래스는 쓰는 빈도수가 높은만큼 확실히 알고 넘어가기 바란다. 수고많았다.^^

댓글 3개:

  1. Excellent site you have here but I was wanting to
    know if you knew of any community forums that cover the same topics
    talked about in this article? I'd really like to be a part of community where I can get responses from other experienced people that share the same interest. If you have any suggestions, please let me know. Cheers!
    My blog Sandpoint waterfront for sale

    답글삭제
  2. 조금 복잡했지만 차근차근 예제보면서 따라오니 쏙쏙 들어오네요 감사합니다.

    답글삭제
  3. Your mode of telling all in this paragraph is genuinely
    pleasant, every one can without difficulty know it, Thanks a lot.



    Also visit my weblog; best cellulite treatment

    답글삭제