중첩(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 되지는 않음
  • 각 패키지에 속한 클래스는 이름이 중복될 수 있음