본문 바로가기

Backend/JAVA

[JAVA] 클래스 (중첩, 내부)

#JAVA #클래스

중첩 클래스의 분류

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

사용 이유

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

지역 클래스

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

  • 지역 변수 캡처

 

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

  • 지역 클래스로 만든 객체 역시 인스턴스이기 때문에 힙 영역에 존재한다.
    1. 인스턴스 생성 시 지역 클래스가 접근하는 지역 변수들을 확인.
    2. 사용하는 지역 변수들은 복사하여 가지고 있는다.
    3. 인스턴스 생성 완료 이후 복사한 지역 변수는 인스턴스를 통해 접근 가능
  • 지역 변수의 생명주기는 매우 짧다.
    인스턴스 내부에 지역 클래스가 존재하고, 지역 클래스 역시 메서드를 가지고 있을 수 있다.
    -> 지역 클래스의 메서드를 실행하고 난 이후 메서드가 종료된다면 이미 지역 변수들은 제거 되었을 상황이 있을 가능성이 있다.
    -> 인스턴스가 생성 될 떄, 지역 변수들을 복사하여 인스턴스가 들고 있게 하여 극복

지역 클래스가 접근 하는 지역 변수는 절대로 중간에 값이 변하면 안된다

 

- final로 선언 되어야 함. ( Default )

익명 클래스

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

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

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

'Backend > JAVA' 카테고리의 다른 글

[JAVA] 제네릭  (1) 2025.01.25
[JAVA] 예외 처리  (0) 2025.01.24
[JAVA] 열거형 (Enum Type)  (1) 2025.01.22
[JAVA] 불변 객체  (0) 2025.01.19
[JAVA] 날짜와 시간  (0) 2025.01.19