2010. 12. 12. 02:08
static 멤버 클래스를 많이 사용하자 Study/Java2010. 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 연산자로 타입 검사를 할 수 없다.
또한 하나의 익명 클래스에 여러 개의 인터페이스를 구현하기 위해 선언 할 수 없으며
오로지 단 하나의 클래스를 상속받거나 단 하나의 인터페이스만을 구현 할 수 있다.
지역 클래스는 가장 적게 사용되며 지역 변수가 설정 될 수 있는 곳{} 으로 둘러 쌓인 메소드나 블록이면 이면 어디든 선언!
'Study > Java' 카테고리의 다른 글
[면접정리]Beans Pattern의 문제점 (0) | 2011.01.26 |
---|---|
[면접정리]SQL INJECTION 방어법 (0) | 2011.01.26 |
[면접정리]Garbage Collection (0) | 2011.01.25 |
[면접정리]객체지향에 대해서 설명 (0) | 2011.01.25 |
제네릭스 (Generics) <발행 No. 공개 No.> (0) | 2010.12.13 |
태그 클래스보다는 클래스 계층을 사용하자 (0) | 2010.12.12 |
타입을 정의할 때만 인터페이스를 사용 (0) | 2010.12.12 |
인터페이스 (0) | 2010.12.11 |
추상 클래스보다는 인터페이스를 사용하자 (0) | 2010.12.09 |
추상 클래스 (0) | 2010.12.09 |