구성과 설정값들을 외부의 XML 설정파일에 명시하는 방식을 의미한다. 변경이 될 수 있는 데이터들을 최대한 코드가 아닌
외부설정파일에 분리하기 때문에 변경 요구사항이 들어왔을 때, 재컴파일 없이도 쉽게 변경사항을 적용할 수 가 있다.
유연성이란 장점을 얻었지만, 단점 또한 존재한다. 프로그램 작성을 위해 매번 많은 설정파일을 작성해야 한다는 것이다.
그 규모가 커질수록 설정의 양도 많아지게 되며 이를 잘 구조화 할 수 있는 방법도 필요하게 된다. 또 하나의 단점은 이것보다
좀 더 크다. 도메인 데이터 처리정보가 Model 클래스, 서비스 클래스, XML 설정파일에 분산되어 있어서, 이를 확인하기
위해서는 Model , Service 클래스와 XML 설정파일을 모두 뒤져야 한다는 것이다.
3. Annotation의 사용했을 때의 장점은?
Model 클래스에 직접 명시함으로써 해당 데이터들에 대한 유효조건을 쉽게 파악할수 있게되며, 코드의 양도 줄어든다.
(엄밀히 말하면, 코드의 양은 줄어들지 않는다. 하지만 코드가 깔끔해지고, 어노테이션의 재사용도 가능해진다. )
재컴파일 해야하는 단점이 있다. 애플리케이션 전체적인 설정이나 디플로이 환경에 따라 변경되는 사항들은 XML 설정을
사용하자. 각각의 장단점을 파악하고, 언제 무엇을 사용해야할지 아는 것이 중요하다.
그럼 이제부터 어노테이션을 사용해보자. 사용을 위해 먼저 선행지식들에 대해 잠깐 알아보자.
5. 일반적인 어노테이션의 용도
Single-value, Full 어노테이션으로 분류할 수 있다.
@Deprecated
마커 어노테이션으로 차후 버전에 지원되지 않을 수 있기 때문에 더 이상 사용되지 말아야할 메소드를 나타낸다.
특이하게 더이상 사용되지 말아야할 메소드와 같은 라인상에 놓여져야 한다. (이유모름)
(두 플래그 -deprecated 또는 Xlint:deprecated 중 하나와 javac 명령어를 사용하여 컴파일러 경고를 켜야만,
컴파일러 에러를 발생시켜준다)
@SupressWarning
의미데로 경고를 제거하는 어노테이션이다. Object형을 엘리먼트로 하는 컬렉션을 사용하면, 컴파일러 경고가 발생하는데
이 어노테이션을 사용하여 프로그래머의 의도적인 Object 형 사용임을 알려 경고를 제거할 수 있다.
7. 커스텀(Custom) 어노테이션
1) 커스텀 어노테이션 정의하기
public @interface InProgress { }
어노테이션 정의파일을 컴파일하고, 이 파일을 클래스패스에서 참조할 수 있으면 다른 소스코드상에서 어노테이션을
사용할 수 있다.
어노테이션 유형은 멤버변수를 가질 수 있으며, 이 변수들 컴파일시 또는 런타임에 메타-데이터로서 사용될 수 있다.
이렇게 정의를 하면 자동으로 accessor와 mutator를 제공해준다.
// 해당 태스크가 완료되야함 나타내는 어노테이션
public @interface TODO {
String value();
}
정의한 어노테이션을 다음과 같이 사용한다.
@TODO("Figure out the amount of interest per month")
public void calculateInterest(float amount, float rate) {
// ...
}
단일 멤버를 갖을 경우에만 위와 같이 사용할 수 있다.
3) 디폴트 값 설정하기
public @interface GroupTODO {
public enum Severity { CRITICAL, IMPORTANT, TRIVIAL, DOCUMENTATION };
Severity severity() default Severity.IMPORTANT;
String item();
String assignedTo();
String dateAssigned();
}
디폴트값을 사용한 예는 다음과 같다.
@GroupTODO(
item="Figure out the amount of interest per month",
assignedTo="Brett McLaughlin",
dateAssigned="08/04/2004"
)
public void calculateInterest(float amount, float rate) {
// ...
}
4) 메타-어노테이션
어노테이션에 사용되는 어노테이션으로 해당 어노테이션의 동작대상 및 보여타임을 결정한다.
① @Target 메타-어노테이션
어노테이션이 적용되는 동작 프로그래밍
엘리멘트를 지정하며, 다음과 같은 값들이 있다.
package java.lang.annotation;
public enum ElementType {
TYPE, // Class, Interface, enum
FIELD, // 프로퍼티 (enum 나열값들은 제외)
METHOD, // 메서드
PARAMETER, // 메서드 파라미터
CONSTRUCTOR, // 생성자
LOCAL_VARIABLE, // 로컬변수 또는 Catch문
ANNOTATION_TYPE, // 어노테이션(메타 어노테이션)_
PACKAGE // 자바 패키지
}
② @Retention 메타-어노테이션
자바컴파일러가 어노테이션을 다루는 방법과 관련이 있다. 소스파일, 클래스파일, 런타임 중 어느시점까지
어노테이션을 보유하고 있을 것인지를 결정한다.
package java.lang.annotation;
public enum RetentionPolicy {
SOURCE, // 어노테이션이 컴파일러에 의해 버려짐
CLASS, // 어노테이션이 클래스파일에 저장되지만, JVM에게 무시됨
RUNTIME // 어노테이션이 클래스파일에 저장되며, JVM에 의해 읽혀짐
}
위 세값 중 하나를 인자로 취해 다음과 같이 사용된다.
@Retention(RetentionPolicy.SOURCE)
public @interface SuppressWarnings {
...
}
'IT > JAVA' 카테고리의 다른 글
java 향상된 for문 foreach 루프 사용방법 (0) | 2017.05.04 |
---|---|
VO,JAVA -> JSON 변경( null empty 공백 제거) jar파일 (0) | 2017.05.04 |
[Java/자바] split 메서드 사용법 / java split / 글자 잘라내기 (0) | 2017.05.01 |
[Tip] 이클립스 콘솔창 폰트 크기 조절 (Change the console font size in Eclipse) (0) | 2016.11.15 |
JSP properties 변경시 간단하게 변경방법 서블릿 클래스 (0) | 2016.06.27 |
1.8 공부 (0) | 2016.05.30 |
자바의정석 PPT (0) | 2016.05.30 |