[Java] 인터페이스 익명 구현 객체를 알아보자! Interface

2020-12-29


인터페이스의 경우 구현 클래스를 따로 구현하여 사용하는 것이 일반적이다. 하지만 일회성으로 사용할 경우가 생긴다면, 일일이 클래스를 따로 구현해서 인터페이스를 사용하는 것은 비효율 적일 것이다. 때문에 실행(main) 클래스에서 직접 오버 라이딩하여 사용하는 방법이 있는데 이를 익명 구현 객체라고 한다. 이제 사용법을 알아보도록 하자.


package interface_Lambda;

public interface human {
	void name();
	void age();
}

human 인터페이스는 name / age 두가지 추상 메서드가 있으며,  이제 실행 클래스로 가서 구현하여 사용해보도록 하자.


package interface_Lambda;

import java.time.LocalDateTime;
import java.util.Scanner;


public class main {

	public static void main(String[] args) {	
		
		Scanner scan = new Scanner(System.in);
		
		LocalDateTime now = LocalDateTime.now();
		//오늘의 연도를 얻음
		String sDat = now.getYear()+"";
		//문자열로 변환
		int today = Integer.parseInt(sDat);
		//나이를 구하기 위해 인트형으로 변환해준다.
		
		human hu = new human() {
			@Override
			public void age() {
				System.out.println("당신의 태어난 연도는 언제입니까? ex) 2000 ");
				int year = scan.nextInt();			
				//태어난 연도를 입력받음
				System.out.println("당신의 나이는 : " + (today - year + 1) + " 세 ");	
			}
			@Override
			public void name() {
				System.out.println("당신의 이름은?");
				String name = scan.next();	
				System.out.println(name + " 정말 멋진 이름입니다!!");
			}
		};
		
		hu.age();	
		hu.name();
	}

}

구현의 내용은 Scanner로 사용자에게 입력값을 받아 나이와 이름을 출력하는 간단한 메서드이다. 익명 구현 객체의 선언 방법은 인터페이스를 직접 new 연산자로 새로운 객체를 만들어주고 이후 {... } 안에 기존에 인터페이스에 있던 추상 메서드들을 오버 라이딩한 후 사용해 주면 된다. 이후 새로운 객체 변수 (hu)를 통해 메서드를 호출해주면 재정의된 메서드가 출력되는 것을 확인할 수 있다. (모든 추상 메서드를 구현해주지 않으면 오류가 발생한다.)