중첩(Nested) 클래스
- 클래스 내부에 또 다른 클래스를 선언하는 경우
- 설계 관점에서 다른 객체가 필요하지만 이를 캡슐화(혹은 그룹화)할 목적으로 사용(존재를 알리지 않는 수준)
- Static nested class
- 외부 클래스에 속했을 뿐 사실상 독립적인 다른 클래스
- Non static(Inner class)
- Inner class
- local class
- anonymous class
정적 중첩 클래스
- 외부 클래스 private 정적 멤버(클래스 멤버)은 접근 가능
- 외부 클래스 private 인스턴스 멤버는 접근 불가
내부(Inner) 클래스
- 외부 클래스의 일부 요소로 속하는 클래스
- 외부 클래스 내부에 정의
- 내부 클래스는 외부 클래스의 private 멤버에 대해 접근이 허용됨
지역 클래스⭐️
- 메서드 바디 스코프 내부에 정의하는 클래스
- 익명 객체를 이해하기 위한 필수 이론
- 메서드 바디 지역변수에 접근 가능
- final or 유사 final 변수
- 스택은 객체 인스턴스보다 수명이 길 수 있음
익명 객체⭐️
parent obj = new parent(){}
- 익명(anonymous)는 이름이 없는 (지역)클래스를 의미하며 특정 클래스나 인터페이스의 파생 형식으로 존재
- 클래스로 정의해야 할 필요가 있는 대상이지만 특정 구간에서만 필요할 뿐 재사용 가능성이 없을 때 유용
- 생성자 없음
- 하나의 구문(;)에 클래스가 포함되는 구조
- GUI 프레임웍에서 이벤트 수신 및 처리 코드를 효율적으로 간소화
패키지 선언 및 활용
- 파일 시스템 상의 폴더 형태로 존재
- 클래스는 파일명
- 보통 소문자로 명명
- 폴더명이 클래스 이름처럼 식별자이자 소속으로 역할
- 클래스 소속 필드, 메서드
- 패키지 소속 클래스
- 패키지 중첩 가능
import
- 클래스 혹은 인터페이스가 속한 패키지명 사용하고 싶을 때 이를 컴파일러에 알릴 목적으로 기술
- 특정 패키지를 import하더라도 하위에 속한것까지 모두 import 되지는 않음
- 각 패키지에 속한 클래스는 이름이 중복될 수 있음