본문 바로가기
자바 입문

[자바] 두잇 자바 프로그래밍 * 인스턴스 내부 클래스 && 정적 내부 클래스

by javaman 2022. 7. 2.

* 내부 클래스 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();
		
	}

}