Java Local Class
지역 클래스는 내부 클래스의 특별한 종류이다. 참고로 내부 클래스의 특징을 그대로 이어져 있다.
지역클래스도 내부 클래스이므로 바깥 클래스의 인스턴스 멤버로 접근한다.
지역클래스는 지역 변수와 같은 코드 블록 안에서 정의된다.
지역 클래스 예제 코드
public class Outer {
public void process() {
// 지역 변수
int localVar = 0;
// 지역 클래스
class Local {}
Local local = new Local();
}
}
지역 변수 아래의 지역 클래스로 선언한 것을 볼 수 있다.
지역 클래스 특징
- 지역 변수처럼 코드 블록 안에 클래스 선언
- 지역 클래스는 지역 변수로 접근 가능
지역 클래스 예제 - 1
LocalOuterV1.class
public class LocalOuter {
private int OutInstanceVar = 3;
public void process(int paramVar) {
int localVar = 1;
class LocalPrinter {
int value = 0;
public void printData() {
System.out.println("value is " + value);
System.out.println("localVar is " + localVar);
System.out.println("paramVar is " + paramVar);
System.out.println("OutInstanceVar is " + OutInstanceVar);
}
}
LocalPrinter printer = new LocalPrinter();
printer.printData();
}
public static void main(String[] args) {
LocalOuter localOuter = new LocalOuter();
localOuter.process(2);
}
}
value is 0
localVar is 1
paramVar is 2
OutInstanceVar is 3
지역 변수 접근 범위는?
- 자신의 변수인 value 에는 접근이 가능하다.
- 자신이 속한 코드 블록의 지역변수도 localVar 접근할 수 있다.
- 자신이 속한 코드 블록의 매개변수로 paramVar 접근할 수 있다.
- 매개변수도 지역변수와 마찬가지이다.
- 바깥 클래스의 인스턴스 멤버필드인 outInstanceVar 접근할 수 있다.
- 지역 클래스는 내부 클래스인 점을 기억하자.
참고로 지역 클래스는 접근 제어자를 사용할 수 없다.
인터페이스 상속하기
내부 클래스와 중첩클래스 모두 일반 클래스처럼 인터페이스 및 부모를 상속할 수 있다.
앞서 구현한 LocalOuter 인터페이스로 상속해보도록 한다.
Printer.class
public interface Printer {
void print();
}
LocalOuter.class
public class LocalOuter {
private int OutInstanceVar = 3;
public void process(int paramVar) {
int localVar = 1;
class LocalPrinter implements Printer{
int value = 0;
@Override
public void print() {
System.out.println("value is " + value);
System.out.println("localVar is " + localVar);
System.out.println("paramVar is " + paramVar);
System.out.println("OutInstanceVar is " + OutInstanceVar);
}
}
LocalPrinter printer = new LocalPrinter();
printer.print();
}
public static void main(String[] args) {
LocalOuter localOuter = new LocalOuter();
localOuter.process(2);
}
}