Java

์Šคํ„ฐ๋”” ํ• ๋ž˜ 12์ฃผ์ฐจ ๊ณผ์ œ: ์• ๋…ธํ…Œ์ด์…˜(ํ”ผ๋“œ๋ฐฑ, feedback)

ํ–ฅ์ฐก 2021. 2. 14. 23:31

๐Ÿ“– ์ฑ… ์ถ”์ฒœ

์•„์›ƒ๋ผ์ด์–ด

 

๋ถ€์˜ ์ถ”์›”์ฐจ์„ 

 

์• ๋…ธํ…Œ์ด์…˜์€ ์ฃผ์„์ด๋‹ค. ์™„์ „ ์ฃผ์„๊ณผ ๊ฐ™์ง€ ์•Š์ง€๋งŒ ์‹คํ–‰๋˜๋Š” ์ฝ”๋“œ๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ์•ˆ๋œ๋‹ค.

์• ๋…ธํ…Œ์ด์…˜์€ ์ •์ ์ธ ๊ฐ’์œผ๋กœ ๋ฐ–์— ๋ชป์“ด๋‹ค. ์•„๋ž˜ ์ฝ”๋“œ๋Š” ๋™์ ์ด๋ฏ€๋กœ ์—๋Ÿฌ ๋ฐœ์ƒ

 

์ •์ ์œผ๋กœ ๋ฐ”๋€Œ๋‹ˆ ์—๋Ÿฌ ํ•ด์†Œ

 

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

ํ•จ์ˆ˜ํ˜• ์ธํ„ฐํŽ˜์ด์Šค์ž„์„ ๋งˆํ‚นํ•˜๋Š” ์–ด๋…ธํ…Œ์ด์…˜

 

๋Œ“๊ธ€์ˆ˜0