2023. 3. 16. 10:53ใJAVA/Effective JAVA
item27. ๋น๊ฒ์ฌ ๊ฒฝ๊ณ ๋ฅผ ์ ๊ฑฐํ๋ผ.
[์ดํํฐ๋ธ ์๋ฐ] Item27. ๋น๊ฒ์ฌ ๊ฒฝ๊ณ ๋ฅผ ์ ๊ฑฐํ๋ผ. (tistory.com)
์ด๋ ธํ ์ด์ annotation ์ด๋?
: ์๋ฐ์์ ์ด๋ ธํ ์ด์ ์ ์ฌ์ ์ ์ธ ์๋ฏธ๋ก๋ ์ฃผ์์ด๋ผ๋ ๋ป์ผ๋ก ์์ค์ฝ๋์ ์ถ๊ฐํด์ ์ฌ์ฉํ ์ ์๋ ์ผ์ข ์ ๋ฉํ ๋ฐ์ดํฐ์ ์ผ์ข ์ด๋ค.
๋ฉํ ๋ฐ์ดํฐ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ฒ๋ฆฌํด์ผํ ๋ฐ์ดํฐ๊ฐ ์๋๋ผ ์ปดํ์ผ ๊ณผ์ ๊ณผ ์คํ ๊ณผ์ ์์ ์ฝ๋๋ฅผ ์ด๋ป๊ฒ ์ฒ๋ฆฌํด์ผํ๋์ง๋ฅผ ์๋ ค์ฃผ๊ธฐ ์ํ ์ถ๊ฐ ์ ๋ณด์ด๋ค.
์๋ฐ ์ด๋ ธํ ์ด์ ์ ๊ธฐ๋ฅ
- ์ปดํ์ผ๋ฌ์๊ฒ ์ฝ๋ ์์ฑ ๋ฌธ๋ฒ ์๋ฌ๋ฅผ ์ฒดํฌํ๋๋ก ์ ๋ณด ์ ๊ณต
- ์ํํธ์จ์ด ๊ฐ๋ฐ ํ๊ฒฝ์ด ๋น๋๋ ๋ฐฐํฌ์ ์ฝ๋๋ฅผ ์๋์ผ๋ก ์์ฑํ ์ ์๋๋ก ์ ๋ณด ์ ๊ณต
- ๋ฐํ์์ ํน์ ๊ธฐ๋ฅ์ ์คํํ๋๋ก ์ ๋ณด ์ ๊ณต
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface MyAnnotation
{
}
@MyAnnotation
public class MyClass
{
@MyAnnotation
public static void main(String[] args)
{
Arrays.stream(MyClass.class.getAnnotations()).forEach(System.out::println);
}
}
@Documented
: ๊ฐ๋จํ ์ด๋ ธํ ์ด์ ์ผ๋ก ์ด ์ด๋ ธํ ์ด์ ์ ์ฌ์ฉํ ์ฝ๋์ javadoc์ ํด๋น ์ด๋ ธํ ์ด์ ์ ๋ณด๊ฐ ํฌํจ๋๋๋ก ํ๋ ์ด๋ ธํ ์ด์ ์ด๋ค.
@Retention
: ์ด๋ ธํ ์ด์ ์ ์ ๋ณด๋ฅผ ์ผ๋ง๋ ์ค๋ ์ ์งํ ๊ฒ์ธ๊ฐ.
RetentionPolicy.RUNTIME, SOURCE, CLASS ์ผ๋ก ๋ฒ์๋ฅผ ์ ํ ์ ์๋ค.
RUNTIME : ๋ฐ์ดํธ ์ฝ๋ ํ์ผ๊น์ง ์ด๋ ธํ ์ด์ ์ ๋ณด๋ฅผ ์ ์งํ๋ฉด์ ๋ฆฌํ๋ ์ ์ ์ด์ฉํด ๋ฐํ์์ ์ด๋ ธํ ์ด์ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ฌ ์ ์๋ค.
SOURCE : compile ์ดํ์๋ ์ญ์ ๋๋ค.
CLASS : ๋ฐ์ดํธ ์ฝ๋ ํ์ผ๊น์ง ์ด๋ ธํ ์ด์ ์ ๋ณด๋ ์ ์งํ์ง๋ง, ๋ฆฌํ๋ ์ ์ ์ด์ฉํด์ ์ด๋ ธํ ์ด์ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ฌ ์ ๋ ์๋ค.
@Target
: ์ด๋ ธํ ์ด์ ์ ์ฌ์ฉํ ์ ์๋ ์์น
ElementType.Tye, Filed, Method, Parameter ....
Type : ํด๋์ค, ์ธํฐํ์ด์ค, ์ด๊ฑฐํ์
Filed : ํ๋
Method: ๋ฉ์๋
...
@Target({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE, MODULE})
@Retention(RetentionPolicy.SOURCE)
public @interface SuppressWarnings {
/**
* The set of warnings that are to be suppressed by the compiler in the
* annotated element. Duplicate names are permitted. The second and
* successive occurrences of a name are ignored. The presence of
* unrecognized warning names is <i>not</i> an error: Compilers must
* ignore any warning names they do not recognize. They are, however,
* free to emit a warning if an annotation contains an unrecognized
* warning name.
*
* <p> The string {@code "unchecked"} is used to suppress
* unchecked warnings. Compiler vendors should document the
* additional warning names they support in conjunction with this
* annotation type. They are encouraged to cooperate to ensure
* that the same names work across multiple compilers.
* @return the set of warnings to be suppressed
*/
String[] value();
}
@SuppressWarnings ์ด๋ ธํ ์ด์ ์ @Retention์ ๋ณด๋ฉด SOURCE๊น์ง๋ก compile ์ดํ์๋ ์ญ์ ๋๋ค.
๊ทธ๋ฆฌ๊ณ @Target์ ๋ณด๋ฉด ์ด๋ ธํ ์ด์ ์ด ์ ์ธ์๋ง ๋ฌ ์ ์๋ค๋ ๊ฒ๋ ์ ์ ์๋ค.
'JAVA > Effective JAVA' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์ดํํฐ๋ธ ์๋ฐ] Item28 ์๋ฒฝ๊ณต๋ต. @SafeVarags (0) | 2023.03.17 |
---|---|
[์ดํํฐ๋ธ ์๋ฐ] Item28. ๋ฐฐ์ด๋ณด๋ค๋ ๋ฆฌ์คํธ๋ฅผ ์ฌ์ฉํ๋ผ. (0) | 2023.03.17 |
[์ดํํฐ๋ธ ์๋ฐ] Item27. ๋น๊ฒ์ฌ ๊ฒฝ๊ณ ๋ฅผ ์ ๊ฑฐํ๋ผ. (0) | 2023.03.16 |
[์ดํํฐ๋ธ ์๋ฐ] Item26 ์๋ฒฝ๊ณต๋ต. GenericRepository (0) | 2023.03.15 |
[์ดํํฐ๋ธ ์๋ฐ] Item26. ๋ก ํ์ ์ ์ฌ์ฉํ์ง ๋ง๋ผ. (0) | 2023.03.15 |