InnerClass



  • Inner Class
  • 내부클래스 객체 생성
  • 내부클래스 메서드 접근(static)


1. 내부클래스 객체 생성


내부클래스를 사용하는 이유는 내부클래스는 외부클래스의 모든 자원에 접근 가능하기 때문이다
내부클래스를 사용하기 위해서는

outer o = new outer(); //외부 클래스 객체 생성
Inner in = o.new Inner();

먼저, 외부클래스 객체를 생성 후 내부클래스 객체를 조건에 맞춰 생성한다
즉, 내부클래스를 외부클래스 객체생성없이 독단적으로 사용할 수 없다


1.1 내부클래스 메서드 접근(static)


만약, 내부클래스에 static이 부여되어있다고 하여도 이는, 내부클래스 객체가 메모리에 올라가는것이 아닌 단지 외부클래스에게 있어 static변수 취급을 가능하게 해주는것에 불과하다

내부클래스는 외부클래스의 멤버라고 생각해야한다. 따라서 클래스임에도 static이 부여될 수 있는것이다
내부클래스에 static이 부여된다고 하더라도 내부클래스 객체를 생성(new)해주어야 하지만 내부클래스의 static member변수가 존재 한다면 기존의 접근법처럼 Outer.Inner.변수명으로 접근이 가능하다

package note_oop;

import note_oop.Outer.Inner;

class Outer {

	int value = 10; 	// 전역변수

	static class Inner { 	// 내부클래스	//static
		int value = 20;		// 내부클래스 전역변수

		public void bb() {	// 내부클래스 메서드
			int value = 30;

			System.out.println(value); // 30	// 내부클래스 -> 내부클래스 메서드 지역변수
			System.out.println(this.value); // 20	// 내부클래스 전역변수
//			System.out.println(Outer.this.value); // 10		// 내부클래스에서 외부클래스 전역변수 접근법
		}
	}
}

public class InnerClassExam {
	public static void main(String[] args) {
		Inner i = new Outer.Inner();	// 내부클래스 객체만들기 //static
		i.bb();
	}
}