컴퓨터/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(); // 재정의한 메서드 바로 호출
		// 이름이 없기 때문에 여기서 끝내면 만들어 놓고도 사용할 수 없다.
	}
}

익명클래스는 인터페이스나 추상클래스에서 주로 이용된다.

 

반응형