App Programming/JAVA2008. 4. 4. 17:56

회사 에서 static 클래스로 구현하란다/// 그래서 인터넷에서 자료를 뒤져 이렇게 정리해 본다

내부 클래스란 무엇일까여? 클래스안에 또 클래스가 들어가 있는것을 말한다 . 왜이런 내부 클래스를 만드는 목적과 필요성에 대해 알아보자

내부클래스라는 것은 클래스 안에 또 클래스가 있는것을 말합니다

일단 내부 클래스에 어떤 놈들이 잇고 어떻게 사용되는지를 알아야 할것입니다 첫 번째로 정적 내부 클래스(Static Class)에 대해 알아보도록 하겟습니다


정적 내부 클래스라는것은 내부 클래스가 static 으로 정의 되어 있다는것입니다


내부 클래스는 외부 클래스의 멤버로보면 됩니다 / 이번놈은 static 이니까 static멤버!!!!!!!!! static 멤버만을 사용할수 잇습니다

static 멤버쓰는거 기억 하시나요?? 해당 클래스의 객체를 따로 생성하지 않아도 쓸수 잇습니다 내부 클래스도 마찬가지입니다


public class Example

{

     static class InnerClass{

      }

}

Example 클래스에 InnerClass 라는 static 멤버가 있습니다 이것을 다른 클래스 그러니까 Example 클래스의 외부에서 Example 클래스의

객체 없이도 다음과 같이 InnerClass클래스를 만들수 있습니다


public class Test

{

       public static void main(String[] args{

                  Example.InnerClass test = new Example.InnerClass();

      }

}

또 한가지 정적 클래스도 static 이기 때문에 static 변수와 메소드만 참조할수 잇습니다


public class Example {

        static private int K =1;

        private int T = 10;

        static void display(){};


        static class InnerClass{

                public void printK(){

                   System.out.printIn(K);

                   System.out.printIn(T);          // compile error


                   display();

             }

        }

}




테스트 소스 입니다

public class Example
{
  static private int K=1;

  static void display()
  {
   System.OUT.printIn("TEST 시작");
  }

  static class InnerClass
  {
   private int a =36;

   public void printIn(K+a)
   {
    System.OUT.printIn(K+a);
    display();
   }

  }
}

class Test
{
  public static void main(String[] args)
  {

   Example.InnerClass test = new Example.InnerClass();
   test.printIn();

  }


}


==============================================================================

다음은 static method 에 대해 kldp 에 질의 응답한 내용을 발췌 하엿다


private static은 아마 메모리를 절약하거나 서로 다른 인스턴스에서 공통 접근 가능이 필요할때 쓰는게 아닐까 싶습니다


클래스 인스턴스는 각각 다른 메모리를 가지고 있는 상황에서 static한 필드나 메서드는 공용으로 쉽게 말하면 공유메모리와 같은 역할을 하게 되니까요.

물론 그에 따른 위험성도 존재 하겠지만 그렇게 쓰는 이유가 있겠죠. 설계의 관점에서.

속도의 측면에선 테스트를 안해봐서 잘 모르지만 큰 차이는 없을것 같네요. 오히려 final로 정의된게 속도에선 낫다는 이야기가 있으니까요.

만일 다른 객체지향 언어를 말씀하시는 거라면 거기에도 적용이 되는건지는 잘 모르겠네요. ㅡㅡㅋ



Posted by BAGE