내부 클래스
내부 클래스(inner class)란?
- 클래스 내부에 또 다른 클래스가 정의됨
- 한 클래스를 다른 클래스의 내부 클래스로 선언하여 두 클래스의
멤버들간에 쉽게 접근이 가능
- 외부에 불필요한 클래스를 감춤으로써 복잡성을 줄임(캡슐화)
* 캡슐화
- 객체를 다른 객체가 접근할 수 있는 부분인 노출부와 그렇지
못한 상세 구현부로 분리하는 것
- 캡슐화된 메소드의 기능만을 알고
그 기능만을 사용할 뿐 그 기능에 대해서 알 수 없음
- 특정 개체가 독립적으로 역할을 제대로 수행하기 위해 필요한 데이터와 기능을 하나로 묶어 관리하는 것
- 정보의 보호 목적에서 만들어진 개념
ex) '사람'이 있다면 사람에 '코', '눈', '귀'가 있음. 코는 냄새를 맡고 눈은 볼 수 있고, 귀는 듣는 기능이 있음.
하지만 눈, 코, 귀가 어떻게 기능을 작용하는지에 대한 정보는 알수 없음
내부 클래스의 종류와 특징
- 내부클래스는 마치 변수를 선언하는 것과 같은 위치에 선언할 수 있음
- 선언위치에 따라 유효범위와 성질이 변수와 유사
종류
local 클래스(지역 클래스)
- 외부 클래스의 메서드나 초기화블럭 안에 선언, 선언된 영역 내부에서만 사용가능
- 특정 메서드 안에서 정의되는 클래스. 특정 메서드 안에서 선언되는 지역변수와 같은 것. 메서드가 호출될 때
생성할 수 있으며 메서드의 수행력이 끝나면 지역변수와 같이 자동 소멸
=>
class Outer{
...
public void A(){
...
class Innner{}
...
}
}
Annoymous class (익명 클래스)
- 클래스의 선언과 객체의 생성을 동시에 하는 이름없는 클래스(일회용)
- 이름이 없는 것을 의미. 자바의 프로그램적으로 해석하면 정의된 클래스의 이름이 없다는 것
=>
class Outer{
...
Inner inner = new Inner(){
public void A{
...
}
};
}
Instance클래스(인스턴스 클래스)
- 외부클래스의 멤버변수 선언위치에 선언하며, 외부클래스의 인스턴스멤버 변수처럼 다루어짐.
주로 외부클래스의 인스턴스멤버들과 관련된 작업에 사용된 목적으로 선언
- 객체를 생성해야만 사용할 수 있는 멤버들과 같은 위치에 정의되어 있는 클래스.
즉 내부 클래스를 생성하려면 외부 클래스의 객체를 생성한 후에 생성할 수 있음
- Outer outer = new Outer();
Outer.Inner inner = outer.new Inner();
=>
class Outer{
... // 구현부
class Inner{}
...
}
static nested class(Static class or Nested class)
- 외부클래스와 멤버변수 선언위치에 선언하며, 외부클래스의 static멤버처럼 다루어짐. 주로 외부 클래스의
static 멤버, 특히 static 메서드에서 사용될 목적으로 선언
- static 내부 클래스로 어쩔 수 없이 정의하는 경우가 있는데 내부 클래스 안에 static 변수를 가지고 있다면
해당 내부 클래스는 static으로 선언해야함.
=>
class Outer{
...
static class Inner{}
...
}
* static nested 클래스와 instance 클래스의 생성 방식이 다름.
- static nested클래스는 new [Outer 클래스명].[nested 클래스명]으로 바로 생성.
- instance 클래스는 먼저 Outer 클래스에 대한 인스턴스를 생성한 후 outer.new [Inner 클래스명]()으로 생성
=>
Inner Class
Outer outer = new Outer();
Outer.Inner = outer.new Inner();
static nested class
Outer.Inner inner = new Outer.Inner();
'프로그래밍 정리 > 자바' 카테고리의 다른 글
[자바][안드로이드] 압축 및 압축 해제 (0) | 2013.01.11 |
---|---|
[안드로이드, 자바] 문자열을 맵에 담기 (0) | 2012.09.04 |
[자바] 디자인 패턴 (0) | 2012.07.17 |
[자바] 디자인패턴 (0) | 2012.07.17 |
문자열 속에서 문자열 검색, 문자 찾기; Find Sub-String in a String (0) | 2012.06.08 |