728x90

이 강의는 자바의 프로젝트를 어떻게 만드는지, 또한 빌드를 어떻게 하는지에 대한 강의를 진행하지 않는다.

그러나 자바의 기본적인, 그리고 자바에 필수적인 기능들도 분명 존재하고 이 블로그엔 그 작업에 필요한 포스팅도 함께 제공하고 있다.

그 정보를 확인하고 싶다면 여기를 참조하라. 양이 조금 되고 현재진행형으로 늘어나고 있으므로 페이지내의 찾기(ctrl+f 나 cmd+f)로 찾아보도록하자.


이제까지 클래스는 무조건 외부 클래스만 사용했다. 이제 내부클래스를 한번 사용해보자.

사실 사문서화 된 문법이긴한데 사용하는 사람도 있고 사용하지 않는 사람들도 있다.

필자가 봤을 때 오랫동안 유지된 프로젝트의 경우 사용하는 사람들도 간혹 보았다. 그러나 현재는 거의 사용되지 않는 문법들이다.

내포클래스는 지역클래스와 내부클래스,익명 클래스 3종류가 존재하는데 여기서는 지역클래스와 내부클래스만 다루도록 하겠다.

사실 지역클래스도 일종의 내부클래스이지만 뭔가 엄격하게 구별해서 부르는 경향이 있다.


내부 클래스(Inner Class)


public class Outter {
public int field;
public class Inner {

}
public void method(){

}
}

이 때까지 우리는 클래스안에 넣는 것은 필드와 메소드만 넣었다.

그러나 사실 클래스도 넣을 수 있다. 이 때까지 외부클래스는 접근 지정자가 public과 package만 사용할 수 있었다.

내부 클래스의 경우에는 접근 지정자를 public, private,protected,package 모두를 사용 할 수 있다.

클래스는 도면이라고 하였다. 내부 클래스의 접근제한자는 다른 클래스에서 이 클래스를 사용할 수 있는지에 대한 여부가 되겠다.

private로 사용했다면 이 클래스 도면은 해당 클래스 내부에만 사용가능할 것이며 package의 경우에는 이 클래스 도면은 해당 패키지에서만 사용 가능하다.


사용하는 방식은 조금 특이하다. 아래의 코드를 보자.


public class Main {
public static void main(String[] args) {
Outter o = new Outter();
Outter.Inner i = o.new Inner();
}
}


보다 시피 인스턴스를 호출하고 생성자를 선언해준다. 이게 멤버에 클래스가 있기 때문이다.


지역 클래스(Local Class)


public class Outter {
public void method() {
class Local {

}
}
}


지역 클래스는 특정 메소드에 있는 클래스를 지역클래스라고한다.

이 녀석은 당연히 접근 제한자를 가질 수 없으며 해당 메소드 내에서만 사용할 수 있다.

같은 클래스내에서도 접근불가하다.


+ Recent posts