관리 메뉴

개발하는 동그리

[Java] 내부 클래스(Inner class) 본문

IT 정보/Java

[Java] 내부 클래스(Inner class)

개발하는 동그리 2022. 5. 18. 10:14
반응형
종류 선언 위치 사용 가능한 변수
인스턴스 내부 클래스 외부 클래스의 멤버 변수 위치 외부 인스턴스 변수, 외부 전역 변수
정적 내부 클래스 외부 클래스의 멤버 변수 위치 외부 전역변수
지역 내부 클래스 외부 클래스의 메서드나, 초기화 블럭  외부 인스턴스 변수, 외부 전역 변수
익명 내부 클래스 클래스 선언과 동시에 객체 생성 (1회성) 외부 인스턴스 변수, 외부 전역 변수

 

 

 

인스턴스 내부 클래스 ex). class InnerClass

 

  • 인스턴스 내부 클래스는 객체 내부에 멤버의 형태로 존재한다.
  • 외부 클래스의 (cv, iv) 멤버 모두 내부 클래스에서 사용 가능하다
  • 인스턴스 내부 클래스는 외부 클래스를 생성한 이후에 사용해야 한다. 
    (따라서 클래스 생성과 상관없이 사용하는 정적 변수, 정적 메서드는 인스턴스 내부 클래스에서 선언 불가능)

 

정적 내부 클래스 ex). static class StaticInnerClass

 

  • 외부 클래스의 생성과 무관하게 정적 변수를 사용하려면 정적 내부 클래스 선언하면 된다. 
  • 외부의 static 정적 멤버만 내부클래스에서 호출할 수 있다.

 

지역 내부 클래스 ex). Class LocalInClass

  • 메서드 내에서 정의되는 클래스
  • 지역 변수처럼 메서드 내에서만 활용이 가능하므로, 메서드 내에서 선언 후 바로 객체를 생성해서 사용
  • (메서드 호출 시에만 로딩되므로) 정적 클래스로 지정 할 수 없다. 

 

익명 내부 클래스  

  • 이름을 알 수 없는 내부 클래스
  • 클래스의 선언과 객체 생성을 동시에 한다. 따라서 하나의 객체만을 생성할 수 있고, 1회용이다.
  • 익명이라는 점을 빼면 지역 내부 클래스와 유사하다
  • 지역내부 클래스를 1회성으로 사용한다면, 익명 내부 클래스가 더 간결하다. 

 

반응형