본문 바로가기
Java, JSP

[Java/자바] 내부클래스(Inner Class) - 인스턴스 클래스, 정적 클래스, 지역 클래스, 익명 클래스

by LasBe 2022. 1. 4.
반응형

⚡️Inner Class(내부 클래스)

내부 클래스는 클래스 내부에 선언된 클래스를 의미합니다.

 

내부에 있는 클래스를 inner class(내부 클래스), 바깥에서 내부 클래스를 감싸고 있는 클래스를 outer class(외부 클래스)라고 부릅니다.

class OuterClass{ //외부 클래스
	
	class InnerClass{ //내부 클래스
		...
	}
}

 

📌 내부 클래스의 장점

내부 클래스를 사용함으로써 얻는 장점으로는 아래와 같습니다.

  • 내부 클래스에서 외부 클래스 멤버에 쉽게 접근이 가능
  • 관련된 클래스를 논리적으로 묶어 코드의 캡슐화 증가
  • 외부에서 내부 클래스에 접근이 안되기 때문에 코드의 복잡성을 줄임

 

📌 내부 클래스의 종류

내부 클래스는 클래스의 필드와 같이 선언된 위치에 따라 4가지로 구분됩니다.

  • 인스턴스 클래스(Instance Class)
  • 정적 클래스(Static Class)
  • 지역 클래스(Local Class)
  • 익명 클래스(Anonymous Class)
class OuterClass{ //외부 클래스
	
	class InstanceInner{ // 인스턴스 클래스
	}
	
	static class StaticInner{ // 정적 클래스
	}
	
	void method() {
		class LocalInner{ // 지역 클래스
		}
	}

}

 

🔎 인스턴스 클래스(Instance Class)

외부 클래스 영역에 선언하며 외부 클래스의 인스턴스 멤버처럼 다뤄집니다.

 

클래스 내부에 static 키워드를 가지지 않아야 하며 주로 외부 클래스의 인스턴스 변수나 메소드에 사용될 목적으로 선언됩니다.

 

객체 생성에는 아래와 같이 2가지 방법이 있습니다.

 

1. 외부클래스.인스턴스클래스 객체명 = new 외부클래스().new 인스턴스클래스();

 

2. 외부클래스 객체 생성

     외부클래스.인스턴스클래스 객체명 = 외부클래스.new 인스턴스클래스();

class OuterClass{ //외부 클래스
	class InstanceInner{ // 인스턴스 클래스
	}
}

public class InnerEx {
	public static void main(String[] args) {
		OuterClass.InstanceInner ii = new OuterClass().new InstanceInner(); //방법 1
        
        	//방법 2
		OuterClass outer = new OuterClass();
		OuterClass.InstanceInner ii2 = outer.new InstanceInner(); 
	}
}

 

🔎 정적 클래스(Static Class)

외부 클래스 영역에 선언하며 외부 클래스의 static멤버처럼 다뤄집니다.

 

클래스 내부에 static 키워드를 가지며 주로 외부 클래스의 클래스 메소드에 사용될 목적으로 선언됩니다.

 

아래와 같이 객체를 생성할 때 static 키워드로 인해 이미 클래스 멤버로써 메모리에 올라가 있는 상태기 때문에

외부 클래스의 호출이 따로 필요하지 않습니다.

class OuterClass{ //외부 클래스
	static class StaticInner{ // 정적 클래스
	}
}

public class InnerEx {
	public static void main(String[] args) {
    
		OuterClass.StaticInner si = new OuterClass.StaticInner();
    
	}
}

 

 

🔎 지역 클래스(Local Class)

외부 클래스의 메소드나 초기화 블록에 선언된 클래스를 의미합니다.

 

이러한 지역 클래스는 선언된 영역 내부에서만 사용이 됩니다.

 

호출이 아래와 같이 외부 클래스의 메소드 안에서만 이루어지고 사용됩니다.

class OuterClass{ //외부 클래스
	void method() {
		class LocalInner{ // 지역 클래스
			int a = 5;
		}
		LocalInner li = new LocalInner();
		System.out.println(li.a);
	}
}

public class InnerEx {
	public static void main(String[] args) {
		OuterClass outer = new OuterClass();
		outer.method(); // 5 출력
	}
}

🔎 익명 클래스(Anonymous Class)

내부 클래스와는 달리 이름을 가지지 않는 클래스를 의미합니다.

 

일반적인 클래스와는 달리 선언과 동시에 객체를 생성하므로 단 하나의 객체만을 생성하는 일회용 클래스입니다.

 

추상클래스와 인터페이스의 객체화도 가능합니다.

 

이러한 익명 클래스는 매우 제한적인 용도에 사용되며, 구현해야 하는 메소드가 매우 적은 클래스를 구현할 때 사용됩니다.

 

자바에서 아래와 같이 선언할 수 있습니다.

클래스이름 참조변수이름 = new 클래스이름(){
    // 메소드의 선언
};

마지막에 세미콜론( ; )을 붙여 익명 클래스의 선언이 끝났음을 표시해야 합니다.

 

 

 

반응형

댓글


오픈 채팅