๐ ์ฑ ์ถ์ฒ
์์๋ผ์ด์ด
๋ถ์ ์ถ์์ฐจ์
์ ๋ ธํ ์ด์ ์ ์ฃผ์์ด๋ค. ์์ ์ฃผ์๊ณผ ๊ฐ์ง ์์ง๋ง ์คํ๋๋ ์ฝ๋๋ผ๊ณ ์๊ฐํ๋ฉด ์๋๋ค.
์ ๋ ธํ ์ด์ ์ ์ ์ ์ธ ๊ฐ์ผ๋ก ๋ฐ์ ๋ชป์ด๋ค. ์๋ ์ฝ๋๋ ๋์ ์ด๋ฏ๋ก ์๋ฌ ๋ฐ์
์ ์ ์ผ๋ก ๋ฐ๋๋ ์๋ฌ ํด์
RetentionPolicy์ 3๊ฐ์ง
SOURCE -> CLASS -> RUNTIME
SOURCE : ์์ค์ฝ๋์๋ง ์ ์ง, ์ปดํ์ผํ๊ณ ๋๋ฉด ์ ๋ ธํ ์ด์ ์ ๋ํ ์ ๋ณด๊ฐ ์์ด์ง๋ค. (๋ฐ์ดํธ์ฝ๋์ ๋จ์์์ง ์๋๋ค)
CLASS : ์ ๋ ธํ ์ด์ ์ ๋ํ ์ ๋ณด๋ฅผ ๋ฐ์ดํธ์ฝ๋์๋ ๋จ๊ฒจ ๋๊ฒ ๋ค. (.classํ์ผ์๋ ๋จ๊ฒจ ๋๊ฒ ๋ค.)
๋ฐ์ดํธ ๋ฒ๋๋ฅผ ์ฌ์ฉํ๋ฉด classํ์ผ์ ๋ฐ์ดํธ์ฝ๋๋ฅผ ์ถ์ถํด์ ๋ฆฌํ๋ ์ ์ด ์ฌ์ฉ ๊ฐ๋ฅํ๋ค
RUNTIME : RUNTIME๊น์ง ์ ์งํ๊ฒ ๋ค. (๋ฆฌํ๋ ์ ์ด ๊ฐ๋ฅํด์ง๋ค. -> RUNTIME ์ค์ ํด๋์ค ์ ๋ณด๋ฅผ ๊บผ๋ด์ ๋ณด๊ฒ ๋ค.)
๋ฆฌํ๋ ์ ์ฝ๋
public class HelloMain {
public static void main(String[] args) {
Annotation[] annotations =
HelloController.class.getAnnotations();
for (Annotation annotation : annotations) {
System.out.println(annotation);
}
}
}
HelloController.java
@Hello
@RestController
public class HelloController {
private static final String hello= "hello";
@GetMapping(hello)
public String hello() {
return "hello";
}
}
Hello.java
@Retention(RetentionPolicy.RUNTIME)
public @interface Hello {
}
getAnnotations() vs getDeclaredAnnotations()
getAnnotations() : @Inherited ๋ถ์ ๊ฒ๊น์ง ๊ฐ์ ธ์จ๋ค
getDeclaredAnnotations() : ๊ทธ ํด๋์ค์ ์ ์๋ ๊ฒ๋ง ๊ฐ์ ธ์จ๋ค.
getFields() vs getDeclaredFields()
๊ฒฐ๊ณผ
Mockito๊ฐ javadoc์ ํ์ฉํด์ ๋ฌธ์ํํ๋ค.
ServiceLoader
ํน์ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ์ฌ๋ฌ jarํ์ผ ์๋ค๊ณ ํ ๋, ServiceLoader๋ฅผ ์ด์ฉํ๋ฉด jarํ์ผ๋ง ๋ฐ๊พธ๋ฉด์ ๊ฐ๊ฐ์ ๊ตฌํ์ฒด๋ฅผ ๊ฐ์ ธ์ฌ ์ ์๋ค
@FunctionalInterface
ํจ์ํ ์ธํฐํ์ด์ค์์ ๋งํนํ๋ ์ด๋ ธํ ์ด์
'Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์คํฐ๋ ํ ๋ 14์ฃผ์ฐจ ๊ณผ์ : ์ ๋ค๋ฆญ(feedback, ํผ๋๋ฐฑ) (0) | 2021.02.28 |
---|---|
์คํฐ๋ํ ๋ 12์ฃผ์ฐจ ๊ณผ์ : ์ ๋ ธํ ์ด์ (0) | 2021.02.28 |
์คํฐ๋ํ ๋ 11์ฃผ์ฐจ ๊ณผ์ : Enum(feedback, ํผ๋๋ฐฑ) (0) | 2021.02.13 |
11์ฃผ์ฐจ ๊ณผ์ : Enum (0) | 2021.02.13 |
์คํฐ๋ํ ๋ 10์ฃผ์ฐจ ๊ณผ์ : ๋ฉํฐ์ฐ๋ ๋ ํ๋ก๊ทธ๋๋ฐ (feeback, ํผ๋๋ฐฑ) (0) | 2021.02.12 |