수풀속의고라니 2022. 3. 13. 11:30
728x90

 내부 클래스는 클래스 내에 선언된 클래스로 두 클래스가 서로 긴밀한 관계에 있을 때 이러한 방식을 사용한다. 이렇게 내부 클래스를 선언하면 2가지의 장점이 존재한다.

 

- 내부 클래스에서 외부 클래스의 멤버들에 쉽게 접근할 수 있다.

- 코드의 복잡성을 줄일 수 있다.(캡슐화)

 

class A{      // 외부 클래스

   class B{   // 내부 클래스

 

  }

}

 

 이 때 내부 클래스 B는 외부 클래스인 A를 제외하고는 다른 클래스에서 잘 사용되지 않는 것이어야 한다.

 

내부 클래스의 종류와 특징

 내부 클래스의 종류는 변수의 선언위치에 따른 종류와 같다. 내부 클래스는 변수를 선언하는 것과 같은 위치에 선언할 수 있으며, 변수의 선언 위치에 따라 인스턴스 변수, 클래스 변수, 지역 변수로 구분되는 것과 같이 내부 클래스도 위치에 따라 구분된다.

 

- 인스턴스 클래스 : 외부 클래스의 멤버변수 위치에 선언하며, 외부 클래스의 인스턴스 멤버처럼 다루어짐

- 스태틱 클래스 : 외부 클래스의 멤버변수 위치에 선언하며, 외부 클래스의 static 멤버처럼 다루어짐

- 지역 클래스 : 외부 클래스의 메소드나 초기화블럭 안에 선언, 선언된 영역 내부에서만 사용 가능

- 익명 클래스 : 클래스의 선언과 객체의 생성을 동시에 하는 이름 없는 클래스(일회용)

 

class Outer{ 

   int iv = 0;

   static int cv = 0;

 

   void myMethod(){

      int lv = 0;

   }

}

==

class Outer{

  class InstanceInner{ }     // 인스턴스 클래스

  static class StaticInner{ } // 스태틱 클래스

 

  void myMethod(){

      class LocalInner{ }     // 지역 클래스

   }

}

728x90