일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- r
- reactor
- Linux
- HTTP
- NoSQL
- github
- network
- mybatis
- mongodb
- effective
- Java
- Lombok
- Heap
- ajax
- redis
- javascript
- Static
- nodejs
- git
- VCS
- html
- Elk
- spring
- 데이터통신
- AWS
- reactive
- 네트워크
- socket
- cache
- libuv
- Today
- Total
빨간색코딩
어노테이션(Annotation) 본문
어노테이션(Annotation)에 대해 알아보자
나는 공부할 때 사진이 많은 것은 ppt로 정리하여 두고, 텍스트만있다면 txt에 적어두는데, 블로그에 올리기 위하여 ppt자료를 풀어서 써본다(피피티에 더 자세히 설명해뒀으니.. 혹시 참고하실분은 슬라이드쉐어 보세유)
1. 어노테이션이란
- @를 이용한 주석, 자바코드에 주석을 달아 특별한 의미를 부여한 것
- 컴파일러가 특정 오류를 억제하도록 지시하는 것과 같이 프로그램 코드의 일부가 아닌 프로그램에 관한 데이터를 제공, 코드에 정보를 추가하는 정형화된 방법.
2. 어노테이션의 용도
- @Override 어노테이션처럼 컴파일러를 위한 정보를 제공하기 위한 용도
- 스프링 프레임워크의 @Controller 어노테이션처럼 런타임에 리플렉션을 이용해서 특수 기능을 추가하기 위한 용도
- 컴파일 과정에 어노테이션 정보로부터 코드를 생성하기 위한 용도
ps. 자바 리플렉션: 다른언어에는 존재하지 않는 특별한 기능, 컴파일 시간이 아닌 실행시간에 동적으로 특정 클래스의 정보를 객체를 통해 분석 및 추출해내는 프로그래밍 기법
3. 기본 어노테이션(JDK에서 제공)
- @Override: 해당 메소드가 부모 클래스에 있는 메소드를 재정의했다는 것을 명시적으로 선언
- @Deprecated: 더이상 사용되지 않는 클래스나 메소드 앞에 추가
- @SuppressWarnings: 프로그램에는 문제가 없는데 간혹 컴파일러가 경고를 뿜을 때가 있는데, 이를 무시하라고 프로그래머에게 알려줌
▲ @Deprecated를 커스텀 어노테이션(@Test)에 사용
▲ @Test와 관련 엘리먼트에 전부 취소선이 그어지고, 경고 발생
▲ 메소드위에 @Deprecated를 사용하면 메소드에 취소선이 그어진다.
▲ 클래스의 타입을 확실하게 하기위해 제네릭을 사용하라고 경고
▲ 이 경고를 무시하기위해 @SuppressWarnings 사용
ps. 제네릭: 타입의 안정성, 개발자의 실수를 방지하기 위해 사용하는 기법으로 안써도 되지만, 경고가 발생된다.
▲ 인자의 종류
@Target 예제
▲ main.java
아래는 Test.java 소스들
▲ @Target을 메소드로 설정했을 경우
결과는
▲ Main.java에서 @Test를 메소드에 주었기 때문에 정상 작동
▲ @Target을 클래스,인터페이스로 설정했을 경우
결과는
▲ Main.java에서 @Test를 메소드에 주었기 때문에 에러 발생
4-2. @Retention
어떤 시점까지 어노테이션이 영향을 미치는지 결정
import java.lang.annotation.Retention;
적용 가능 시점
import java.lang.annotation.RetentionPolicy;
RetentionPolicy.SOURCE: 어노테이션 정보가 컴파일 시 사라짐
RetentionPolicy.CLASS: 클래스 파일에 있는 어노테이션정보가 컴파일러에 의해 참조 가능, 가상머신에서는 사라짐(리플렉션 불가, 디폴트)
RetentionPolicy.RUNTIME: 실행 시 어노테이션 정보가 가상머신에 의해서 참조 가능
6. 어노테이션 사용
@어노테이션(엘리먼트=값, 엘리2="값")
public class 클래스
{}
@어노테이션2(값) //엘리먼트가 1개일 경우
Public class 클래스2
{}
메소드, 필드 등 어디에서나 사용할 수 있다.
'Java' 카테고리의 다른 글
Collections 프레임워크 (0) | 2017.07.04 |
---|---|
cui로만 oracle java8 설치하기 (0) | 2017.05.26 |
JVM 아키텍처 (0) | 2017.05.24 |
이클립스 오류 java was started but returned exit code=-805306369 (0) | 2017.03.23 |
javax.swing.Timer 로 이벤트 반복 (0) | 2017.03.19 |