JAVA 4대 중첩클래스_2
▣ 정적 지역 익명 중첩클래스 |
■ 지난 포스팅에서 자바의 [4대 중첩 클래스]의 개념과 "일반 중첩 클래스"에 대해서 알아봤었는데요.
▶ http://kd3302.tistory.com/118
이어서 나머지 세개의 중첩 클래스들을 살펴보도록 하겠습니다.
1. 지역중첩클래스
■ 일반적으로 class는 다시 사용하기 위해서 만드는데요. 이것을 많이 재사용하지 않고 특정 메서드에서 한번만 사용할거라면 굳이 class를 밖에다 작성하지 말고 한번만 사용할 메서드 내부(지역)에 한번만 작성하는것이라고 이해를 하면 될것입니다.
다음 예제를 살펴보죠.
■ 예제는 메인 메서드 안에 클래스를 작성한 상황인데요. 이처럼 일정한 메서드 안에서 한번만 사용하기 위해서 작성하는 메서드를 지역중첩 클래스라고 합니다. 에제는 메서드에서 AAA의 멤버만 호출해서 사용하고 있는데요. 만약에 AAA에서 메인메서드의 멤버를 사욯하고 싶다면 메인메서드의 멤버는 final로 선언이 되어 있어야 합니다.
■ AAA에서 메인메서드의 멤버 "x"를 사용하기 위해서 "x"를 final로 선언한 형태입니다.
마지막으로 지역중첩 클래스는 일반 중첩 클래스와 비슷하기 때문에 static 멤버를 선언하지 못합니다.
2 익명 중첩 클래스
■ 익명중첩클래스의 형태는 지역중첩 클래스에서 변형된 형태인데요. 이것은 이름의 뜻대로 class라는 예약어를 사용하지 못하고, class 이름을 가지지 못하고 단지 인스턴스의 생성과 내용부의 정의만 할 수 있습니다. 이것을 특정 메서드에서 호출하기 위해서는 class는 존재하고 있어야 합니다. 또한 만약에 이 클래스에서 메인메서드의 멤버를 호출하기 위해서는 메서드의 멤버 역시 final로 선언되어 있어야 합니다.
■ 여기서 주의해야 할것은 AAA의 y값을 private로 선언하면 에러가 발생하고, x는 final로 선언되어 있어야 한다는 것입니다. 또한 익명 중첩클래스에서는 생성자를 작성할 수 없습니다. 만약에 생성자를 작성하면 에러가 발생합니다.
3. 정적 중첩클래스
■ 지난 포스팅에서 일반 중첩 클래스를 작성할때 특징중의 하나가 static과 관련된 멤버를 선언할 수 없다는 것이었는데요. static을 사용해야 하는 상황이라면 이 중첩 클래스를 사용하면 됩니다. 형식은 단순하게 class 이름 앞에 static이라는 예약어만 붙여주면 됩니다.
이 클래스는 static의 특성상 객체를 독립적으로 생성할 수 있는데요. 다음과 같습니다.
AAAA.BBB bbb = new AAA.BBB();
static 메서드를 사용할 수 있고, static 멤버도 선언할 수 있습니다. 이처럼 반드시 안에 있는 class에 static을 선언해야 한다면 정적 중첩클래스를 사용하면 됩니다.
static의 특성이 일반 멤버를 static 메서드 내부에서 사용할 수 없듯이 이 경우도 BBB에서 AAA의 멤버를 사용하고 싶다면 AAA의 멤버는 static으로 선언되어 있어야 합니다.
■ 이렇게 해서 네개의 중첩 클래스의 특징들을 살펴봤습니다. 프로그램을 작성할때 이것들을 잘 사용하면 좀 더 효율적인 프로그램 작성이 가능할 것입니다.