> 개발-IT-인터넷/> JAVA

[해커랭크(HackerRank) JAVA 풀이] - Java Reflection - Attributes

jini:) 2023. 11. 7. 13:42
728x90
반응형
해커랭크 - https://www.hackerrank.com/
Prepare > Java > Advanced > Java Reflection - Attributes
 

HackerRank

HackerRank is the market-leading technical assessment and remote interview solution for hiring developers. Learn how to hire technical talent from anywhere!

www.hackerrank.com

 

 

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
반응형