JAVA-Basic

7.익명클래스(AnonymousClass)

Jungsoomin :) 2020. 7. 10. 14:53

익명클래스는 람다, 인터 페이스와도 엮여있는 클래스..?이다. 따로 클래스 정의를 하지 않고 객체를 생성하여 사용하게끔한다.

 

public abstract class Super {
	//추상클래스 정의
	abstract public void cry();
	abstract public void walk();
}

보통의 클래스 상속으로 자식클래스를 정의하는 것을 보면 extends 키워드로 상속관계를 정의한다.

public class Sub extends Super{
@Override
public void cry() {
	// TODO Auto-generated method stub
	
}
@Override
	public void walk() {
		// TODO Auto-generated method stub
		
	}
}

 

익명클래스를 사용하게 되면, 간단하게 익명 자식 객체(클래스가 없으므로) 를 생성해 낼 수 있는데. 구현부분은 {} 부분에서 하게 된다.

ublic class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Super s1 = new Sub();
		s1.cry();
		s1.walk();
		
		// 익명 클래스
		Super s2 = new Super() {
			@Override
			public void cry() {
				
			}
			@Override
			public void walk() {
				
			}
		};
		//익명 클래스 간은 엄연히 다른 객체다
		Super s3 = new Super() {

			@Override
			public void cry() {
				
			}

			@Override
			public void walk() {
				
			}
			
		};
		
	}

}

익명 객체들 간의 관계는 엄연히 다른 객체이며, 해당 클래스의 사용빈도가 높을경우, 자식 클래스나 구현 클래스를 만들어 사용하는 것이 코드의 중복을 줄이며 재사용성을 높여준다.

 

아래는 인터페이스를 이용한 익명 구현 객체 생성이다.

public interface MyInterface {
	void method();
}
public class Main {

	public static void main(String[] args) {
		
		//익명 구현 객체
		MyInterface mif = new MyInterface() {
			@Override
			public void method() {
				
			}
		};
		
		//람다를 이용한 익명 구현객체
		MyInterface mif1 = () -> {
			System.out.println("hello");
		};
		
		mif1.method();//람다에서 정의한 내용
		
		mif.method();
	}

}