컴퓨터과학
[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
반응형