이너클래스 - 1. 이너클래스 (Inner class)

Ⅰ. 이너클래스 (Inner class)

1. 이너클래스 (Inner class)

 - 정의 : 클래스 내부에 포함된 클래스

 - 종류

    - 멤버클래스

        - 1. 인스턴스 이너 클래스

        - 2. 정적 이너 클래스

    - 지역클래스

 

2. 인스턴스 멤버 이너클래스

 - 특징: 외부(outter)클래스의 모든 접근지정자의 멤버 접근 가능

 - 생성클래스명 : A.class, A$B.class

 - 객체생성방법

    Step#1. 외부클래스 객체 생성

    Step#2. 이너클래스 객체 생성

// Example
package sample;

class Dog {
	public String name = "순돌이";
	void bark() {System.out.println("멍멍");}
	
	// 이너클래스는 외부클래스의 부속 개념으로 만들어 줌
	class Tail {
		public String name = "긴 꼬리";
		void callBark() {
			bark();
		}
		void callName() {
			System.out.println(this.name);
			System.out.println(Dog.this.name);
		}
	}
}

public class Main {
	public static void main(String[] args) {
		Dog a = new Dog();
		Dog.Tail b = a.new Tail();
		b.callBark();	// 멍멍
		b.callName();	// 긴 꼬리 순돌이
		
	}
}

 

3. 정적 멤버 이너클래스

 

// Example
package sample;

class Doggy {
	public String name = "순돌이";	// 논 스태틱 멤버
	static String breed = "진돗개";
	void bark() {System.out.println("멍멍");}
	
	// 정적 이너 클래스 : 외부 클래스의 정적 멤버만 사용 가능
	static class Eyes {	
		static void callField() {
			// System.out.println(name); 논 스태틱 멤버에 스태틱 멤버가 접근할 수 없음
			System.out.println(breed);
		}
	}
}

public class Main {
	public static void main(String[] args) {
		Doggy.Eyes.callField();		// 진돗개
	}
}

 

4. 지역 이너클래스

// Example
package sample;

class Book {
	void openBook() {
		// 메소드 내에 위치한 지역 클래스(메소드 안에서만 사용 가능)
		class Page{
			int pageNum;
			Page(int num) {
				this.pageNum = num;
			}
		}
		Page page = new Page(178);
		System.out.println("Current Page : " + page.pageNum);
	}
}

public class Main {
	public static void main(String[] args) {
		new Book().openBook();		// Current Page : 178
	}
}