Java의 Reflection API 기능 – 개요
I. 소개.
이것은 주요 주제인 Java 리플렉션에 대한 일련의 기사 중 첫 번째 게시물입니다.
이 글에서 저는 리플렉션의 기본 개념을 설명할 것입니다. 리플렉션이 무엇인지, 언제 사용되는지, 왜 사용되는지 예제를 보여드리겠습니다.
II. Java 측면에서 Reflection이란 무엇입니까?
리플렉션은 Java로 구현된 강력한 기능이며 실행 중인 Java 프로그램이 런타임에 내부 속성을 검사하거나 수정할 수 있도록 합니다.
Reflections API가 제공하는 기능을 사용하기 위해 필요한 패키지는 다음을 사용하여 가져올 수 있습니다.
import java.lang.reflect.*;
리플렉션은 하나의 객체가 속한 클래스에 대한 정보를 제공합니다. 그 외에도 개체를 사용하여 실행할 수 있는 클래스의 메서드입니다.
III. 예제 1: 주어진 클래스의 인쇄 방법.
실제로 기능을 살펴보겠습니다.
데모에는 다음 파일이 포함되어 있습니다.
* Cat.java
* CatRflDemo.java
Cat 클래스에는 다음이 있습니다.
고양이.자바
public String name;
private int years;
private boolean isHungry;
public void setName(String name) {
this.name = name;
}
public String getName() {
return this.name;`
}
public void sayMEOW() {
System.out.println("MEOW!");
}
Cat 클래스에 있는 메서드를 가져오고 인쇄하기 위해 다음과 유사한 스니퍼를 사용합니다.
Method[] catMethods = Cat.class.getMethods();
for(Method mthd : catMethods) {
System.out.println(mthd.getName() + "()");`
}
이렇게 하면 CAT 클래스의 모든 메서드가 인쇄됩니다.
이를 실행하면 다음 결과가 콘솔에 출력됩니다.
getName()
setName()
기다리다()
기다리다()
기다리다()
같음()
toString()
해시 코드()
getClass()
알림()
알림모두()
알다시피, toString()과 같이 우리가 작성하지 않고 확장된 메서드가 있습니다.
IV. 예 2 – 값을 필드로 설정합니다.
Reflection API의 일부인 또 다른 훌륭한 기능은 필드에 값을 설정하는 옵션입니다.
이 예제에서는 Cat 클래스를 사용하겠습니다. 고양이 클래스에서 일부 필드를 추가했습니다. 여기있어:
public String name;
private int years;
private boolean isHungry;
public void setName(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
private void sayMEOW() {
System.out.println("MEOW!");
}
public boolean isTheCatHungry() {
return this.isHungry;
}
보시다시피 isTheCatHungry라는 새로운 방법이 있습니다. 메인 클래스에 다음을 입력하십시오.
Cat catObj = new Cat();
System.out.println("Is the cat hungry?" + catObj.isTheCatHungry());
Field flds[] = catObj.getClass().getDeclaredFields();
for(Field fld : flds) {
if(fld.getName().equals("isHungry")) {
fld.setAccessible(true);
try {
fld.set(catObj, true);
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
}
System.out.println("Is the cat hungry?" + catObj.isTheCatHungry());
여기서 우리는 catObj라는 Cat 객체를 생성하고 변수 isHungry의 기본값을 인쇄합니다. 그런 다음 선언된 모든 필드를 저장할 배열이 필요하므로 이것이 flds 배열의 목적입니다. 배열을 통한 반복이 뒤따릅니다.
라인: if(fld.getName().equals("isHungry")) {}
액세스할 필드를 확인합니다. 이 경우 "isHungry"라고 하며 이후 액세스 가능하도록 설정되므로 제어할 수 있으며 다음 단계에서 다음 fld 메서드로 수정됩니다. set(catObj, true);
이 스니펫을 실행한 후 출력은 다음과 같습니다.
Is the cat hungry?false
Is the cat hungry?true
V. 결론.
Java Reflection API는 매우 다양한 기능을 제공합니다. 이 기사에서 그들 중 일부가 표시됩니다. Reflection API에서 제공하는 각각의 기능은 장단점이 있지만 사용시 개발자가 주의를 기울여야 합니다. Oracle이 작성한 것처럼 리플렉션을 사용하지 않고 작업을 수행할 수 있는 경우에는 사용하지 않는 것이 좋습니다. 그러나 Java의 리플렉션 API는 정말 유용하며 개발자가 VM 내에서 작동하는 방식을 더 깊이 배우는 데 도움이 될 수 있습니다.
이 시리즈의 다음 기사에서는 더 자세한 내용을 다루고, Reflection API의 더 많은 기능을 살펴보고, 더 깊이 있는 예제를 제공할 것입니다.
이 기사를 읽어 주셔서 감사합니다! 질문이 있으시면 언제든지 댓글을 남겨주세요.
Reference
이 문제에 관하여(Java의 Reflection API 기능 – 개요), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/sn0k3/reflection-api-feature-in-java-overview-5bed텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)