티스토리 뷰
어노테이션과 리플렉션을 이용한 메소드 실행시간 출력
클래스에 PrintTime 어노테이션이 설정된 메소드를 찾아서 실행 시간을 출력한다.
어노테이션
@Target 은 어노테이션이 적용될 타입을 설정한다.
Method, Filed 등을 설정할 수 있다. 한번에 여러 개를 적용하는 것도 가능하다.
@Retention 은 어노테이션이 적용될 시점을 설정한다.
Source, Runtime 등을 적용할 수 있다. 적용 시점에 따라 어노테이션 정보가 안 보일 수도 있다.
리플렉션
Class.forName() 메소드를 이용하여 데이터를 생성한다.
메소드와 메소드의 어노테이션 정보를 확인하여 @PrintTime 어노테이션이 적용된 메소드를 실행하고
실행시간을 출력한다.
테스트로 스트림을 이용한 버전과 for 문을 이용한 버전을 작성
public class PrintMethodExecutionTime { /** * 리스트의 모든 값을 출력 */ @PrintTime public void exampleList() { List<Integer> list = new ArrayList<Integer>(); for (int i = 0; i < 10000; i++) { list.add(i); } list.forEach((x) -> System.out.print(x)); } /** * 배열의 모든 값을 출력 */ @PrintTime public void exampleArray() { int[] array = new int[10000]; for (int i = 0; i < 10000; i++) { array[i] = i; } for (int i = 0; i < 10000; i++) { System.out.print(array[i]); } } /** * 주어진 클래스에서 PrintTime 어노테이션이 붙은 메소드를 모두 실행 * * @param className * @throws Exception */ public static void printExecutionTime(String className) throws Exception { Class<?> c = Class.forName(className); // 스트림을 이용한 처리 Arrays.asList(c.getMethods()).forEach((method) -> { Arrays.asList(method.getAnnotations()).forEach((annotation) -> { if (annotation instanceof PrintTime) { System.out.println(method); long startTime = System.currentTimeMillis(); try { method.invoke(c.newInstance()); } catch (Exception e) { e.printStackTrace(); } long endTime = System.currentTimeMillis(); System.out.println("That took " + (endTime - startTime) + " milliseconds"); } }); }); // for 문을 이용한 처리 for (Method method : c.getMethods()) { for (Annotation annotation : method.getAnnotations()) { if (annotation instanceof PrintTime) { System.out.println(method); long startTime = System.currentTimeMillis(); method.invoke(c.newInstance()); long endTime = System.currentTimeMillis(); System.out.println("That took " + (endTime - startTime) + " milliseconds"); } } } } public static void main(String[] args) throws Exception { printExecutionTime(PrintMethodExecutionTime.class.getName()); } }
@Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) public @interface PrintTime { }
반응형
'java' 카테고리의 다른 글
[Math] 좌표계의 x, y를 이용한 각도 구하기 (0) | 2016.05.19 |
---|---|
[개념] 스택(stack)과 힙(heap) (0) | 2016.02.16 |
[JDK8] Date, Calendar, LocaDateTime 날자 관련 객체들 사용법 (0) | 2015.06.09 |
[알고리즘] 퀵정렬 (0) | 2015.06.01 |
MSSQL 에서 Oracle 에 있는 테이블로 정보를 insert 프로그램 (0) | 2013.02.05 |
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- bash
- emr
- HIVE
- hbase
- mysql
- Tez
- 하이브
- ubuntu
- oozie
- AWS
- build
- 백준
- java
- 다이나믹
- 파이썬
- airflow
- Linux
- SPARK
- 하둡
- HDFS
- Python
- S3
- 알고리즘
- nodejs
- 정올
- SQL
- error
- yarn
- 오류
- Hadoop
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함