본문 바로가기

개발

Java - 내부 클래스(inner class) / 익명 클래스(anonymous class)

반응형

내부 클래스(inner class)
 - 클래스 안의 클래스 

class A {
	class B {
    
    }
}

장점
 - 내부 클래스에서 외부 클래스의 멤버들을 쉽게 접근할 수 있다.
 - 코드의 복잡성을 줄일 수 있다.(캡슐화)
    A 클래스에서만 쓰는 클래스를 굳이 밖에 둘 필요가 없다.
    B클래스에서는 객체 생성 없이 A 클래스의 멤버변수에 접근할 수 있다.

종류와 특징 
 - 내부 클래스의 종류와 유효범위(scope)는 변수와 동일

내부 클래스에서는 static 멤버를 가지려면 내부 클래스가 static 클래스가 되어야 한다.
static final 은 내부클래스가 static 클래스가 아니어도 가능 (상수는 가능)
static 내부 클래스에는 외부의 멤버변수에 접근할 수 없다.
static 멤버/이너클래스 > 인스턴스 멤버/이너클래스 접근 불가 
인스턴스 멤버/이너클래스 > static 멤버/이너클래스 접근 가능

class Outer{
	pirvate int outerIv = 0;
    static int outerCv = 0;

	void myMethod(){
      int lv = 0;
      final int LV = 0;

      	class LocalInner{
          int liv = outerIv;
          int liv2 = outerCv;
          
          // 외부 클래스의 지역변수는 final이 붙은 변수(상수)만 접근 가능하다.
          // 이유는 내부 클래스의 객체가 더 오래 존재가능하기 때문에 
          // int liv3 = lv; // 에러이지만 JDK 1.8 부터는 가능하다. 
							// JDK 1.8에서는 값이 변경이 안되면 상수로 취급하기 때문
          int liv4 = LV;
      	}
	 }
}

내부 클래스의 인스턴스는 외부 클래스의 인스턴스를 먼저 생성 해야 가능
스태틱 내부 클래스의 인스턴스는 외부 클래스를 먼저 생성하지 않아도 된다.

 

익명 클래스(anonymous class)
 - 이름이 없는 일회용 클래스. 정의와 생성을 동시에 

new 조상클래스이름(){
	// 멤버 선언
}
  또는
  
new 구현인터페이스이름(){
	// 멤버 선언
}
반응형

'개발' 카테고리의 다른 글

Java - Object 클래스  (0) 2021.06.05
Java - 오류 / 예외 처리하기  (0) 2021.06.05
Java - 인터페이스  (0) 2021.06.05
Java - 추상클래스  (0) 2021.06.05
Java - 객체지향개념  (0) 2021.05.30