중첩 클래스
- 클래스 내부에 정의하는 클래스입니다.
- 별도의 자바 파일을 사용하지는 않지만 번역 후 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 |