-
객체를 런타임 시점에 동적으로 생성하기TIL 2021. 2. 7. 13:09
런타임 시점에 객체를 동적으로 생성할 수 있다.
물론 원하는 객체의 Class 의 FQCN(Fully Qualified Class Name)를 알아야 한다.
또 자바 8 버전 까진 Class클래스의 newInstance()를 사용했는데 9 버전부터 Deprecated 되어 .getDeclaredConstructor().newInstance();를 써야 한다.
예제로 넘어가자
예제는
Action을 구현하는 구현체 Sample1과 Sample2가 존재한다.
우리는 런타임 시점에 둘 중 하나를 선택해 객체를 만들고
Action의 메소드인 exce()를 실행시키려 한다.
다형성을 이용해 객체를 사용하면 된다.
사용할 Class와 다형성에 이용될 Interface
public interface Action {
void exec();
}
public class Sample1 implements Action {
@Override
public void exec() {
System.out.println("Sampel 1 입니다.");
}
}
public class Sample2 implements Action {
@Override
public void exec() {
System.out.println("Sampel 2 입니다.");
}
}입력 값을 판단하는 것은 필연적이다. 그래서 이번엔 enum을 사용해 FQCN를 얻어서 return 하게 해 줬다.
굳이 함수형인터페이스를 쓸 필요 없이 String 값만 돌려주면 될꺼 같다.
Main
Main에서 입력값을 받아서 getFQCNN에서 판단해서 알맞은 enum의 메소드를 실행시켜
FQCN값을 리턴해 준다.
리턴 받은 값을 통해 class를 얻고 그 클래스는 Action의 구현체이니 타입을 Action으로 하고 exec 메소드를 실행시키면 오버라이딩된 메소드가 실행이 된다.
이처럼 런타임 시에 사용자가 원하는 객체를 만들어 사용할 수 있다.
enum활용기
woowabros.github.io/tools/2017/07/10/java-enum-uses.html
'TIL' 카테고리의 다른 글
Format클래스 및 잡다한 팁? (0) 2021.02.07 서비스 로더 (service loader)사용하기 (0) 2021.02.07 리플렉션을 이용해 private 필드 값 변경 (0) 2021.02.07 2021.02.07 기록장 (0) 2021.02.06 Comparable과 Comparator (0) 2021.02.06