일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- Oracle
- orcle
- 객제지향프로그래밍
- 오라클
- jsp
- Project
- web
- 공부를열심히
- 프로젝트
- 테이블
- html
- sql
- 주말이다..
- DB
- 웹프로그래밍
- Java
- 프로그래밍
- 코딩
- 객체지향
- ERWin
- 자바
- CSS
- 객체지향프로그래밍
- javascript
- 웹
- 데이터베이스
- 공부
- 객제지향
- UI
- squery
Archives
- Today
- Total
햄찌개
JAVA - annotation 본문
자바 개발을 하다 보면 클래스 또는 메서드 또는 변수 앞에 @Override 같은 @ 표시를 많이 봤을 것입니다.
이 어노테이션은 JEE5(Java Platform, Enterprise Edition 5)부터 새롭게 추가된 요소입니다.
이 어노테이션으로 인해 데이터의 유효성 검사 등을 쉽게 알 수 있고, 이와 관련한 코드가 깔끔해지게 됩니다.
일단 어노테이션의 용도는 다양한 목적이 있지만 메타 데이터의 비중이 가장 크다 할 수 있습니다.
메타-테이터(Meta-Data) : 데이터를 위한 데이터를 의미하며, 풀어 이야기하면 한 데이터에 대한 설명을 의미하는 데이터. (자신의 정보를 담고 있는 데이터)
Java에서 기본적으로 제공하는 어노테이션 종류
- @Override
- 선언한 메서드가 오버라이드 되었다는 것을 나타냅니다.
- 만약 상위(부모) 클래스(또는 인터페이스)에서 해당 메서드를 찾을 수 없다면 컴파일 에러를 발생 시킵니다.
- @Deprecated
- 해당 메서드가 더 이상 사용되지 않음을 표시합니다.
- 만약 사용할 경우 컴파일 경고를 발생 키십니다.
- @SuppressWarnings
- 선언한 곳의 컴파일 경고를 무시하도록 합니다.
- @SafeVarargs
- Java7 부터 지원하며, 제너릭 같은 가변인자의 매개변수를 사용할 때의 경고를 무시합니다.
- @FunctionalInterface
- Java8 부터 지원하며, 함수형 인터페이스를 지정하는 어노테이션입니다.
- 만약 메서드가 존재하지 않거나, 1개 이상의 메서드(default 메서드 제외)가 존재할 경우 컴파일 오류를 발생 시킵니다.
* annotation에 대하여 ....
*
* 프로그램 소스코드 안에 다름 프로그램을 위한 정보를 미리 약ㄷ속된 형식으로 포함시킨것.(JDK1.5부터)
*
* 주석처럼 프로그래밍 언어에 영향을 미치지 않으면서도 다른 프로그램에게 유용한 정보를 제공함.
* 종류 : 1. 표준 에너테이션(주로 컴파일러가 유용한 정보를 제공하기 위한 에너테이션)
* 2. 메타 에너테이션(에너테이션을 위한 에너테이션, 즉 에너테이션을 정의할때 사용함.)
*
* 에너테이션 타입 정의하기
* @interface 에너테이션 이름{
* 타입요소이름(); //반환값이 있고 매개변수는 없는 추상메서드의 형태
* ...
* }
*
* 에너테이션요소의 규칙
* 1. 요소의 타입은 기본형, 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; // 기본값을 20으로 지정
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에서 출력되었습니다.");
}
}
public class AnnotationTest {
public static void main(String[] args)
throws IllegalAccessException, IllegalArgumentException, InvocationTargetException, InstantiationException {
// 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++) {
// value값 출력 : %,#
System.out.print(m.getDeclaredAnnotation(PrintAnnotation.class).value());
}
System.out.println();// 줄바꿈 처리
// m.invoke(new Service()); //reflection기능 이용한 메ㅐ서드 실행
Class<Service> klass = Service.class;
Service service = (Service) klass.newInstance();
m.invoke(service);
}
}
}
'고급 JAVA' 카테고리의 다른 글
JAVA- Thread -싱글,멀티 (0) | 2020.09.21 |
---|---|
JAVA - Lambda식 (0) | 2020.09.21 |
JAVA - reflection (0) | 2020.09.18 |
JAVA- Enum (0) | 2020.09.18 |
JAVA - Generic 와일드 카드 예제 - 수강 등록 (0) | 2020.09.18 |