728x90
반응형
해커랭크 - https://www.hackerrank.com/
Prepare > Java > Advanced > Java Reflection - Attributes
JAVA 리플렉션은 런타임에 클래스의 속성을 검사하는 매우 강력한 도구입니다. 예를 들어 getDeclaredMethods()를 사용하여 클래스의 공개 필드 목록을 검색할 수 있습니다.
이 문제에서는 편집기에 Solution 클래스가 제공됩니다. 학생이라는 다른 클래스의 모든 메서드를 알파벳 순서로 인쇄하도록 불완전한 줄을 채워야 합니다. 코드를 실행하기 전에 학생 클래스에 코드를 추가합니다. 학생 클래스는 다음과 같습니다.
class Student{
private String name;
private String id;
private String email;
public String getName() {
return name;
}
public void setId(String id) {
this.id = id;
}
public void setEmail(String email) {
this.email = email;
}
public void anothermethod(){ }
......
......
some more methods
......
}
다음과 같이 학생 클래스의 모든 메서드를 알파벳 순서로 출력해야 합니다.
anothermethod
getName
setEmail
setId
......
......
some more methods
......
이 문제에 대한 샘플 입력/출력이 없습니다. "코드 실행"을 누르면 컴파일되지만 출력은 표시되지 않습니다.
Hint : JAVA 리플렉션 메서드 및 필드에 대한 자세한 내용은 oracle 문서를 참조하세요.
Code
// Java 7
public class Solution {
public static void main(String[] args){
Class student = Student.class; // ~~~Complete this line~~~
Method[] methods = student.getDeclaredMethods(); // ~~~Complete this line~~~
ArrayList<String> methodList = new ArrayList<>();
for(Method method: methods){ // ~~~Complete this line~~~
methodList.add(method.getName()); // ~~~Complete this line~~~
}
Collections.sort(methodList);
for(String name: methodList){
System.out.println(name);
}
}
}
Reflection
자바 프로그램 내에서 클래스, 메서드, 필드 등의 정보를 검사하고 조작할 수 있도록 하는 기술.
실행 중에 객체의 타입 정보를 얻거나 클래스의 메서드, 필드, 생성자 등을 동적으로 호출하거나 수정하는 데 사용.
자바의 동적 프로그래밍, 런타임 분석, 플러그인 아키텍처, 프레임워크 등 다양한 상황에서 유용하게 활용.
주요 클래스 및 메서드
java.lang.reflect 패키지에 있는 클래스와 인터페이스를 활용.
1. Class 클래스 : 클래스의 정보를 검사, 클래스의 인스턴스를 생성.
Class<?> clazz = SomeClass.class; // 클래스 정보 가져오기 Object instance = clazz.newInstance(); // 인스턴스 생성
2. Method 클래스 : 클래스의 메서드 정보를 검사, 호출.
Method method = clazz.getMethod("methodName", parameterTypes); method.invoke(instance, args);
3. Field 클래스 : 클래스의 필드 정보를 검사, 수정.
Field field = clazz.getField("fieldName"); field.set(instance, value);
4. Constructor 클래스 : 클래스의 생성자 정보 검사, 인스턴스 생성.
Constructor<?> constructor = clazz.getConstructor(parameterTypes); Object newInstance = constructor.newInstance(args);
주의
Reflection 남용시 코드의 가독성을 저하시키고 성능 문제를 일으킬 수 있음.
보안 문제를 발생시킬 수 있음.
개인 공부를 위한 포스팅입니다.
모든 번역, 코드는 완벽하지 않을 수 있습니다.
728x90
반응형
'> 개발-IT-인터넷 > > JAVA' 카테고리의 다른 글
[해커랭크(HackerRank) JAVA 풀이] - Prime Checker (1) | 2023.11.20 |
---|---|
[해커랭크(HackerRank) JAVA 풀이] - Can You Access? (0) | 2023.11.13 |
[해커랭크(HackerRank) JAVA 풀이] - Java Varargs - Simple Addition (0) | 2023.11.06 |
[해커랭크(HackerRank) JAVA 풀이] - Java Exception Handling (1) | 2023.11.02 |
[해커랭크(HackerRank) JAVA 풀이] - Java Exception Handling (Try-catch) (0) | 2023.11.01 |