≣ 목차
리플렉션
자바 리플렉션은 런타임 시점에서 클래스의 메타데이터를 분석하고, 객체의 속성이나 메소드를 동적으로 접근할 수 있는 기능을 제공합니다. 이를 통해 컴파일 시점이 아닌 실행 시점에 필요한 코드가 동적으로 생성되어 실행되도록 합니다.
리플렉션의 장점
- 유연성: 외부 라이브러리나 프레임워크 없이도 런타임에 클래스 정보를 얻고, 메소드를 호출하거나 속성을 변경할 수 있습니다.
- 확장성: 새로운 기능을 추가하거나 변경할 때, 코드 수정 없이도 동적으로 처리할 수 있습니다.
리플렉션의 단점
- 성능 저하: 리플렉션을 사용하면 메소드나 필드에 접근하기 위해 추가적인 처리가 필요하기 때문에 일반적인 코드보다 느릴 수 있습니다.
- 보안 문제: 내부 구현에 직접 접근하기 때문에 캡슐화를 위반할 수 있으며, 예상치 못한 에가 발생할 수 있습니다.
리플렉션을 사용하는 간단한 방법 다음과 같습니다.
리플렉션으로 클래스 가져오기
// 1. 클래스가 로딩이 된 이후에 가져오는 방법
Class<Hello> hello = Hello.class;
// 2. 이미 선언된 인스턴스를 활용해 가져오는 방법
// 모든 인스턴스는 Object를 상속받고 getClass 메서드를 사용 할 수 있습니다.
Hello hello = new Hello();
Class<? extends Hello> helloClass = hello.getClass();
// 3. 직접 경로와 클래스명을 적어줘서 가져오는 방법
// test.reflection 경로에 있는 Hello 클래스 정보를 가져옵니다.
Class helloClass = Class.forName("test.reflection.Hello"); // 클래스 명은 당연히 맨 앞은 대문자
리플렉션으로 메서드 가져오기
Class<Hello> classHello = Hello.class;
// 1. 선언된 전체 메소드 가져오기
for(Method method : classHello.getDeclaredMethods()){
System.out.println(method); // 경로까지 전부 출력
System.out.println(method.getName()); // 메서드명 만 출력
}
// 2. 특정 메서드 가져오기
Method method = classHello.getMethod("메서드명");
결론
자바 리플렉션은 애플리케이션에서 유연성과 확장성을 높여주는 강력한 기술이지만 성능 저하, 보안 문제 등의 단점도 있으므로, 신중하게 사용해야 합니다.
왜냐하면 리플렉션을 통해 런타임 시점에서 동적으로 코드를 조작할 수 있는 엄청난 장점이 있지만 리플렉션을 사용할 때는 성능과 보안, 안정성을 고려해야 하기 때문입니다.
참고
'JAVA > JAVA' 카테고리의 다른 글
[Java] uses unchecked or unsafe operations 에러 해결 (0) | 2024.10.14 |
---|---|
JDK 동적 프록시와 CGLIB (0) | 2024.09.18 |
프록시 패턴(프록시 패턴, 데코레이터 패턴) 정리 (1) | 2024.09.15 |
전략(Strategy) 패턴 정리 (1) | 2024.09.11 |
템플릿 메소드(Template Method) 패턴 정리 (4) | 2024.09.10 |