2011년 5월 10일 화요일

자바의 지역클래스(Local classes)

오늘은 자바의 비정적 내부클래스로 분류되는 지역클래스에 대해서 공부해 보기로 하겠다. 내부클래스에 대한 큰 그림을 그리지 못하는 이들은 "자바의 내부클래스"란 강좌를 통해 내부클래스에 대한 계보도를 확실히 머릿속에 인지시키도록 하기 바란다. 뿌리가 깊으면 기본이 탄탄해진다. 그럼 오늘도 달려보자~ 고고씽 ^^


class Outer
{
   ...
   void f( )
   {
      ...
      class Local
      {
         ...
      }
   } //f()
}

위와같이 지역클래스는 지역변수처럼 메소드 내부에 정의되는 클래스를 말한다. 따라서 지역변수처럼 메소드 내부에서만 사용가능하고 메소드의 실행이 끝나면 지역클래스의 생명(?)도 끝난다. 지역클래스도 또한 해당 메소드 내부에서 객체를 만들어서 사용할수 있고 이 역시 메소드의 실행이 끝나면 자동으로 꼴까닥(?)이다.ㅎㅎ 한마디로 지역클래스의 수명은 그를 감싸고 있는 메소드의 운명과 함께 한다고 할수 있겠다. 그런 까닭에 지역클래스가 있는 메소드의 변수는 final 로 지정하여 메소드가 닫히더라도 값을 참조할수 있도록 해야 지역클래스에서 쓸수 있다.

저번 강좌를 열공했다면 기억하겠지만 내부클래스에서 컴파일을 하면 파일이름에 $표시가 붙는데 지역클래스는 $표시와 함께 숫자도 같이 붙는다.

Outer$1Local.class //Outer클래스안에 Local이라는 지역클래스가 있다.
Outer$2Local.class //Outer클래스안에 Local이라는 지역클래스가 또 있다.
Outer$1Local$1LocalH.class //LocalH라는 클래스가 지역클래스안에 또 있다.

자바의 지역클래스는 어떤 식으로 실행파일이 만들어지는지 이제 감(?)을 잡았으리라 믿는다. 위의 파일 샘플은 본 강좌의 예제를 컴파일하면 얻게 된다. 지역클래스안에 또 지역클래스를 만들 생각은 해보았는가? 자바는 여러분의 생각대로 이루어진다. 여기를 누르고 예제를 통해 심화학습하기 바란다. 저번 시간에 내부클래스의 개념정리를 어느정도 확실히 했다면 지역클래스는 그 연장선에 있다고 볼수 있기 때문에 그리 어려운 점은 없으리라고 본다. 지역클래스도 내부클래스이고 더군다나 메소드안에 위치하므로 변수가 미치는 영역의 범위를 잘 이해하면 그리 어려울건 없을 것이다. 허나 잘 몰라도 된다. 그냥 예제를 보면 해결될테니까 말이다.ㅎㅎ

나는 Outer안에 있는 f() 메소드다
지역클래스안에 있는 h() 메소드다
1
2
11
22
111
222
1111
2222
지역클래스안에 h()안에 있는 LocalH 클래스다
1
2
11
22
111
222
1111
2222
11111
22222
111111
222222
=====강이의 자바강좌=====
나는 Outer안에 있는 g() 메소드다
지역클래스안에 있는 i() 메소드다
120
100
20
200
1
2
130

결과값을 보면 예제를 펼쳐보기도 전에 공포(?)에 휩싸이는 이가 있을지 모르겠지만 빠른 캐치를 위해 출력값이 많을뿐이니 내용만 보고 예제는 빠뜨리는 게으른 이(?)가 없기를 바라면서 오늘 강좌는 여기서 끝내겠다. 다음 강좌도 내부클래스를 다룰 예정이다. 힘들더라도 조금만 참아라~ ㅎㅎ

댓글 6개: