import java.util.Arrays;
import java.util.List;
public class ReflectionExample {
public static void main(String[] args) {
String[] stringArray = {"Hello", "World", "Java"};
List<Integer> intList = Arrays.asList(1, 2, 3, 4);
analyzeArray(stringArray);
analyzeArray(intList);
}
public static void analyzeArray(Object arrayObject) {
Class<?> clazz = arrayObject.getClass();
// 배열 여부 확인
System.out.println(String.format("Is array: %s", clazz.isArray()));
// 배열의 타입 정보 출력
Class<?> elementType = clazz.getComponentType();
if (elementType == null) {
elementType = List.class; // List는 배열이 아님
System.out.println("This is a List of type: " + intList.getClass().getGenericSuperclass());
} else {
System.out.println(String.format("This is an array of type: %s", elementType.getTypeName()));
}
// 배열 또는 리스트의 값 출력
printArrayValues(arrayObject);
}
public static void printArrayValues(Object arrayObject) {
int length;
if (arrayObject instanceof List<?>) {
length = ((List<?>) arrayObject).size();
System.out.print("List values: [");
List<?> list = (List<?>) arrayObject;
for (int i = 0; i < length; i++) {
System.out.print(list.get(i));
if (i != length - 1) {
System.out.print(", ");
}
}
} else {
length = java.lang.reflect.Array.getLength(arrayObject);
System.out.print("Array values: [");
for (int i = 0; i < length; i++) {
Object element = java.lang.reflect.Array.get(arrayObject, i);
System.out.print(element);
if (i != length - 1) {
System.out.print(", ");
}
}
}
System.out.print("]");
System.out.println();
}
}
1. getClass()
- 설명: 객체의 런타임 클래스 정보를 가져옵니다. 이 메서드는 Object 클래스에서 상속되며, 모든 Java 객체에서 사용할 수 있습니다.
- 용법: Class<?> clazz = arrayObject.getClass();
2. isArray()
- 설명: 해당 클래스가 배열인지 여부를 확인합니다. 배열 클래스에서 호출할 수 있으며, 배열인 경우 true, 그렇지 않으면 false를 반환합니다.
- 용법: clazz.isArray()
3. getComponentType()
- 설명: 배열의 컴포넌트(요소) 타입을 반환합니다. 이 메서드는 배열 클래스에서만 사용할 수 있으며, 배열의 타입 정보가 필요할 때 사용됩니다.
- 용법: Class<?> elementType = clazz.getComponentType();
4. getGenericSuperclass()
- 설명: 클래스의 제네릭 슈퍼클래스를 반환합니다. 이 메서드는 주로 제네릭 타입을 다룰 때 사용됩니다.
- 용법: intList.getClass().getGenericSuperclass(); (리스트의 경우)
5. Array.getLength(Object array)
- 설명: 주어진 배열의 길이를 반환합니다. 이 메서드는 java.lang.reflect.Array 클래스의 정적 메서드입니다.
- 용법: int length = java.lang.reflect.Array.getLength(arrayObject);
6. Array.get(Object array, int index)
- 설명: 주어진 배열에서 특정 인덱스의 요소를 가져옵니다. 이 메서드는 java.lang.reflect.Array 클래스의 정적 메서드입니다.
- 용법: Object element = java.lang.reflect.Array.get(arrayObject, i);
'(2024-10) 스파르타 내일배움캠프 - 백엔드 > Java Reflect' 카테고리의 다른 글
ConfigLoader 예제 (0) | 2024.11.27 |
---|---|
필드 제어 예제2) Json Serializer with Array (0) | 2024.11.27 |
Field 제어 (0) | 2024.11.27 |
Constructor 예제, 싱글턴에서(2) (0) | 2024.11.26 |
예시로 함께 보는 Reflect와 Constructor(1) (0) | 2024.11.26 |