티스토리 뷰
Typora Tool 을 이용해서 처음으로 포스팅을 해보았다. 이전에는 단순히 Text 만으로 작성을 했는데, 작성을 하는
과정에서 여러 효과를 줄 수 있어 가독성이 더 향상된 것 같다. 특히 코드를 첨부하는 부분에서 굉장히 편했다.
- 글자 크기 지정 : [Ctrl + Shift 1 ~ 6]
- 코드 작성 : [~~~]
- 제목설정 : [Ctrl + Shift + Q
- 글자 효과 : [Ctrl + B (진하게) / **] [Ctrl + I (기울기)]
- 수평선 작성 : [---]
Reflection Example - 1
Question 클래스의 모든 필드,생성자,메소드에 대한 정보 출력
xxxxxxxxxx
public void showClass() {
/* TODO - 1 Question 클래스의 모든 필드, 생성자, 메소드에 대한 정보를 출력 */
Class<Question> clazz = Question.class;
/* 클래스 모든 필드 출력 */
Field[] fields = clazz.getDeclaredFields();
// clazz.getFields() : private 접근제한자 접근 불가!
for (Field field : fields) {
logger.debug("Field : {}", field);
}
/* 클래스 모든 생성자 출력 */
Constructor[] constructors = clazz.getConstructors();
for (Constructor constructor : constructors) {
logger.debug("Constructor : {}", constructor.getName());
Parameter[] parameters = constructor.getParameters();
for (Parameter parameter : parameters) {
logger.debug("Parameter Name : {}", parameter.getName());
}
}
/* 클래스 모든 메소드 출력 */
Method[] methods = clazz.getDeclaredMethods();
for (Method method : methods) {
Parameter[] parameters = method.getParameters();
logger.debug("Method Name : {}", method.getName());
for(Parameter parameter : parameters) {
logger.debug("Parameter Name : {}",parameter.getName());
}
}
}
Reflection Example - 2
JUnit3Test에서test로 시작하는 메소드 실행
xxxxxxxxxx
public void run() throws Exception {
/* TODO - 2 Junit3Test에서 test로 시작하는 메소드 실행 */
Class<Junit3Test> clazz = Junit3Test.class;
Method[] methods = clazz.getDeclaredMethods();
for (Method method : methods) {
if(method.getName().startsWith("test")) {
method.invoke(clazz.newInstance());
}
}
}
Reflection Example - 3
User 객체 생성
xxxxxxxxxx
public void createInstance() throws Exception {
Class<User> clazz = User.class;
Constructor[] constructors = clazz.getDeclaredConstructors();
for (Constructor constructor : constructors) {
if(constructor.getParameterCount() == 2) {
User user = (User)constructor.newInstance("doby", 30);
logger.debug("name : {} and age : {}", user.getName(), user.getAge());
}
}
}
Reflection Example - 4
Student 클래스의 name과 age 필드 할당 후, getter 메소드를 통해 값 확인
xxxxxxxxxx
@Test
public void privateFieldAccess() throws NoSuchMethodException, NoSuchFieldException, IllegalAccessException, InstantiationException {
/* TODO - 4 Student 클래스의 값을 할당한 후 getter 메소드를 통해 값을 확인 */
Class<Student> clazz = Student.class;
Student student = clazz.newInstance();
Field name = clazz.getDeclaredField("name");
name.setAccessible(true);
name.set(student, "doby");
Field age = clazz.getDeclaredField("age");
age.setAccessible(true);
age.set(student, 30);;
}
'Java' 카테고리의 다른 글
ReflectionTestUtils 활용한 테스트 자동화 (2) | 2019.05.14 |
---|---|
JDBC 개발하는 과정에서 발생했던 오류 (org.h2.jdbc.JdbcSQLException) (0) | 2019.02.06 |
자바 리플렉션 (Reflection) - 소개 (0) | 2019.01.18 |
프로세스와 스레드 (0) | 2018.12.28 |
람다와 스트림의 정의 (2) | 2018.11.14 |