내부 클래스

  • 클래스 내부에 선언한 클래스
  • 외부 클래스와 밀접하게 연관되어 있는 경우가 많다
  • 다른 외부 클래스에서 사용할 일이 거의 없는 경우에 사용한다
  • 중첩클래스라고도 한다
  • 종류: 인스턴스 내부 클래스, 정적 내부 클래스, 지역 내부 클래스, 익명 내부 클래스

1. 인스턴스 내부 클래스

  • 클래스 내부에 선언한 클래스 (대부분 private)
  • 외부 클래스 생성 후에 생성된다
  • private이 아닌 경우 외부 다른 클래스에서 생성할 수 있다

inClass

    class InClass{
        int iNum = 100;
        int sInNum = 500; //내부 클래스의 static 변수는 사용할 수 없다. 외부 클래스의 생성과 무관하지 않기 때문
        
        void inTest(){
            System.out.println("OutClass num = " +num + "(외부 클래스의 인스턴스 변수)");
            System.out.println("OutClass sNum = " + sNum + "(외부 클래스의 스태틱 변수)");
            System.out.println("InClass inNum = " + iNum + "(내부 클래스의 인스턴스 변수)");

        }
    }
  • inClass가 private인 경우 메서드를 사용하려면
 public void usingClass(){
        inClass.inTest();//inner 클래스의 메서드가 사용된다
    }
    .
    .
    outClass.usingClass();

사용하는 메서드를 out 클래스에 정의해서 사용한다

  • public인 경우 직접 inner클래스의 객체를 생성해서 메서드를 사용할 수 있다
OutClass.InClass inner = outClass.new InClass(); //내부 클래스를 생성하려면(private이 아닌 경우)
        inner.inTest();

2. 정적 내부 클래스

  • 외부 클래스 생성과 무관하게 사용할 수 있음
  • 정적 변수, 정적 메서드 사용
static class InStaticClass{
        int iNum = 100;
        static int sInNum = 200;

        void inTest(){
            System.out.println("InClass num = " +iNum + "(내부 클래스의 인스턴스 변수)");
            System.out.println("OutClass sNum = " + sNum + "(외부 클래스의 스태틱 변수)");
            System.out.println("InClass sNum = " + sInNum + "(내부 클래스의 스태틱 변수)");
        }

        static void sTest(){ //메서드가 static인 경우 
//            System.out.println("InClass num = " +iNum + "(내부 클래스의 인스턴스 변수)"); // 내부 클래스의 생성과 무관하게 사용할 수 있어야 하기 때문에 사용 불가
            System.out.println("OutClass sNum = " + sNum + "(외부 클래스의 스태틱 변수)");
            System.out.println("InClass sNum = " + sInNum + "(내부 클래스의 스태틱 변수)");
        }
    }
  • 메서드를 사용하려면
		OutClass.InStaticClass sInClass = new OutClass.InStaticClass(); //내부 클래스를 생성해서 사용하거나
        sInClass.inTest();

        System.out.println();

        OutClass.InStaticClass.sTest(); //out 클래스.내부클래스.메서드로 사용한다
profile
안녕하세요. Chat JooPT입니다.

0개의 댓글