JAVA클래스

중첩 클래스의 분류

  • 정적 중첩 클래스 : 바깥 클래스와 밀접한 관련이 있지만, 인스턴스 간에 데이터 공유가 필요 없을 떄 사용
  • 내부 클래스 : 바깥 클래스의 인스턴스와 연결, 바깥 클래스에 의존하거나 강하게 연관된 작업을 수행할 때 사용
  • 지역 클래스
    • 내부 클래스의 특징
    • 지역 변수에 접근 가능, 접근하는 지역 변수는 final
  • 익명 클래스
    • 이름이 없는 지역 클래스
    • 일회성 구현하여 사용할 때 유용

사용 이유

  • 논리적 그룹화 : 특정 클래스가 다른 하나의 클래스 안에서만 사용되는 경우, 해당 클래스 안에 포함하는 것이 논리적으로 더 그룹화 되는 효과
  • 캡슐화 : 중첩 클래스는 바깥 클래스의 private 멤버 변수에 접근 가능하다.
    • 불필요한 public 메서드 제거 가능

지역 클래스

지역클래스 역시 내부 클래스이기 때문에 내부 변수들에 접근이 자유롭게 가능하다.

  • 지역 변수 캡처

  • 변수의 생명 주기

    1. 클래스 변수 : 프로그램 종료까지 (메서드 영역)
    2. 인스턴스 변수 : 인스턴스의 생존 기간 (힙 영역)
    3. 지역 변수 : 메서드 호출이 끝나면 사라짐 (스택 영역)

  • 지역 클래스로 만든 객체 역시 인스턴스이기 때문에 힙 영역에 존재한다.

지역 변수의 생명주기는 매우 짧다. 인스턴스 내부에 지역 클래스가 존재하고, 지역 클래스 역시 메서드를 가지고 있을 수 있다. 지역 클래스의 메서드를 실행하고 난 이후 메서드가 종료된다면 이미 지역 변수들은 제거 되었을 상황이 있을 가능성이 있다. 인스턴스가 생성 될 떄, 지역 변수들을 복사하여 인스턴스가 들고 있게 하여 극복

  1. 인스턴스 생성 시 지역 클래스가 접근하는 지역 변수들을 확인.
  2. 사용하는 지역 변수들은 복사하여 가지고 있는다.
  3. 인스턴스 생성 완료 이후 복사한 지역 변수는 인스턴스를 통해 접근 가능

지역 클래스가 접근 하는 지역 변수는 절대로 중간에 값이 변하면 안된다 - final로 선언 되어야 함. ( Default )

익명 클래스

Printer printer = new Printer(){
	//body
}
  • 지역 클래스의 선언과 생성을 한꺼번에 가능

Printer를 상속, 구현을 동시에 하며 생성하는 기법

장점 : 메서드를 매개 변수로 넘길 수 있어진다.