Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- oclick 동적
- 동적 버튼 생성
- Thread
- ListSort
- 객체지향
- IBatis CRUD
- Java
- 코딩
- 기초
- 변수
- I/O
- 동적 문자열
- 동적 데이터
- MAP
- iBatis
- 변수초기화
- IBatis 게시판
- io
- 고급자바
- comparator
- 계산기
- 변수선언
- 쓰레드
- 조건문
- 자바
- enum
- 동적 버튼 onclick
- 객체
- 연산자
- Comparable
Archives
- Today
- Total
Jun's Blog
[Java] 예제를 통해 Annotation에 대해 알아보자 본문
package kr.or.ddit.basic;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class AnnotationTest {
public static void main(String[] args) throws InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException{
//PrintAnnotation의 static 변수값 출력
System.out.println(PrintAnnotation.id);
// reflection 기능을 이용한 메서드 실행하기
// 선언된 메서드 목록 가져오기
Method[] declaredMethods = Service.class.getDeclaredMethods();
for(Method m : declaredMethods) {
System.out.println(m.getName());
for(int i = 0; i<m.getDeclaredAnnotation(PrintAnnotation.class).count();i++) {
System.out.print(m.getDeclaredAnnotation(PrintAnnotation.class).value()); // value값 출력 : % #
}
System.out.println(); // 줄바꿈 처리
//방법 1
// m.invoke(new Service()); // reflection 기능 이용한 메서드 실행
//방법2
Class<Service> klass = Service.class;
Service service = (Service) klass.newInstance();
m.invoke(service);
}
}
}
package kr.or.ddit.basic;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* Annotation에 대하여....
*
* 프로그램 소스코드 안에 다른 프로그램을 위한 정보를 미리 약속된 형식으로 포함시킨 것.(JDK1.5부터)
*
* 주석처럼 프로그래밍 언어에 영향을 미치지 않으면서도 다른 프로그램에게 유용한 정보를 제공함.
*
* 종류 : 1. 표준 애너테이션 (주로 컴파일러에게 유용한 정보를 제공하기 위한 애너테이션)
* 2. 메타 애너테이션 (애너 테이션을 위한 애너테이션, 즉 애너테이션을 정의할 때 사용함.)
*
* 애너테이션 타입 정의하기
* @interface 애너테이션이름 {
* 타입요소이름(); // 반환값이 있고 매개변수는 없는 추상메서드의 형태
* :
* :
* }
*
* 애너테이션요소의 규칙
* 1. 요소의 타입은 기본형(Primative), String, enum, annotation, class만 허용한다.
* 2. ()안에 매개변수를 선언할 수 없다.
* 3. 예외를 선언할 수 없다.
* 4. 요소의 타입에 타입 매개변수(제너릭타입문자)를 사용할 수 없다.
*/
@Target(ElementType.METHOD) // annotation이 적용 가능한 대상을 지정함.
@Retention(RetentionPolicy.RUNTIME) // annotation이 유지되는 기간(CLASS가 기본값)
public @interface PrintAnnotation {
int id = 100; // 상수 선언가능. static final int id = 100;
String value() default "-"; // 기본값을 '-'로 지정
int count() default 20;
}
package kr.or.ddit.basic;
public class Service {
@PrintAnnotation
public void method1() {
System.out.println("메서드1에서 출력되었습니다.");
}
@PrintAnnotation(value = "%")
public void method2() {
System.out.println("메서드2에서 출력되었습니다.");
}
@PrintAnnotation(value = "#", count = 25)
public void method3() {
System.out.println("메서드3에서 출력되었습니다.");
}
}
package kr.or.ddit.reflection;
/**
* 1. 리플렉션은 클래스, 또는 멤버변수, 메서드, 생성자에 대한 정보를 가져오거나 수정할 수 있다.
* 2. Reflection API는 java.lang.reflection 패키지와 java.lang.Class를 통해서 제공된다.
* 3. java.lang.Class의 주요 메서드
* - getName(), getSuperClass(), getInterface(), getModifiers()
* 4. java.lang.reflect 패키지의 주요 클래스
* - Field, Method, Constructor, Modifier 등.
*/
// Class 오브젝트(클래스의 정보를 담고있는)를 발생하기
public class T01_CalssObjectCreationTest {
public static void main(String[] args) throws ClassNotFoundException {
// 첫 번째 방법 : Class.forName() 메서드 이용
Class<?> klass = Class.forName("kr.or.ddit.reflection.T01_CalssObjectCreationTest");
// 두 번째 방법 : getClass() 메서드 이용
T01_CalssObjectCreationTest obj = new T01_CalssObjectCreationTest();
klass = obj.getClass();
// 세 번째 방법 : .class이용
klass = T01_CalssObjectCreationTest.class;
}
}
Comments