2011년 5월 9일 월요일

자바의 내부클래스(Nested Classes)

class OuterClass
{
    ...
    class NestedClass
    {
        ...
    }
}

위와같이 클래스 안에 클래스가 있는 자바의 중첩클래스(Nested Classes), 즉 내부클래스는 크게 두가지로 나뉜다. static이 선언된 내부클래스와 static이 선언되지 않은 내부클래스로 나뉘고 static이 선언되지 않은 일반 내부클래스는 다시 지역변수와 같이 메소드 내부에 존재하는 지역클래스와 특정 메소드를 오버라이드하여 재정의하는 이름없는 익명클래스로 나뉘므로 중첩클래스는 이렇게 총 4개의 내부클래스로 구성되어 있다. 아래의 설명과 도표를 보면 이해가 쉬울 것이다.

중첩(내부) 클래스(NESTED CLASSES)
일반(비정적) 내부클래스(Non-static nested classes(Inner classes))
   - 지역 (내부) 클래스(Local (Inner) classes)
   - 익명 (내부) 클래스(Anonymous (Inner) classes)
정적 내부클래스(Static nested classes)

탑레벨 클래스(Top Level Classes)는 우리가 일반적으로 지금까지 써온 클래스를 말한다. 내부클래스와 이름이 혼동되기 때문에 그렇게 표현하는 것일뿐 어렵게 생각할 필요는 없다. 클래스중에 가장 바깥에 즉 가장 최상위에 위치하므로 탑레벨 클래스라 한다. 중첩클래스 아니 이제부터는 전체를 지칭할때 내부클래스라고 표현하겠다. 아무래도 의미가 더 잘 통하니까 말이다. 내부클래스는 말그대로 클래스안에 또 클래스가 있는 형태를 말한다. 이런게 될지 예전부터 궁금했을 것이다. 아닌가?^^ 만약 궁금해서 독자중에 실험삼아 내부클래스를 만들어본 경험이 있다면 프로그래머의 기본적인 창의력(?)은 충분하다.ㅎㅎ

이제 슬슬 또다른 궁금증이 생길 것이다. 내부클래스를 언제 써먹어야되는지 말이다. 일반적으로 내부클래스는 탑레벨 클래스와 단단하게 결합되고 얽혀있는 클래스를 사용한다. 예를 들어 차가 종류대로 클래스 형태로 있다고 치자. 클래스로 A자동차, B자동차, C자동차...D트럭, E트럭, F트럭...G버스, H버스, I버스등이 있다면 너무 복잡하지 않은가? 이럴경우 Car 클래스, Truck 클래스, Bus 클래스로 만들고 내부에다가 A, B, C자동차 클래스를 Car 클래스에 D, E, F트럭 클래스를 Truck 클래스에 그리고 G, H, I버스 클래스를 Bus 클래스안에 넣어 내부클래스 형태로 만들면 보기 좋을뿐만 아니라 한곳에 있어 읽기 편하고 여러 클래스들이 논리에 맞게 한군데 모여있으니 유지보수도 쉬울 것이다. 또한 내부클래스는 자동으로 은닉성(Encapsulation)이 강화되니 불필요한 접근을 제한함으로서 보안성을 높이는 효과도 볼수 있다.

자바의 내부클래스는 종류도 여러가지고 표현도 다양한지라 자바를 공부한 이들도 어려워하는 단원중에 하나다. 하지만 자바를 공부하는 이상 내부클래스를 반드시 자기것으로 만들어야 한다. 좀 위협하자면 내부클래스를 모르면 앙꼬없는 찐빵을 들고있는 것이나 다를바 없다. 특히 대부분이 자바소스를 보면서 이해하지 못하는 대표적인 이유가 바로 내부클래스에 대해서 잘 알지 못하기 때문이다. 여러분이 본 강좌를 통해 내부클래스에 대한 내용을 숙지하게 되면 아마 그동안 여러분의 눈앞에 가려져있던 큰 장막이 걷히고 오랫동안 난해하게 느꼈던 많은 부분들이 새롭게 보이기 시작할 것이다.ㅎㅎ

내부클래스에 대해서 이 장에 전부 요약정리하려고 했으나 자바에서 많이 쓰는 방식인데 한꺼번에 했다가 하나도 제대로 기억못하는 최악의 사태(?)가 도래하는걸 방지하고자 각각의 내부클래스에 대한 내용을 총 4번에 걸쳐 강좌를 진행할 예정이니 오늘 내용 짧다고 기뻐말고 다음 시간까지 내부클래스 종류만이라도 확실히 암기해 놓도록 하기 바란다.^^

댓글 2개:

  1. I visit every day some web pages and sites to read articles or reviews,
    but this website gives quality based content.


    Feel free to visit my website :: cellulite treatment reviews

    답글삭제
  2. cosmesis skin care

    Also visit my webpage black opal skin care

    답글삭제