* 내부 클래스 innerClass
- 내부 클래스는 클래스 내에 선언 된다는 점을 제외하고
일반 적인 클래스와 다르지 않음
- AWT 나 Swing과 같은 GUI 어플리케이션
의 이벤트 처리 외에는 잘 사용되지 않음
내부 클래스란?
- 내부 클래스는 클래스 내에 선언된 클래스
-두 클래스가 긴밀한 관계가 있을 때 내부 클래스 사용( private 클래스가 일반적 )
내부 클래스의 장점
- 내부 클래스에서 외부 클래스의 멤버들을 쉽게 접근 가능
- 불필요한 클래스를 감춰 코드의 복합성을 줄일 수 있음
내부 클래스의 종류와 특징
ⓛ 인스턴스 클래스 instance class
- 외부 클래스의 멤버 변수 선언 위치에서 선언
주로 외부 클래스의 인스턴스 멤버들과 관련된 작업에 쓰일 목적
②정적 클래스 static class
- 외부 클래스의 멤버 변수 선언 위치에 선언
-외부 클래스의 static 변수처럼 다뤄짐
-주로 외부 클래스의 static멤버, 특히 static메서드에서 사용될 목적
package innerclass;
class OutClass{
private int num = 100;//인스턴스 변수
private static int sNum = 200;//정적 변수
private InstanceClass instanceClass;//인스턴스 변수
public OutClass() {
//외부 클래스의 생성자 안에서 인스턴스 클래스 할당됨
instanceClass = new InstanceClass();
}
//인스턴스 클래스 선언
private class InstanceClass{
//인스턴스 클래스는 외부 클래스의 인스턴스 멤버와 static멤버에 접근 가능
void inTest() {
System.out.println("외부 클래스 변수 num :"+ num );
System.out.println("외부 클래스 변수 sNum :"+ sNum );
}
}
//static 내부 클래스 (static변수 처럼 외부 클래스의 선언 없이도 사용 가능!)
//따라서 당연히 외부 클래스의 정적 변수가 아닌 인스턴스 변수는 사용할 수 없음
//정적 내부 클래스 선언
static class StaticClass {
int iNum = 10;
static int sInNum = 100;
//정적 내부 클래스의 메서드
void inTest() {
sNum += 1;//메서드 안에서 외부클래스 정적 변수 접근
System.out.println(sNum);
System.out.println(iNum);
System.out.println(sInNum);
}//정적 내부 클래스의 정적 메서드
static void sTest() {
System.out.println(sNum);
System.out.println(sInNum);
}
}
}
public class InnerTest {
public static void main(String[] args) {
//외부 클래스 객체 생성
OutClass outclass = new OutClass();
//정적 내부 클래스는 OutClass 생성과 무관하게 실행 가능
OutClass.StaticClass.sTest();
}
}
'자바 입문' 카테고리의 다른 글
[자바] 두잇 자바 프로그래밍 * 익명 내부 클래스Anonymous Class (0) | 2022.07.02 |
---|---|
[자바] 두잇 자바 프로그래밍 * 지역 내부 클래스 Local Inner Class (0) | 2022.07.02 |
[자바] 두잇 자바 프로그래밍 * Comparable, Comparator 인터페이스 비교 (0) | 2022.06.28 |
[자바] 두잇 자바 프로그래밍 * TreeMap 클래스 (0) | 2022.06.28 |
[자바] 두잇 자바 프로그래밍 * HashMap 클래스 (0) | 2022.06.28 |