Study/Java
static 멤버 클래스를 많이 사용하자
유쾌한순례자
2010. 12. 12. 02:08
중첩클래스는 다른 클래스 내부에 정의된 클래스이다. (외곽 클래스를 지원하는 목적으로 존재함)
네 가지 종류가 있는데 static 멤버 클래스 , static이 아닌 멤버 클래스 (인스턴스 클래스), 익명 클래스, 지역 클래스이다.
static 멤버 클래스는 다른 클래스의 내부의 선언되어 있고 외곽 클래스의 모든 멤버들(private으로 선언된 것까지)을 사용.
ex)
인스턴스 클래스의 각 인스턴스는 자신을 포함하는 외곽 클래스의 인스턴스와 은연 중 연관되는데
static이 아닌 멤버 클랫의 인스턴스 메소드 내부에서 외곽 클래스의 인스턴스 메소드를 호출하거나,
또는 this 키워드를 사용해서 외곽 클래스의 인스턴스에 대한 참조를 얻을 수 있다.
ex)
-->Why?) static을 생략시 각 인스턴스가 외곽 클래스의 인스턴스 참조를 갖게 되며 이러한 참조 저장은 시간과 메모리가
소요 되며, 가비지 컬렉션 대상이 될 외곽 클래스의 인스턴스가 메모리에 계속 남아 있게 된다.
익명 클래스는 선언된 곳에서만 인스턴스를 생성할 수 있으며 instanceof 연산자로 타입 검사를 할 수 없다.
또한 하나의 익명 클래스에 여러 개의 인터페이스를 구현하기 위해 선언 할 수 없으며
오로지 단 하나의 클래스를 상속받거나 단 하나의 인터페이스만을 구현 할 수 있다.
지역 클래스는 가장 적게 사용되며 지역 변수가 설정 될 수 있는 곳{} 으로 둘러 쌓인 메소드나 블록이면 이면 어디든 선언!
네 가지 종류가 있는데 static 멤버 클래스 , static이 아닌 멤버 클래스 (인스턴스 클래스), 익명 클래스, 지역 클래스이다.
static 멤버 클래스는 다른 클래스의 내부의 선언되어 있고 외곽 클래스의 모든 멤버들(private으로 선언된 것까지)을 사용.
ex)
public class innerClassTest {
static class staticTest{
private static int a = 10;
}
public static void main(String args[]){
System.out.println(staticTest.a);
}
}
결과값 : 10
결과값 : 10
인스턴스 클래스의 각 인스턴스는 자신을 포함하는 외곽 클래스의 인스턴스와 은연 중 연관되는데
static이 아닌 멤버 클랫의 인스턴스 메소드 내부에서 외곽 클래스의 인스턴스 메소드를 호출하거나,
또는 this 키워드를 사용해서 외곽 클래스의 인스턴스에 대한 참조를 얻을 수 있다.
ex)
public class innerClassTest {
※ 외곽 클래스의 인스턴스를 사용할 필요가 없는 멤버 클래스를 선언한다면, 항상 static 멤버 클래스로 만들자.private int b = 20;
static class staticTest{
private static int a = 10;
int c = b; //오류가 남.
int c = b; //오류가 남.
}
class instancetest{
class instancetest{
int d = b; //정상실행
}
public static void main(String args[]){
System.out.println(staticTest.a);
}
}
-->Why?) static을 생략시 각 인스턴스가 외곽 클래스의 인스턴스 참조를 갖게 되며 이러한 참조 저장은 시간과 메모리가
소요 되며, 가비지 컬렉션 대상이 될 외곽 클래스의 인스턴스가 메모리에 계속 남아 있게 된다.
익명 클래스는 선언된 곳에서만 인스턴스를 생성할 수 있으며 instanceof 연산자로 타입 검사를 할 수 없다.
또한 하나의 익명 클래스에 여러 개의 인터페이스를 구현하기 위해 선언 할 수 없으며
오로지 단 하나의 클래스를 상속받거나 단 하나의 인터페이스만을 구현 할 수 있다.
지역 클래스는 가장 적게 사용되며 지역 변수가 설정 될 수 있는 곳{} 으로 둘러 쌓인 메소드나 블록이면 이면 어디든 선언!