컴퓨터/Java
클래스 03: 내부 클래스와 익명 클래스
수제녹차
2019. 9. 4. 08:55
728x90
반응형
출처 : 자바 프로그래밍 입문 강좌(인프런)
- 내부 클래스
클래스 안에 또다른 클래스를 선언하는 것
두 클래스의 멤버에 쉽게 접근할 수 있다.
코드가 장황해지기 때문에 자주 사용하지 않는다.
package lec11Pjt001;
public class OuterClass {
int num = 10;
String str1 = "java";
static String str11 = "world";
// 생성자
public OuterClass() {
System.out.println("OuterClass constructor");
}
// 내부클래스1
class InnerClass() {
int num = 100;
String str2 = str1;
public InnerClass() {
System.out.println("InnerClass constructor");
}
}
// 내부 클래스2
// class도 static을 주면 다른 곳에서 접근 가능
static class SInnerClass {
int num = 1000;
String str3 = str11;
public SInnerClass() {
System.out.println("static InnerClass constructor");
}
}
}
package lec11Pjt001;
import com.java.employeeBank.EmployeeBank;
public class MainClass {
public static void main(String[] args) {
OuterClass oc = new OuterClass();
System.out.println("oc.num : " + oc.num);
System.out.println("oc.str1 : "+ oc.str1);
System.out.println();
// 멤버 inner 클래스
OuterClass.InnerClass in = oc.new InnerClass();
System.out.println("in.num : " + in.num);
System.out.println("in.str2 : " + in.str2);
System.out.println();
// static inner 클래스
OuterClass.SInnerClass si = new OuterClass.SInnerClass();
System.out.println("si.num : " + si.num);
System.out.println("si.str3 : " + si.str3);
System.out.println();
}
}
객체 안에 또다른 객체가 있다는 것, 로직이 꼬일 수 있어서 최근 잘 사용하지 않는다.
- 익명클래스
이름이 없는 클래스, 주로 메서드를 재정의하는 목적으로 사용된다.
AnonymousClass.java
package lec11Pjt001;
public class AnonymousClass {
public AnonymousClass() {
System.out.println("AnonymousClass constructor");
}
public void method() {
System.out.println("-- AnonymousClass's method START --");
}
}
MainClass.java
package lec11Pjt001;
import com.java.employeeBank.EmployeeBank;
public class MainClass {
public static void main(String[] args) {
// 이름없는 객체를 생성하고 override -> 호출
new AnonymousClass() {
@Override
public void method() {
System.out.println(" -- AnonymousClass's Override method START --");
};
}.method(); // 재정의한 메서드 바로 호출
// 이름이 없기 때문에 여기서 끝내면 만들어 놓고도 사용할 수 없다.
}
}
익명클래스는 인터페이스나 추상클래스에서 주로 이용된다.
반응형