달력

6

« 2019/6 »

  •  
  •  
  •  
  •  
  •  
  •  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  •  
  •  
  •  
  •  
  •  
  •  
중첩클래스는 다른 클래스 내부에 정의된 클래스이다. (외곽 클래스를 지원하는 목적으로 존재함)

네 가지 종류가 있는데 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

인스턴스 클래스의 각 인스턴스는 자신을 포함하는 외곽 클래스의 인스턴스와 은연 중 연관되는데

static이 아닌 멤버 클랫의 인스턴스 메소드 내부에서 외곽 클래스의 인스턴스 메소드를 호출하거나,

또는 this 키워드를 사용해서 외곽 클래스의 인스턴스에 대한 참조를 얻을 수 있다.

ex)
public class innerClassTest {
private int b = 20;
static class staticTest{
private static int a = 10;
int c = b;  //오류가 남.
}
class instancetest{
int d = b; //정상실행
}
public static void main(String args[]){
System.out.println(staticTest.a);
}
}
※ 외곽 클래스의 인스턴스를 사용할 필요가 없는 멤버 클래스를 선언한다면, 항상 static 멤버 클래스로 만들자.
-->Why?) static을 생략시 각 인스턴스가 외곽 클래스의 인스턴스 참조를 갖게 되며 이러한 참조 저장은 시간과 메모리가 
               소요 되며, 가비지 컬렉션 대상이 될 외곽 클래스의 인스턴스가 메모리에 계속 남아 있게 된다.

익명 클래스는 선언된 곳에서만 인스턴스를 생성할 수 있으며 instanceof 연산자로 타입 검사를 할 수 없다.

또한 하나의 익명 클래스에 여러 개의 인터페이스를 구현하기 위해 선언 할 수 없으며

오로지 단 하나의 클래스를 상속받거나 단 하나의 인터페이스만을 구현 할 수 있다.

지역 클래스는 가장 적게 사용되며 지역 변수가 설정 될 수 있는 곳{} 으로 둘러 쌓인 메소드나 블록이면 이면 어디든 선언!
TAG ,
Posted by 유쾌한순례자