중첩 클래스의 분류
-20241020172824058.webp)
- 정적 중첩 클래스 : 바깥 클래스와 밀접한 관련이 있지만, 인스턴스 간에 데이터 공유가 필요 없을 떄 사용
- 내부 클래스 : 바깥 클래스의 인스턴스와 연결, 바깥 클래스에 의존하거나 강하게 연관된 작업을 수행할 때 사용
- 지역 클래스
- 내부 클래스의 특징
- 지역 변수에 접근 가능, 접근하는 지역 변수는 final
- 익명 클래스
- 이름이 없는 지역 클래스
- 일회성 구현하여 사용할 때 유용
사용 이유
- 논리적 그룹화 : 특정 클래스가 다른 하나의 클래스 안에서만 사용되는 경우, 해당 클래스 안에 포함하는 것이 논리적으로 더 그룹화 되는 효과
- 캡슐화 : 중첩 클래스는 바깥 클래스의 private 멤버 변수에 접근 가능하다.
- 불필요한 public 메서드 제거 가능
지역 클래스
지역클래스 역시 내부 클래스이기 때문에 내부 변수들에 접근이 자유롭게 가능하다.
- 지역 변수 캡처
-20241020172824067.webp)
-
변수의 생명 주기
- 클래스 변수 : 프로그램 종료까지 (메서드 영역)
- 인스턴스 변수 : 인스턴스의 생존 기간 (힙 영역)
- 지역 변수 : 메서드 호출이 끝나면 사라짐 (스택 영역)
-20241020172824089.webp)
- 지역 클래스로 만든 객체 역시 인스턴스이기 때문에 힙 영역에 존재한다.
지역 변수의 생명주기는 매우 짧다. 인스턴스 내부에 지역 클래스가 존재하고, 지역 클래스 역시 메서드를 가지고 있을 수 있다. → 지역 클래스의 메서드를 실행하고 난 이후 메서드가 종료된다면 이미 지역 변수들은 제거 되었을 상황이 있을 가능성이 있다. → 인스턴스가 생성 될 떄, 지역 변수들을 복사하여 인스턴스가 들고 있게 하여 극복
- 인스턴스 생성 시 지역 클래스가 접근하는 지역 변수들을 확인.
- 사용하는 지역 변수들은 복사하여 가지고 있는다.
- 인스턴스 생성 완료 이후 복사한 지역 변수는 인스턴스를 통해 접근 가능
지역 클래스가 접근 하는 지역 변수는 절대로 중간에 값이 변하면 안된다 - final로 선언 되어야 함. ( Default )
익명 클래스
Printer printer = new Printer(){
//body
}- 지역 클래스의 선언과 생성을 한꺼번에 가능
Printer를 상속, 구현을 동시에 하며 생성하는 기법
장점 : 메서드를 매개 변수로 넘길 수 있어진다.