Notice
Recent Posts
Link
Today
Total
10-06 00:17
๊ด€๋ฆฌ ๋ฉ”๋‰ด

dingdong coding

JAVA_Spring ๋ณธ๋ฌธ

๐ŸŽˆ์ทจ์ค€

JAVA_Spring

๐Ÿถ ๊ฐœ๋ฐœ๊ฐœ๋ฐœ ๐Ÿพ 2022. 7. 3. 14:08

1. ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์ข…๋ฅ˜์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”

๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์—๋Š” Serial, Parallel, Parallel Old, CMS(Concurrent Mark Sweep), G1(Garbage First GC) ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.   

 

•   ๋” ๊ตฌ์ฒด์ ์ธ ์„ค๋ช…

[ JAVA ] Garbage Collection

2. try-with-resources์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”

์ž์›๋ฐ˜๋‚ฉ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. try(...)์—์„œ ์„ ์–ธ๋œ ๊ฐ์ฒด(์ž์›ํ• ๋‹น)๋“ค์— ๋Œ€ํ•ด์„œ ์ข…๋ฃŒ๋  ๋–„ ์ž๋™์œผ๋กœ ์ž์›์„ ํ•ด์ œํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. ์ฆ‰ try์—์„œ ์„ ์–ธ๋œ ๊ฐ์ฒด๊ฐ€ AutoCloseable์„ ๊ตฌํ˜„ํ•˜์˜€๋‹ค๋ฉด Java๋Š” try๊ตฌ๋ฌธ์ด ์ข…๋ฃŒ๋  ๋•Œ ๊ฐ์ฒด์˜ close()๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ด ์ค๋‹ˆ๋‹ค. 

 

•  ์ž์› ๋ฐ˜๋‚ฉ ๋ฌธ์ œ๋ž€?

try-catch-finally๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด null๊ฒ€์‚ฌ์™€ ํ•จ๊ป˜ ์ง์ ‘ close๋ฅผ ํ˜ธ์ถœํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ๋˜๋ฉด ์ž์›๋ฐ˜๋‚ฉ์— ์˜ํ•ด ์ฝ”๋“œ๊ฐ€ ๋ณต์žกํ•ด์ง€๊ณ  ์‹ค์ˆ˜ ๋˜๋Š” try๊ตฌ๋ฌธ์—์„œ ์—๋Ÿฌ๋ฐœ์ƒ ์‹œ ์ž์›์„ ๋ฐ˜๋‚ฉํ•˜์ง€ ๋ชปํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์ƒ๊ธฐ๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค. 

 

•   try-catch-finally

public static void main(String args[]) throws IOException {
    FileInputStream is = null;
    BufferedInputStream bis = null;
    try {
        is = new FileInputStream("file.txt");
        bis = new BufferedInputStream(is);
        int data = -1;
        while((data = bis.read()) != -1){
            System.out.print((char) data);
        }
    } finally {
        // close resources
        if (is != null) is.close();
        if (bis != null) bis.close();
    }
}

•   try-with-resources

public static void main(String args[]) {
    try (
        FileInputStream is = new FileInputStream("file.txt");
        BufferedInputStream bis = new BufferedInputStream(is)
    ) {
        int data = -1;
        while ((data = bis.read()) != -1) {
            System.out.print((char) data);
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}

 

•   ๋” ๊ตฌ์ฒด์ ์ธ ์„ค๋ช…

Java - Try-with-resources๋กœ ์ž์› ์‰ฝ๊ฒŒ ํ•ด์ œํ•˜๊ธฐ

[ Java ] try-with-resources๋ž€? try-with-resources ์‚ฌ์šฉ๋ฒ• ์˜ˆ์‹œ์™€ try-with-resources๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ์ด์œ 

3. Spring์˜ DI, DL, IoC, AOP์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”

DI๋ž€ Dependency Injection์˜ ์•ฝ์ž๋กœ ์˜์กด์„ฑ ์ฃผ์ž…์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. 

์ด๋Š” ์™ธ๋ถ€์—์„œ ๋‘ ๊ฐ์ฒด ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ๊ฒฐ์ •ํ•ด์ฃผ๋Š” ๋””์ž์ธ ํŒจํ„ด์œผ๋กœ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์ด์— ๋‘ฌ์„œ ํด๋ž˜์Šค ๋ ˆ๋ฒจ์—์„œ๋Š” ์˜์กด๊ด€๊ณ„๊ฐ€ ๊ณ ์ •๋˜์ง€ ์•Š๋„๋ก ํ•˜๊ณ  ๋Ÿฐํƒ€์ž„ ์‹œ์— ๊ด€๊ณ„๋ฅผ ๋™์ ์œผ๋กœ ์ฃผ์ž…ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ๊ฐ์ฒด๋ฅผ ์ง์ ‘ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ ์™ธ๋ถ€์—์„œ ์ƒ์„ฑํ•œ ํ›„ ์ฃผ์ž…์‹œ์ผœ์ฃผ๋Š” ๋ฐฉ์‹์œผ๋กœ ์ด๋ฅผ ์ด์šฉํ•˜๋ฉด ๋ชจ๋“ˆ ๊ฐ„์˜ ๊ฒฐํ•ฉ๋„๊ฐ€ ๋‚ฎ์•„์ง€๊ณ  ์œ ์—ฐ์„ฑ์ด ๋†’์•„์ง‘๋‹ˆ๋‹ค. 

 

DL์ด๋ž€ Dependency Lookup์˜ ์•ฝ์ž๋กœ ์˜์กด์„ฑ ๊ฒ€์ƒ‰์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

์ด๋Š” Bean์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•ด ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ œ๊ณตํ•˜๋Š” API๋ฅผ ์ด์šฉํ•˜์—ฌ Bean์„ ๊ฒ€์ƒ‰ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.  ์ฆ‰ ์˜์กด์„ฑ์„ ๊ฐ–๋Š” ๋นˆ์„ ๊ฒ€์ƒ‰ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. 

 

Ioc๋ž€ Inversion of control์˜ ์•ฝ์ž๋กœ ์ œ์–ด์˜ ์—ญ์ „์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

์ด๋Š” ๋ง๊ทธ๋Œ€๋กœ ๋ฉ”์†Œ๋“œ๋‚˜ ๊ฐ์ฒด์˜ ํ˜ธ์ถœ์ž‘์—…์„ ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ฒฐ์ •ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์™ธ๋ถ€์—์„œ ๊ฒฐ์ •๋˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์Šคํ”„๋ง ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ๋Š” ์˜ค๋ธŒ์ ํŠธ(๋นˆ)์˜ ์ƒ์„ฑ๊ณผ ์˜์กด ๊ด€๊ณ„์„ค์ •, ์‚ฌ์šฉ, ์ œ๊ฑฐ ๋“ฑ์˜ ์ž‘์—…์„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ ๋Œ€์‹  ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋‹ด๋‹นํ•˜๋ฉฐ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ฝ”๋“œ ๋Œ€์‹  ๊ฐ์ฒด์— ๋Œ€ํ•œ ์ œ์–ด๊ถŒ์„ ๊ฐ–๊ณ  ์žˆ์Œ์„ Ioc๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค. ( ๊ทธ ์™ธ ์ œ์–ด๊ถŒ์„ ํ”„๋ ˆ์ž„ ์›Œํฌ์—์„œ ๊ฐ€์ ธ๊ฐ„๋‹ค๋Š” ๋ง๋กœ๋„ ์“ฐ์ž„)

 

AOP๋ž€  Aspect Oriented Programming์˜ ์•ฝ์ž๋กœ ๊ด€์  ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

์ด๋Š” ์–ด๋–ค ๋กœ์ง์„ ๊ธฐ์ค€์œผ๋กœ ํ•ต์‹ฌ์ ์ธ ๊ด€์ , ๋ถ€๊ฐ€์ ์ธ ๊ด€์ ์œผ๋กœ ๋‚˜๋ˆ„์–ด์„œ ๋ณด๊ณ  ๊ทธ ๊ด€์ ์„ ๊ธฐ์ค€์œผ๋กœ ๊ฐ๊ฐ ๋ชจ๋“ˆํ™” ํ•˜๊ฒ ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ( ์—ฌ๊ธฐ์„œ ๋ชจ๋“ˆํ™”๋ž€ ์–ด๋–ค ๊ณตํ†ต๋œ ๋กœ์ง์ด๋‚˜ ๊ธฐ๋Šฅ์„ ํ•˜๋‚˜์˜ ๋‹จ์œ„๋กœ ๋ฌถ๋Š” ๊ฒƒ )  ์ฆ‰, ํฉ์–ด์ง„ ๊ด€์‹ฌ์‚ฌ๋ฅผ Aspect๋กœ ๋ชจ๋“ˆํ™”ํ•˜๊ณ  ํ•ต์‹ฌ์ ์ธ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์—์„œ ๋ถ„๋ฆฌํ•˜์—ฌ ์žฌ์‚ฌ์šฉํ•˜์ž๋Š” ์ทจ์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

( + ํšก๋‹จ ๊ด€์‹ฌ์‚ฌ์˜ ๋ถ„๋ฆฌ๋ฅผ ํ—ˆ์šฉํ•˜์—ฌ ๋ชจ๋“ˆ์„ฑ์„ ์ฆ๊ฐ€์‹œํ‚ค๋Š” ๋ชฉ์ , ๋Œ€๋ถ€๋ถ„์˜ ์‹œ์Šคํ…œ์ด ๊ณตํ†ต์œผ๋กœ ๊ฐ€์ง€๋Š” ๋ณด์•ˆ, ๋กœ๊ทธ ๊ฐ™์€ ํšก๋‹จ ๊ด€์‹ฌ์‚ฌ๋ฅผ ๋ถ„๋ฆฌํ•ด์„œ ์ œ์ž‘ํ•˜๋Š” ๊ฒƒ )

4. Lombok ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๋Œ€ํ•ด ์•Œ๊ณ  ์žˆ๋‚˜์š”? ์•Œ๊ณ  ์žˆ๋‹ค๋ฉด ๋กฌ๋ณต์ด ๋งŒ๋“œ๋Š” ๋ฉ”์†Œ๋“œ๋“ค์ด ์ƒ์„ฑ๋˜๋Š” ์‹œ์ ์€ ์–ธ์ œ์ธ๊ฐ€์š”?

Lombok์ด๋ž€ ์–ด๋…ธํ…Œ์ด์…˜ ๊ธฐ๋ฐ˜์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์ž๋™์™„์„ฑ ํ•ด์ฃผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ž…๋‹ˆ๋‹ค. Lombok์„ ์‚ฌ์šฉํ•˜๋ฉด Getter, Setter, Equlas, ToString ๋“ฑ๊ณผ ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฉด์˜ ์ฝ”๋“œ๋ฅผ ์ž๋™์™„์„ฑ ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

Lombok์€ ์†Œ์Šค์ฝ”๋“œ๋ฅผ ์ปดํŒŒ์ผ ํ•˜๋Š” ๊ณผ์ •์— ๊ฐœ์ž…ํ•ด์„œ ์ถ”๊ฐ€์ ์ธ ์ฝ”๋“œ๋ฅผ ๋งŒ๋“ค์–ด ๋ƒ…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์• ๋…ธํ…Œ์ด์…˜ ํ”„๋กœ์„ธ์‹ฑ์ด๋ผ๊ณ  ํ•˜๋Š”๋ฐ ์ด๋Ÿฌํ•œ ์• ๋…ธํ…Œ์ด์…˜ ํ”„๋กœ์„ธ์‹ฑ์€ ์ž๋ฐ” ์–ธ์–ด์— ํฌํ•ฉ๋œ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. 

 

•  Annotation Processor๋ž€?

Annotation Processor๋Š” ์ปดํŒŒ์ผ ๋‹จ๊ณ„์—์„œ Annotation์— ์ •์˜๋œ ์ผ๋ ฌ์˜ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋™์ž‘ํ•˜๊ฒŒ ํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

์ปดํŒŒ์ผ ๋‹จ๊ณ„์—์„œ ์‹คํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์—, ๋นŒ๋“œ ๋‹จ๊ณ„์—์„œ ์—๋Ÿฌ๋ฅผ ์ถœ๋ ฅํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ๊ณ , ์†Œ์Šค์ฝ”๋“œ ๋ฐ ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉํ•˜๋Š” ์˜ˆ๋กœ ์ž๋ฐ”์˜ @Override๊ฐ€ ์žˆ์œผ๋ฉฐ, Lombok(๋กฌ๋ถ)์ด๋ผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

5. ์ฒดํฌ ์˜ˆ์™ธ์™€ ์–ธ์ฒดํฌ ์˜ˆ์™ธ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”

์–ธ์ฒดํฌ ์˜ˆ์™ธ๋Š” RuntimeException์„ ์ƒ์†ํ•œ ๊ฒƒ์„ ๋งํ•˜๊ณ , ์ฒดํฌ์˜ˆ์™ธ๋Š” ์ด ์™ธ์˜ ์˜ˆ์™ธ๋“ค์„ ๋งํ•ฉ๋‹ˆ๋‹ค. 

 

์ฒดํฌ ์˜ˆ์™ธ๋Š” RuntimeException์„ ์ƒ์†ํ•˜์ง€ ์•Š๋Š” ์˜ˆ์™ธ๋“ค์„ ๋งํ•˜๋Š”๋ฐ ์ฒดํฌ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ, ๋ณต๊ตฌ๊ฐ€ ๊ฐ€๋Šฅํ•œ ์˜ˆ์™ธ๋“ค์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ˜๋“œ์‹œ ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ํ•จ๊ป˜ ์ž‘์„ฑํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.  ( catch๋ฌธ์œผ๋กœ ์˜ˆ์™ธ๋ฅผ ์žก๋“ , throws๋กœ ์˜ˆ์™ธ๋ฅผ ์ž์‹ ์„ ํ˜ธ์ถœํ•œ ํด๋ž˜์Šค๋กœ ๋˜์ง€๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ํ•ด๊ฒฐํ•ด์•ผํ•˜๋Š”๋ฐ)  ์˜ˆ์™ธ๋ฅผ ํ•ด๊ฒฐํ•˜์ง€ ์•Š์œผ๋ฉด ์ปดํŒŒ์ผ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.  ๋Œ€ํ‘œ์ ์œผ๋กœ๋Š” IOException์ด๋‚˜ SQLException ๋“ฑ์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

 

์–ธ์ฒดํฌ ์˜ˆ์™ธ๋Š” RuntiemException์„ ์ƒ์†ํ•œ ์˜ˆ์™ธ๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋ช…์‹œ์ ์œผ๋กœ ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฅผ ๊ฐ•์ œํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์–ธํ…Œํฌ ์˜ˆ์™ธ๋ผ ๋ถ€๋ฆ…๋‹ˆ๋‹ค.์–ธ์ฒดํฌ ์˜ˆ์™ธ๋Š” ๋”ฐ๋กœ catch๋ฌธ์œผ๋กœ ์žก๊ฑฐ๋‚˜ throws๋กœ ์„ ์–ธํ•˜์ง€ ์•Š์•„๋„ ๋ฉ๋‹ˆ๋‹ค. ์ฆ‰, ํ”„๋กœ๊ทธ๋žจ์— ์˜ค๋ฅ˜๊ฐ€ ์žˆ์„ ๋•Œ ๋ฐœ์ƒํ•˜๋„๋ก ์˜๋„๋œ ๊ฒƒ๋“ค์ž…๋‹ˆ๋‹ค. ๋Œ€ํ‘œ์ ์œผ๋กœ NullPointException์ด๋‚˜ IllegalArgumentException ๋“ฑ์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

6. ํด๋ž˜์Šค์™€ ๊ฐ์ฒด์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”

ํด๋ž˜์Šค๋ž€ ๊ณตํ†ต๋˜๋Š” ๊ฐ์ฒด์˜ ์†์„ฑ๊ณผ ๊ธฐ๋Šฅ์„ ์ฝ”๋“œ๋ฅผ ๊ตฌํ˜„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. (๋…ผ๋ฆฌ์ ์ธ ๊ฐœ๋…)

OOP์—์„œ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ๋ณ€์ˆ˜์™€ ๋ฉ”์†Œ๋“œ๋ฅผ ์ •์˜ํ•˜๋Š” ์ผ์ข…์˜ ํ‹€์ž…๋‹ˆ๋‹ค. ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“œ๋Š” ์ด์œ ๋Š” ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ์žฌ์‚ฌ์šฉ์„ฑ์„ ๋†’์ด๊ธฐ ์œ„ํ•œ ๊ฒƒ์œผ๋กœ ํด๋ž˜์Šค๋Š” ๊ฐ์ฒด๋ฅผ ์ •์˜ํ•˜๊ธฐ ์œ„ํ•œ ์ƒํƒœ (๋ฉค๋ฒ„๋ณ€์ˆ˜)์™€ ๋ฉ”์„œ๋“œ(ํ•จ์ˆ˜)๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.

ex )  ์„ค๊ณ„๋„๋ฉด 

 

๊ฐ์ฒด(์ธ์Šคํ„ด์Šค)๋ž€ ํด๋ž˜์Šค์—์„œ ์ •์˜ํ•œ ๊ฒƒ์„ ๋ฐ”ํƒ•์œผ๋กœ ์‹ค์ œ ์ €์žฅ๊ณต๊ฐ„์ธ ๋ฉ”๋ชจ๋ฆฌ์— ํ• ๋‹น๋œ ๊ฒƒ์œผ๋กœ, ํ”„๋กœ๊ทธ๋žจ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๋ฐ์ดํ„ฐ ๋˜๋Š” ์‹๋ณ„์ž์— ์˜ํ•ด ์ฐธ์กฐ๋˜๋Š” ๊ณต๊ฐ„์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. 

7. JVM ๊ตฌ์กฐ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”

JVM ๊ตฌ์กฐ๋Š” ํฌ๊ฒŒ Garbage Collector, Execution Engine, Class Loader, Runtime Data Area 4๊ฐ€์ง€๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

์ž๋ฐ” ์†Œ์Šค ํŒŒ์ผ์€ ์ž๋ฐ” ์ปดํŒŒ์ผ๋Ÿฌ์— ์˜ํ•ด์„œ ๋ฐ”์ดํŠธ ์ฝ”๋“œ ํ˜•ํ•ด์ธ ํด๋ž˜์Šค ํŒŒ์ผ์ด ๋ฉ๋‹ˆ๋‹ค. ์ด ํด๋ž˜์Šค ํŒŒ์ผ์€ ํด๋ž˜์Šค ๋กœ๋”๊ฐ€ ์ฝ์–ด๋“ค์ด๋ฉด์„œ JVM์ด ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค.

 

Class Loader๋Š” JVM ๋‚ด๋กœ ํด๋ž˜์Šค ํŒŒ์ผ์„ ๋กœ๋“œํ•˜๊ณ , ๋งํฌ๋ฅผ ํ†ตํ•ด ๋ฐฐ์น˜ํ•˜๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ชจ๋“ˆ์ž…๋‹ˆ๋‹ค. ๋Ÿฐํƒ€์ž„ ์‹œ์— ๋™์ ์œผ๋กœ ํด๋ž˜์Šค๋ฅผ ๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค. 

 

Execution Engine๋Š” ํด๋ž˜์Šค ๋กœ๋”๋ฅผ ํ†ตํ•ด JVM ๋‚ด์˜ Runtime Data Area์— ๋ฐฐ์น˜๋œ ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋“ค์„ ๋ช…๋ น์–ด ๋‹จ์œ„๋กœ ์ฝ์–ด์„œ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

 

Garbage Collector๋Š” ํž™ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์— ์ƒ์„ฑ๋œ ๊ฐ์ฒด๋“ค ์ค‘์—์„œ ์ฐธ์กฐ๋˜์ง€ ์•Š๋Š” ๊ฐ์ฒด๋“ค์„ ํƒ์ƒ‰ ํ›„ ์ œ๊ฑฐํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. 

 

Runtime Data Area๋Š” JVM์˜ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์œผ๋กœ ์ž๋ฐ” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•  ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ๋ฐ์ดํ„ฐ ๋“ค์„ ์ ์žฌํ•˜๋Š” ์˜์—ญ์ž…๋‹ˆ๋‹ค. ์ด ์˜์—ญ์€ ํฌ๊ฒŒ Method Area, Heap Area, Stack Area, PC Register, Native Method Stack์œผ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

•   ๋” ๊ตฌ์ฒด์ ์ธ ์„ค๋ช…

JVM ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ๋ž€? (JAVA)

8. ์ปฌ๋ ‰์…˜ ๊ด€๋ จ ๋ฉ”์†Œ๋“œ ์•Œ๊ณ ์žˆ๋Š” ๊ฒƒ๋“ค ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”

 

9. ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ์˜ ์ž‘๋™์— ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š”์ง€ ์ง„๋‹จํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ๋ฌด์—‡์ด ์žˆ์„๊นŒ์š”?

Survivor ์˜์—ญ ์ค‘ ํ•˜๋‚˜๋Š” ๋ฐ˜๋“œ์‹œ ๋น„์–ด์žˆ๋Š” ์ƒํƒœ๋กœ ๋‚จ์•„์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ Survivor ์˜์—ญ์— ๋ชจ๋‘ ๋ฐ์ดํ„ฐ๊ฐ€ ์กด์žฌํ•˜๊ฑฐ๋‚˜, ๋‘ ์˜์—ญ ๋ชจ๋‘ ์‚ฌ์šฉ๋Ÿ‰์ด 0์ด๋ผ๋ฉด ์‹œ์Šคํ…œ์ด ์ •์ƒ์ ์ธ ์ƒํ™ฉ์ด ์•„๋‹ˆ๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์ถ”๊ฐ€์ ์œผ๋กœ GC์— ๋Œ€ํ•œ ๋กœ๊ทธ๋ฅผ ํ™•์ธํ•˜์—ฌ ์˜ต์…˜์„ ์ˆ˜์ •ํ•  ์ง€ ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ• ์ง€ ์ •ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

 

•   ๋” ๊ตฌ์ฒด์ ์ธ ์„ค๋ช…

[๊ธฐ์ˆ ๋ฉด์ ‘] CS ๊ธฐ์ˆ ๋ฉด์ ‘ ์งˆ๋ฌธ - ๊ฐœ๋ฐœ ์–ธ์–ด (7/8)

10. Spring MVC์— ๋Œ€ํ•ด ์„ค๋ช…ํ•˜๊ณ , ์–ด๋– ํ•œ ํ๋ฆ„์œผ๋กœ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š”์ง€ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”

Spring MVC๋ž€ ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์„ ์œ„ํ•œ MVC ํŒจํ„ด ๊ธฐ๋ฐ˜์˜ ์›น ํ”„๋ ˆ์ž„ ์›Œํฌ ์ž…๋‹ˆ๋‹ค. Spring MVC๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ตฌ์„ฑ์š”์†Œ๋ฅผ Model, View, Controller๋กœ ๋ถ„๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์ปดํฌ๋„ŒํŠธ๋กœ๋Š” DispatcherServlet, HandlerMapping, Controller, ViewResolver, View๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.  ์š”์ฒญ์ฒ˜๋ฆฌ๋Š” DispatcherServlet์ด Controller์— ์ „๋‹ฌํ•˜๋Š” ๊ณผ์ •์œผ๋กœ ์ด๋ฃจ์–ด์ง€๋ฉฐ ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

 

DispatcherServlet : ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ์ „๋‹ฌ ๋ฐ›์•„ ์ปจํŠธ๋กค๋Ÿฌ์—๊ฒŒ ์š”์ฒญ์„ ์ „๋‹ฌํ•˜๊ณ  ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ๋ฆฌํ„ดํ•œ ๊ฒฐ๊ณผ ๊ฐ’์„ view์—๊ฒŒ ์ „๋‹ฌํ•˜์—ฌ ์•Œ๋งž์€ ์‘๋‹ต์„ ํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ, ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ์ค‘์•™์—์„œ ์ฒ˜๋ฆฌํ•˜๋Š” ์Šคํ”„๋ง MVC์˜ ํ•ต์‹ฌ ๊ตฌ์„ฑ์š”์†Œ, web.xml์— ํ•œ ๊ฐœ์ด์ƒ์˜ DispatcherServlet์„ ์„ค์ •ํ•จ. 

•  HandlerMapping : ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ URL์„ ์–ด๋–ค ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ์ฒ˜๋ฆฌํ• ์ง€๋ฅผ ๊ฒฐ์ •

•  Controller : ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•œ ๊ท€ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ DispatcherServlet์—๊ฒŒ ์•Œ๋ ค์คŒ

•  ModelAndView : ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ์ฒ˜๋ฆฌํ•œ ๊ฒฐ๊ณผ์ •๋ณด ๋ฐ ๋ทฐ ์„ ํƒ์— ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ๋‹ด์•„๋†“๋Š” ์„ธํŠธ

•  ViewResolver : ์ปจํŠธ๋กค๋Ÿฌ์˜ ์ฒ˜๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ์ƒ์„ฑํ•  ๋ทฐ๋ฅผ ๊ฒฐ์ •

•  View : ์ปจํŠธ๋กค๋Ÿฌ์—์„œ ๋ฆฌํ„ด ๋ฐ›์€ ์ฒ˜๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ํ™”๋ฉด์— ์ถœ๋ ฅ

 

1 ) DispatcherServlet์€ web.xml์— ์ •์˜๋œ URL ํŒจํ„ด์— ๋งž๋Š” ์š”์ฒญ์„ ๋ฐ›๊ณ  URL ์ปจํŠธ๋กค๋Ÿฌ์˜ ๋งตํ•‘ ์ž‘์—…์„ HandlerMapping์— ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค.

 

2 ) HandlerMapping์€ URL์„ ๊ธฐ์ค€์œผ๋กœ ์–ด๋–ค ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ• ์ง€ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ๋Š” HandlerExecution Chain๊ฐ์ฒด์— ๋‹ด์•„์„œ ๋ฆฌํ„ดํ•˜๋Š”๋ฐ, ์š”์ฒญ์— ํ•ด๋‹นํ•˜๋Š” Interceptor๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ ํ•จ๊ป˜ ์ค๋‹ˆ๋‹ค.

 

3 ) HandlerAdapter๋Š” ์ปจํŠธ๋กค๋Ÿฌ์˜ ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ์—ญํ• ์„ ํ•˜๋Š”๋ฐ ์‹คํ–‰๋  Interceptor๊ฐ€ ์žˆ์„ ๋•Œ๋Š” Interceptor์˜ preHandle() ๋ฉ”์†Œ๋“œ๋ฅผ ์‹คํ–‰ํ•œ ๋‹ค์Œ ์ปจํŠธ๋กค๋Ÿฌ์˜ ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

 

4 ) ์ปจํŠธ๋กค๋Ÿฌ๋Š” ์š”์ฒญ์„ ์ฒ˜๋ฆฌ ํ•œ ๋’ค ์ฒ˜๋ฆฌํ•œ ๊ฒฐ๊ณผ ๋ฐ ModelAndView๋ฅผ DispatcherServlet์— ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.

 

5 ) DispatcherServlet์€ ์ปจํŠธ๋กค๋Ÿฌ์—์„œ ์ „๋‹ฌ๋ฐ›์€ View ์ด๋ฆ„๊ณผ ๋งค์นญ๋˜๋Š” ์‹ค์ œ View ํŒŒ์ผ์„ ์ฐพ๊ธฐ ์œ„ํ•ด ViewResolver์—๊ฒŒ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค.

 

6 ) ViewResolver๋Š” ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ์ฒ˜๋ฆฌํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์—ฌ์ค„ ๋ทฐ๋ฅผ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค. ์ปจํŠธ๋กค๋Ÿฌ์—์„œ ์ „๋‹ฌ๋ฐ›์€ View ์ด๋ฆ„์˜ ์•ž๋’ค๋กœ prefix, suffix ํ”„๋กœํผํ‹ฐ๋ฅผ ์ถ”๊ฐ€ํ•œ ๊ฐ’์ด ์‹ค์ œ ์‚ฌ์šฉํ•  ๋ทฐ ํŒŒ์ผ ๊ฒฝ๋กœ๊ฐ€ ๋จ. ViewResolver๋Š” ๋งตํ•‘๋˜๋Š” View ๊ฐ์ฒด๋ฅผ DispatcherServlet์— ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.

 

7 ) DispatcherServlet์€ ViewResolver์— ์ „๋‹ฌ๋ฐ›์€ View Model์„ ๋„˜๊ฒจ์„œ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋ณด์—ฌ์ค„ ํ™”๋ฉด์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

 

•   ๋” ๊ตฌ์ฒด์ ์ธ ์„ค๋ช…

MVC, Spring MVC

11. ์ปฌ๋ ‰์…˜ ์ธํ„ฐํŽ˜์ด์Šค์˜ ์ƒ์† ๊ตฌ์กฐ์™€ ๊ฐ๊ฐ์˜ ํŠน์ง•์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”

[JAVA ] Collection

12. ์ปฌ๋ ‰์…˜ ์ค‘์— ์ž์‹ ์žˆ๊ฒŒ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์„ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”

[JAVA ] List Interface

[JAVA ] Set Interface

12-1. ์ปฌ๋ ‰์…˜ ํ”„๋ ˆ์ž„์›Œํฌ๋ž€ ๋ฌด์—‡์ด๊ณ , ์™œ ์‚ฌ์šฉํ•˜๋Š”์ง€ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”

์ž๋ฐ”์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด๋Š” ๊ฒฝ์šฐ ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๋ฐฐ์—ด์€ ์‚ฌ์ด์ฆˆ๊ฐ€ ๊ณ ์ •๋˜์–ด์žˆ๊ณ , ๊ฐ™์€ ํƒ€์ž…์˜ ๋ฐ์ดํ„ฐ๋งŒ ๋‹ด์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•˜๋Š” ๊ฒฝ์šฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ์‚ญ์ œํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋‹ค์ˆ˜๋ฐœ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๋Ÿฐ ๊ฒฝ์šฐ๋ฅผ ์œ„ํ•ด ์ปฌ๋ ‰์…˜ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. 

์ค‘๋ณต์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š” Set, ์ˆœ์„œ๋Œ€๋กœ ๋„ฃ๋Š” List, key ์™€ value๋กœ ๊ฐ’์„ ๋‹ด์„ ์ˆ˜ ์žˆ๋Š” map์ด ์žˆ์Šต๋‹ˆ๋‹ค.

13. Aop์—์„œ Aspect, Advice, Pointcut ๋ฐ Joinpoint์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”

Aspect๋Š”  ์—ฌ๋Ÿฌ ๊ฐ์ฒด์— ๊ณตํ†ต์œผ๋กœ ์ ์šฉ๋˜๋Š” ๊ด€์‹ฌ์‚ฌํ•ญ์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

๋ถ€๊ฐ€๊ธฐ๋Šฅ์„ ์ •์˜ํ•œ ์ฝ”๋“œ์ธ Advice์™€ Advice๋ฅผ ์–ด๋””์— ์ ์šฉํ• ์ง€๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” Point Cut์„ ํ•ฉ์นœ ๊ฐœ๋…์œผ๋กœ AOP๋ฅผ ์ ์šฉํ•˜๋ฉด ํ•ต์‹ฌ ๊ธฐ๋Šฅ ์ฝ”๋“œ ์‚ฌ์ด์— ์นจํˆฌ๋œ ๋ถ€๊ฐ€ ๊ธฐ๋Šฅ์„ ๋…๋ฆฝ์ ์ธ Aspect๋กœ ๊ตฌ๋ถ„ํ•ด๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

 

JoinPoint๋Š” Advice๊ฐ€ ์ ์šฉ๋  ์ˆ˜ ์žˆ๋Š” ์œ„์น˜๋ฅผ ๋งํ•ฉ๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํ˜ธ์ถœํ•˜๋Š” ๋ชจ๋“  ๋น„์ฆˆ๋‹ˆ์Šค ๋ฉ”์†Œ๋“œ๋กœ ์กฐ์ธ ํฌ์ธํŠธ ์ค‘์—์„œ ํฌ์ธํŠธ ์ปท์ด ๋˜๊ธฐ ๋•Œ๋ฌธ์— ํฌ์ธํŠธ ์ปท์˜ ํ›„๋ณดํ•˜๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

PointCut์€ Advice๋ฅผ ์ ์šฉํ•  ํƒ€๊ฒŸ์˜ ๋ฉ”์„œ๋“œ๋ฅผ ์„ ๋ณ„ํ•˜๋Š” ์ •๊ทœํ‘œํ˜„์‹์ž…๋‹ˆ๋‹ค. ์ฆ‰, ํŠน์ • ์กฐ๊ฑด์— ์˜ํ•ด ํ•„ํ„ฐ๋ง๋œ ์กฐ์ธ ํฌ์ธํŠธ๋กœ ์ˆ˜๋งŽ์€ ์กฐ์ธ ํฌ์ธํŠธ ์ค‘์—์„œ ํŠน์ • ๋ฉ”์†Œ๋“œ์—์„œ๋งŒ ๊ณตํ†ต ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰์‹œํ‚ค๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.  

 

Advice๋Š” ์–ธ์ œ ๊ณตํ†ต ๊ด€์‹ฌ ๊ธฐ๋Šฅ์„ ํ•ต์‹ฌ ๋กœ์ง์— ์ ์šฉํ• ์ง€๋ฅผ ์ •์˜ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. (๊ณตํ†ต๊ธฐ๋Šฅ์„ ์ ์šฉํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค) ์ฆ‰, ํšก๋‹จ ๊ด€์‹ฌ์— ํ•ด๋‹นํ•˜๋Š” ๊ณตํ†ต ๊ธฐ๋Šฅ์˜ ์ฝ”๋“œ๋กœ ๋…๋ฆฝ๋œ ํด๋ž˜์Šค์˜ ๋ฉ”์†Œ๋“œ๋กœ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค. ( Target ํด๋ž˜์Šค์˜ ์กฐ์ธ ํฌ์ธํŠธ์— ์‚ฝ์ž… ๋˜์–ด์ ธ ๋™์ž‘ํ•  ์ˆ˜ ์žˆ๋Š” ์ฝ”๋“œ )

 

14. ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด๋ž€ ๋ฌด์—‡์ธ๊ฐ€์š”?

๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ(OOP, Object Oriented Programming)์€ ๊ฐ์ฒด ์ค‘์‹ฌ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์œผ๋กœ ํ˜„์‹ค์„ธ๊ณ„์˜ ์‚ฌ๋ฌผ์„ ๊ฐ์ฒด๋กœ ๋ณด๊ณ ,  ๊ทธ ๊ฐ์ฒด๋กœ๋ถ€ํ„ฐ ๊ฐœ๋ฐœํ•˜๊ณ ์ž ํ•˜๋Š” ํŠน์ง•๊ณผ ๊ธฐ๋Šฅ์„ ๋ฝ‘์•„์™€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํ•˜๋Š” ๊ธฐ๋ฒ•์ž…๋‹ˆ๋‹ค.  ๊ณตํ†ต๋œ ์†์„ฑ๊ณผ ๊ธฐ๋Šฅ์„ ๋ฌถ์€ ํด๋ž˜์Šค๋ฅผ ์ •์˜ํ•˜๊ณ  ํ•ด๋‹น ํด๋ž˜์Šค๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์žฌ์‚ฌ์šฉ์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

+ ํด๋ž˜์Šค ๋‹จ์œ„ ๋ชจ๋“ˆํ™” ๊ฐ€๋Šฅ, ๋Œ€ํ˜•ํ”„๋กœ์ ํŠธ์— ์ ํ•ฉ

+ ์ฒ˜๋ฆฌ์†๋„๊ฐ€ ์ ˆ์ฐจ์ง€ํ–ฅ์— ๋น„ํ•ด ์ƒ๋Œ€์ ์œผ๋กœ ๋Š๋ฆผ 

 

์„ค๊ณ„ ์›์น™ 

• SRP ( Single Responsibility Principle, ๋‹จ์ผ ์ฑ…์ž„ ์›์น™ ) : ํด๋ž˜์Šค๋Š” ๋‹จ ํ•˜๋‚˜์˜ ๋ชฉ์ ์„ ๊ฐ€์ ธ์•ผ ํ•˜๋ฉฐ, ํด๋ž˜์Šค๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ์ด์œ ๋Š” ๋‹จ ํ•˜๋‚˜์˜ ์ด์œ ์—ฌ์•ผ ํ•œ๋‹ค.

• OCP ( Open-Closed Principle, ๊ฐœ๋ฐฉ ํ์‡„ ์›์น™ ) : ํด๋ž˜์Šค๋Š” ํ™•์žฅ์— ์—ด๋ ค์žˆ๊ณ  ๋ณ€๊ฒฝ์—๋Š” ๋‹ซํ˜€์žˆ์–ด์•ผํ•œ๋‹ค. 

• LSP  ( Liskov Substitution Principle,๋ฆฌ์Šค์ฝ”ํ”„ ์น˜ํ™˜ ์›์น™ ) : ์ƒ์œ„ํƒ€์ž…์˜ ๊ฐ์ฒด๋ฅผ ํ•˜์œ„ํƒ€์ž…์œผ๋กœ ๋ฐ”๊พธ์–ด๋„ ํ”„๋กœ๊ทธ๋žจ์€ ์ผ๊ด€๋˜๊ฒŒ ๋™์ž‘ํ•ด์•ผํ•œ๋‹ค. 

• ISP  ( Interface Segregation Principle, ์ธํ„ฐํŽ˜์ด์Šค ๋ถ„๋ฆฌ ์›์น™ ) : ํด๋ผ์ด์–ธํŠธ๋Š” ์ด์šฉํ•˜์ง€ ์•Š๋Š” ๋ฉ”์†Œ๋“œ์— ์˜์กดํ•˜์ง€ ์•Š๋„๋ก ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋ถ„๋ฆฌํ•ด์•ผํ•œ๋‹ค. ์ฆ‰, ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๊ทธ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํด๋ผ์ด์–ธํŠธ ๊ธฐ์ค€์œผ๋กœ ๋ถ„๋ฆฌ 

• DIP ( Dependency Inversion Principle, ์˜์กด ์—ญ์ „ ์›์น™ ) : ํด๋ผ์ด์–ธํŠธ๋Š” ์ถ”์ƒํ™”(์ธํ„ฐํŽ˜์ด์Šค)์— ์˜์กดํ•ด์•ผํ•˜๋ฉฐ ๊ตฌ์ฒดํ™”(๊ตฌํ˜„๋œ ํด๋ž˜์Šค)์— ์˜์กดํ•ด์„œ๋Š” ์•ˆ๋œ๋‹ค.

15. ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ํŠน์ง•์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

1) ์บก์Šํ™” : ์ฝ”๋“œ๋ฅผ ์žฌํ™œ์šฉํ•˜๋Š” ๊ฒƒ์„ ๋ชฉ์ ์œผ๋กœ, ํด๋ž˜์Šค๋ผ๋Š” ์บก์Š์— ๊ด€๋ จ์žˆ๋Š” ์†์„ฑ๊ณผ ๊ธฐ๋Šฅ์„ ํ•˜๋‚˜๋กœ ๋ฌถ๊ณ , ์™ธ๋ถ€๋กœ๋ถ€ํ„ฐ ์ง์ ‘์ ์ธ ์ ‘๊ทผ์€ ์ฐจ๋‹จํ•˜๋ฉฐ  ์ˆ˜์ • ๋˜๋Š” ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๋Š” ๋™์ž‘์€ ๋‚ด๋ถ€์— ๋‘๋Š” ๋ฐฉ์‹. ์ฆ‰, ๋‚ด๋ถ€๊ฐ€ ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€ ์•Œ ์ˆ˜ ์—†๊ณ , ์ ‘๊ทผ์€ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด์„œ ๊ฒฐ๊ณผ๋งŒ ๋ฆฌํ„ด๋ฐ›๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

 

2) ์ถ”์ƒํ™” : ๊ฐ์ฒด์ง€ํ–ฅ ๊ด€์ ์—์„œ ํด๋ž˜์Šค๋ฅผ ์ •์˜ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์ค‘์š”ํ•œ ์ •๋ณด๋งŒ ํ‘œํ˜„ํ•จ์œผ๋กœ์จ ์‚ฌ๋ฌผ์˜ ๊ณตํ†ต์ ์ธ ์†์„ฑ๊ณผ ๊ธฐ๋Šฅ์„ ํŒŒ์•…ํ•ด ์ด๋ฆ„์„ ๋ถ™์—ฌ ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“œ๋Š” ํ–‰์œ„ 

 

3) ๋‹คํ˜•์„ฑ : ํ•˜๋‚˜์˜ ๋ฉ”์†Œ๋“œ๋‚˜ ํด๋ž˜์Šค๊ฐ€ ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ๋™์ž‘ํ•˜๋Š” ๊ฒƒ. ๋Œ€ํ‘œ์ ์œผ๋กœ ์˜ค๋ฒ„๋ผ์ด๋”ฉ์ด๋‚˜ ์˜ค๋ฒ„๋กœ๋”ฉ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๋™์ผํ•œ ์ด๋ฆ„์˜ ๋ฉ”์†Œ๋“œ๋ฅผ ์‹คํ–‰์‹œ์ผœ๋„ ๋‹ค๋ฅธ ๊ธฐ๋Šฅ์œผ๋กœ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค. 

16. ์ƒ์†์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”

๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋žจ์„ ์œ ์—ฐํ•˜๊ฒŒ ํ•˜๋Š” ๊ธฐ๋ฐ˜์ด ์ƒ์†์ž…๋‹ˆ๋‹ค.  ํด๋ž˜์Šค๋ผ๋ฆฌ๋Š” ์ƒ์†์„ ๋ฐ›์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ƒ์†์„ ๋ฐ›๋Š” ๊ฒฝ์šฐ ํ•˜์œ„ ํด๋ž˜์Šค๊ฐ€ ์ƒ์œ„ ํด๋ž˜์Šค๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋˜ ๋ฉ”์†Œ๋“œ๋ฅผ ์žฌ์ •์˜ํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ํด๋ž˜์Šค๋กœ๋ถ€ํ„ฐ ์†์„ฑ๊ณผ ๋ฉ”์„œ๋“œ๋ฅผ ๋ฌผ๋ ค๋ฐ›๋Š” ๊ฒƒ์„ ๋งํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ํด๋ž˜์Šค๋ฅผ ๊ฐ€์ ธ์™€์„œ ์ˆ˜์ •ํ•  ์ผ์ด ์žˆ๋‹ค๋ฉด ํ•ด๋‹น ํด๋ž˜์Šค๋ฅผ ์ง์ ‘ ์ˆ˜์ •ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ ์ƒ์†์„ ๋ฐ›์•„ ๋ณ€๊ฒฝํ•˜๊ณ ์ž ํ•˜๋Š” ๋ถ€๋ถ„๋งŒ ๋ณ€๊ฒฝํ•ด์„œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์ž๋ฐ”๋Š” ๋‹ค์ค‘ ์ƒ์†์„ ์ง€์›ํ•˜์ง€ ์•Š๊ณ  1๊ฐœ์˜ ํด๋ž˜์Šค๋งŒ ์ƒ์†์„ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์ค‘์ƒ์†์˜ ํšจ๊ณผ๋ฅผ ๊ธฐ๋Œ€ํ•  ๋ชฉ์ ์œผ๋กœ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ด์šฉํ•ฉ๋‹ˆ๋‹ค.

17. Spring์˜ ํŠน์ง•์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

1) POJO ๊ธฐ๋ฐ˜ : ์ž๋ฐ” ์ฝ”๋“œ๋ฅผ ์ด์šฉํ•ด์„œ ๊ฐ์ฒด๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐฉ์‹์„ ๊ทธ๋Œ€๋กœ ์Šคํ”„๋ง์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

2) ์˜์กด์„ฑ ์ฃผ์ž… : ๋ฉ”์†Œ๋“œ๋‚˜ ๊ฐ์ฒด์˜ ํ˜ธ์ถœ์„ ๊ฐœ๋ฐœ์ž๊ฐ€ ์•„๋‹Œ ์™ธ๋ถ€์— ์˜ํ•ด์„œ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค. 

3) AOP์˜ ์ง€์› : ๋ณด์•ˆ, ๋กœ๊ทธ ๊ฐ™์€ ํšก๋‹จ ๊ด€์‹ฌ์‚ฌ๋ฅผ ๋ชจ๋“ˆ๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ๊ณตํ†ต ๊ธฐ๋Šฅ์„ ์žฌ์‚ฌ์šฉํ•˜๋„๋ก ๋•๋Š” ๊ธฐ๋ฒ•์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

4) ํŠธ๋žœ์žญ์…˜์˜ ์ง€์› : ํŠธ๋žœ์ ์…˜์˜ ์ฒ˜๋ฆฌ๋ฅผ ์• ๋…ธํ…Œ์ด์…˜์ด๋‚˜ XML๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

 

* POJO (Plain Old Java Object) ๋Š” ์˜ค๋ž˜๋œ ๋ฐฉ์‹์˜ ๊ฐ„๋‹จํ•œ ์ž๋ฐ” Object, ์Šคํ”„๋ง ์ „์˜ ํ”„๋ ˆ์ž„์›Œํฌ ๋“ฑ์ด ๋ฌด๊ฑฐ์šด ๊ฐ์ฒด๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์— ๋ฐ˜๋ฐœํ•ด์„œ ์‚ฌ์šฉํ•˜๊ฒŒ๋œ ์šฉ์–ด. ์Šคํ”„๋ง์€ ๊ฐ์ฒด ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ๊ตฌ์„ฑํ•  ๋•Œ ๋ณ„๋„์˜ API๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” POJO ๊ตฌ์„ฑ์œผ๋กœ ์ œ์ž‘์ด ๊ฐ€๋Šฅ 

 

 

 

 

 

 

 

 

 

 

 

 

 

'๐ŸŽˆ์ทจ์ค€' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

SERVER_NETWORK  (0) 2022.07.03
PROGRAMMING  (0) 2022.07.03
Comments