[Java] Class.forName / newInstance / getDeclaredMethods
2024. 7. 9. 22:21ㆍWebBack/Java
Class.forName과 newInstance는 긴밀한 관계에 있어서 같이 쓰이는 경우가 많다.
Class clazz = Class.forName("a");
Object obj = clazz.newInstance();
Class.forName이란?
문자열을 통해서 객체를 생성하지 않고 클래스를 메모리에 로드하기 위해서 사용한다. 만약 해당 이름을 가진 클래스나 인터페이스가 있다면 이를 객체로 반환한다. 만약 클래스나 인터페이스가 발견되지 않으면 ClassNotFoundException 예외가 발생하기 때문에 사용할 때에는 예외 처리가 필요하다.
newInstance란?
class 객체에서 newInstance를 호출하여 클래스의 새로운 인스턴스를 생성한다. 기본 생성자를 호출하여 객체를 초기화한다.
getDeclaredMethods란?
클래스 객체에서 선언된 모든 메서드를 반환한다. 반환 타입은 Method[]로 하면 된다. 아래처럼 사용한다. 만약 메서드가 없으면 길이 0의 배열을 반환한다. 참고로, 상속된 것은 포함하지 않는다. 메서드의 이름, 접근 제어자, 반환 타입, 매개변수 타입 등의 정보를 얻을 수 있습니다.
*만약 특정 메서드를 가지고 오려면 getDeclareMethods안에 매개변수를 넣어야 한다.
ex) getDeclareMethods("main", int.class, int.class, int.class, Model.class);
- 메서드 이름: getName() 메서드를 사용하여 메서드의 이름을 얻을 수 있습니다.
- 메서드 매개변수: getParameterTypes() 메서드를 사용하여 메서드의 매개변수 타입을 나타내는 Class 객체의 배열을 얻을 수 있습니다.
- 메서드 리턴 타입: getReturnType() 메서드를 사용하여 메서드의 리턴 타입을 나타내는 Class 객체를 얻을 수 있습니다.
- 메서드의 접근 제어자: getModifiers() 메서드를 사용하여 메서드의 접근 제어자를 나타내는 정수값을 얻을 수 있습니다. 이 값을 Modifier 클래스의 메서드들과 비트 연산을 통해 해석할 수 있습니다.
- 매개변수 배열: getParameters() 메서드를 호출하면 해당 메서드의 모든 매개변수에 대한 정보를 나타내는 Parameter 객체의 배열을 얻을 수 있습니다.
public class MethodInfo {
public static void main(String[] args) throws Exception{
Class clazz = Class.forName("com.fastcampus.ch2.YoilTeller");
Object obj = clazz.newInstance();
Method[] methodArr = clazz.getDeclaredMethods();
for(Method m : methodArr) {
String name = m.getName();
Parameter[] paramArr = m.getParameters();
Class[] paramTypeArr = m.getParameterTypes();
Class returnType = m.getReturnType();
StringJoiner paramList = new StringJoiner(", ", "(", ")");
for(Parameter param : paramArr) {
String paramName = param.getName();
Class paramType = param.getType();
paramList.add(paramType.getName() + " " + paramName);
}
System.out.printf("%s %s%s%n", returnType.getName(), name, paramList);
}
} // main
}
'WebBack > Java' 카테고리의 다른 글
[Java] StringJoiner (0) | 2024.07.09 |
---|---|
[Java] LocalDate.getMonth, getMonthValue (0) | 2024.06.25 |
[Java] LocalDate.parse 메서드 사용법 (0) | 2024.06.19 |
[Java] DateTimeFormatter.ofPattern 사용법 (0) | 2024.06.19 |
[Java] Files.readAllLines 사용법 (0) | 2024.06.19 |