일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- ubuntu
- Oracle
- Spring Boot
- Git
- laravel
- tool
- ReactJS
- elasticsearch
- Spring Batch
- redis
- MySQL
- php
- devops
- java
- javascript
- 요리
- springboot
- JVM
- it
- Gradle
- IntelliJ
- Design Patterns
- 맛집
- jenkins
- jsp
- AWS
- Web Server
- Spring
- linux
- db
Archives
- Today
- Total
아무거나
리플렉션(Reflection) 이란? 본문
반응형
리플렉션(Reflection)
- 정의: 구체적인 클래스 타입을 알지 못해도, 그 클래스의 메소드, 타입, 변수들을 접근할 수 있도록 해주는 자바 API
- 코드설명
public class Pizza { public void eat() { ... } } public class Main { public static void main(String[] args) { Object pizza = new Pizza(); pizza.eat(); // 컴파일 에러 } }
- 위의 코드에서 컴파일 에러가 나는 이유는 모든 클래스의 조상 클래스인 Object라는 타입으로 Pizza 클래스의 인스턴스를 담을 수는 있지만 사용 가능한 메소드는 Object의 메소드와 변수들 뿐이기 때문이다.
이와 같이 구체적인 타입의 클래스를 모를 때 사용하는게 리플렉션이다. (런타임에 지금 실행되고 있는 클래스를 가져와서 실행)
- 위의 코드에서 컴파일 에러가 나는 이유는 모든 클래스의 조상 클래스인 Object라는 타입으로 Pizza 클래스의 인스턴스를 담을 수는 있지만 사용 가능한 메소드는 Object의 메소드와 변수들 뿐이기 때문이다.
- 예시
- 테스트
[RefObject.java]
[ReflectionController.java]import lombok.Getter; import lombok.Setter; @Getter @Setter public class RefUserObject { private int userNo; private String userName; }
... try { Class<?> clazz = RefUserObject.class; Field[] fields = clazz.getDeclaredFields(); for (Field field: fields) { log.info(">>>>>>>>>>>>>>>>>>>>>>>>> Field Name: {}", field.getName()); } Field field = clazz.getDeclaredField("userNo"); // 컴파일시 cannot access a member of class ... with modifiers "private" 에러를 표시하지 않기 위해 추가 field.setAccessible(true); // 필드값을 다루기 위한, 객체 생성 RefUserObject refUserObject = new RefUserObject(); field.set(refUserObject, 3); int userNo = (int) field.get(refUserObject); log.info(">>>>>>>>>>>>>>>>>>>>>>>>> userNo: {}", userNo); } catch (NoSuchFieldException nsfe) { log.error("NoSuchFieldException Error: {}", nsfe); } catch (SecurityException se) { log.error("SecurityException Error: {}", se); } catch (Exception e) { log.error("Exception Error: {}", e); } ...
- 테스트
반응형
'Java & Kotlin > Java' 카테고리의 다른 글
Error: no Creators, like default construct, exist... (0) | 2021.06.29 |
---|---|
Annotation 설명 및 실습 (0) | 2021.05.05 |
Java에서 Apache OpenOffice + JODConverter 를 활용한 PDF Converter 개발 (2) | 2020.06.17 |
파일복사 (0) | 2020.06.06 |
[Swagger] java.lang.NumberFormatException: For input string 오류 표시 해결 (1) | 2020.05.30 |
Comments