[JAVA개념공부]Inner Class, 익명Inner Class, 람다식

2021. 5. 26. 21:03컴퓨터과학

728x90
반응형

Inner Class : 클래스 내부에서 생성되는 클래스.

- 인스턴스 멤버 클래스 : 이미 생성된 외부의 클래스 객체를 통해 주소정보를 받아야 객체 생성이 가능하다.

- 정적 멤버 클래스 : 외부 클래스 객체 없이도 바로 객체 생성이 가능하다. 외부 클래스의 Static변수만 참조할 수 있다.

 

...

//Inner Class 객체 생성

	A a = new A(); // 외부 클래스 A의 객체 생성
	a.print();

	A.B b = a.new B(); // 인스턴스 멤버 클래스 객체 생성(방법1) : 생성된 A객체의 주소가 필요하다.
	b.print();

    A.B b2 = new A().new B(); // 인스턴스 멤버 클래스 객체 생성(방법2) : 생성된 A객체의 주소가 필요하다.
    b2.print();


    A.C c1 = new A.C(); //정적 멤버 클래스 객체 생성 : A객체 상관 없이 바로 생성 가능하다.
    c1.print();
    
...
    ...
    
    //Inner Class가 참조할 수 있는 필드
    
    String name = "이지은"; //인스턴스 필드
	static String name1 = "아이유"; //정적 필드


	public A(String name) {
		this.name = name;
	}

	void print() {
		System.out.println("A에서.. " + name); //인스턴스 필드 name 참조할 수 있다.
	}

	class B {
		void print() {
			System.out.println("InnerB에서.. " + name1); //정적 필드 name1 참조할 수 있다.
		}
	}

	static class C {
		
		void print() {
			System.out.println("InnerC에서.. " + name1 ); //정적 필드 name1만 참조할 수 있다.
		}
	}

 

- Inner Class 생성시 java의 bin폴더에 ‘외부클래스$내부클래스’형태의 클래스파일이 생성된다.

 

외부클래스 $ 내부클래스

 

 

 

 

 

익명 inner class : 1회성 익명 객체를 생성하기 위한 방법

- 인터페이스이름 변수명 = new 인터페이스이름(){

@Override

인터페이스에 선언된 추상 메소드의 실체 메소드}

...

	//익명 Inner Class 선언
	Command delete = new Command() { // 인터페이스 변수 = new 인터페이스(){인터페이스에 선언된 추상메소드의 실체 메소드}
		@Override
		public void exec() {
			System.out.println("delete");
		}
	};

 

 

●익명 inner class의 람다식 선언

-  Command delete = () -> {

System.out.println("delete");

 

};

 

-  Command update = new Command() {

@Override

public void exec() {

System.out.println("delete");

}};

 

 

...

	//람다식 선언
	public static void main(String[] args) {
			Command delete = () -> {
				System.out.println("delete");
                };
728x90
반응형