학습(구)/Java(구)

중첩 클래스와 중첩 인터페이스

잉아당 2021. 3. 22. 16:42
728x90

중첩 클래스 

- 클래스 내부에 정의하는 클래스입니다.

- 별도의 자바 파일을 사용하지는 않지만 번역 후 class 파일을 생성합니다.

- 어느 한 객체/클래스만 관계를 가질 경우 별도의 파일을 생성하는 것보다 해당 클래스에서 내부적으로 생성하는것이 유용합니다.

#인스턴스 멤버 

- static이 없을 경우입니다.

- 클래스를 포함한 외부 클래스가 별도로 생성을 해주어야 정의됩니다.

 

#클래스 멤버

- static이 있는 경우입니다.

- 외부 클래스가 생성될 때 동시에 생성이 되어 정의됩니다.

 

#로컬 멤버

- 메서드 블록에 작성되어진 경우 입니다.

- 메서드 블록이 수행될 때 별도로 정의가 되어집니다.

- 로컬 변수와 형식 매개변수는 메서드 시작시 스택 프레임 안에 방을 마련하고 내포된 클래스는 힙영역에 방을 마련합니다. 그러므로 메서드에 정의된 클래스가 로컬 변수 및 형식 매개 변수 사용은 모순입니다. 

=> 로컬 변수 및 매개 변수는 메서드 종료시 사리지는데 클래스는 힙영역에 있으므로 사라지지 않고 그대로 사라진 매개변수와 로컬 변수를 사용합니다.

=> 문제가 발생하므로 복사본을 사용하는데 이때 정확한 데이터 유지를 위해 복사본과 원본은 데이터 값이 동일 해야 하므로 final 변수를 사용합니다.

 

내포 인터페이스

- 클래스 안에 인터페이스를 정의합니다.

- 이 경우 주로 이벤트 핸들러처리에 사용하게됩니다. 뷰 클래스에서 내부적으로 이벤트 핸들러 객체의 주소값을 가지는데 이때 인터페이스 형식으로 가지고 있고 이를 통해 다형성을 구현합니다.

ex) 뷰 클래스에는 이벤트 처리 인터페이스가 정의되어져있고 이벤트 처리 인터페이스를 구현한 키보드 또는 마우스를 움직이면 해당 객체들이 뷰 클래스의 이벤트 처리 인터페이스에 업 캐스팅 되어 들어가게 되고 이를 통해 다형성을 구현하게 됩니다.

 

 

 

 

'학습(구) > Java(구)' 카테고리의 다른 글

예외 처리  (0) 2021.03.22
추상 클래스 및 추상 메서드/final  (0) 2021.03.22
접근 제한자와 패키지  (0) 2021.03.22
오버로딩과 오버라이딩  (0) 2021.03.22
클래스와 객체의 멤버  (0) 2021.03.22