목차
- 자바 소스 코드 컴파일 명령 javac 예제 이전 포스팅
- 자바 클래스 선언 및 인스턴스화 예제 이전 포스팅
- 자바 콘솔 출력 System.out.println 예제 이전 포스팅
- 화면 출력을 위한 클래스 및 메소드 선언 예제
- 자바 Reflact 활용 클래스 객체화 및 메소드 출력 예제
자바 소스 코드 컴파일 명령 javac 예제 이전 포스팅
오늘 다룰 주제는 자바에서 리플랙션 기능을 활용하여 클래스 인스턴스화를 하는 방법에 대해 알아보도록 하겠습니다. 흔히 자바 소스 코드에 클래스를 구성하고 객체화하는 코드를 미리 작성하고 컴파일을 과정을 거쳐야 객체 사용이 가능합니다. 하지만 리플랙션 기능을 활용하면 클래스 이름 문자열, 메소드 이름 등을 알면 프로그램이 동작하는 도중에도 객체화가 가능합니다.
즉, 프로그램이 실행되는 도중에 동적으로 계속 클래스, 메소드를 바꿔가며 사용할 수 있다는 의미입니다. C 언어로 비슷한 사례를 찾자면 함수 포인터 등과 비슷할 수 있겠습니다.
오늘 예제를 따라하고 실행 결과를 확인하기 위해서는 자바 소스 코드파일을 컴파일해야합니다. 컴파일을 위해서는 javac 명령을 사용해야합니다. 아직 해당 명령 사용법을 모르신다면 아래 이전 포스팅을 참고하여 학습해주세요.
2023.08.10 - [Linux] - [Linux/Java] 리눅스 우분투에서 java 컴파일 및 실행 예제(javac)
자바 클래스 선언 및 인스턴스화 예제 이전 포스팅
리플랙션을 이해하기 위해서는 반드시 객체지향언어에서 클래스의 인스턴스화 하는 방법을 알아야합니다. 자바에서도 동일합니다. 이전 포스팅에서 클래스 선언 방법과 객체화를 수행하여 메소드 호출하는 예제를 작성하였습니다. 아직 클래스와 메소드 활용 방법에 대해 잘 모르신다면 아래 링크를 참고하여 학습해주세요.
2023.08.16 - [Java] - [Java/Linux] Class 선언 및 Method 만들기 예제
자바 콘솔 출력 System.out.println 예제 이전 포스팅
마지막으로 예제가 정상적으로 실행되었는지 간단한 콘솔 출력 결과를 통해 알아보도록 하겠습니다. 이를 위해 자바의 콘솔 출력 메소드인 System.out.println의 사용법을 익혀주세요.
아직 사용법을 모르신다면 아래 랭크를 참고하여 학습해주세요.
2023.08.11 - [Java] - [Java/Linux] System.out.println 문자열 출력 및 활용 예제(개행 및 정수 출력)
화면 출력을 위한 클래스 및 메소드 선언 예제
아래는 리플랙션을 활용하여 객체화할 클래스와 메소드를 선언하는 예제입니다. 이 클래스는 추후 리플랙션으로 객체화될 예정입니다.
import java.lang.reflect.Method;
class OutputPrinter {
public void printMessage(String message) {
System.out.println(message);
}
public void printNumber(int number) {
System.out.println("Number: " + number);
}
public void printSum(int a, int b) {
int sum = a + b;
System.out.println("Sum: " + sum);
}
}
자바 Reflact 활용 클래스 객체화 및 메소드 출력 예제
아래는 리플랙션으로 클래스를 인스턴스화하고 해당 클래스에 속한 메소드들을 모두 출력한 예제입니다.
import java.lang.reflect.Method;
class OutputPrinter {
public void printMessage(String message) {
System.out.println(message);
}
public void printNumber(int number) {
System.out.println("Number: " + number);
}
public void printSum(int a, int b) {
int sum = a + b;
System.out.println("Sum: " + sum);
}
}
public class Example {
public static void main(String[] args) {
Class<?> outputPrinterClass = OutputPrinter.class;
Method[] methods = outputPrinterClass.getDeclaredMethods();
for (Method method : methods) {
System.out.println("Method Name: " + method.getName());
System.out.println("Return Type: " + method.getReturnType().getName());
Class<?>[] parameterTypes = method.getParameterTypes();
System.out.print("Parameter Types: ");
for (Class<?> parameterType : parameterTypes) {
System.out.print(parameterType.getName() + " ");
}
System.out.println("\n");
}
}
}