week 1 incheol - GANGNAM-JAVA/JAVA-STUDY GitHub Wiki

JAVA

  • JVM, JDK, JRE๋ž€ ๋ฌด์—‡์ธ๊ฐ€?

    • JRE : ์ž๋ฐ” ์‹คํ–‰ ํ™˜๊ฒฝ์˜ ์ค„์ž„๋ง๋กœ JVM์— ์ž๋ฐ” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ๊ธฐํƒ€ ํŒŒ์ผ๋“ค์ด ๊ฒฐํ•ฉ๋œ ์ž๋ฐ”๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ํ”„๋กœ๊ทธ๋žจ์ด๋‹ค.
    • JDK : ์ž๋ฐ” ๊ฐœ๋ฐœ ํ‚คํŠธ์˜ ์ค„์ž„๋ง๋กœ JRE์— ์ปดํŒŒ์ผ๋Ÿฌ, ๋””๋ฒ„๊ฑฐ ๋“ฑ ๊ฐœ๋ฐœ๋„๊ตฌ๋ฅผ ํฌํ•จํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์ด๋‹ค.
    • JVM : ์ž๋ฐ” ๊ฐ€์ƒ ๋จธ์‹ ์œผ๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ํด๋ž˜์Šค ๋กœ๋”๋ฅผ ํ†ตํ•ด ์ฝ์–ด ๋“ค์—ฌ API์™€ ํ•จ๊ป˜ ์‹คํ–‰์‹œ์ผœ์ค€๋‹ค.
      • ๊ตฌ์„ฑ
        • class loader
          • .java ์†Œ์Šค๋ฅผ ์ž๋ฐ” ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ปดํŒŒ์ผํ•˜๋ฉด .class ํŒŒ์ผ์ธ ๋ฐ”์ดํŠธ์ฝ”๋“œ๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค. ์ด๋ ‡๊ฒŒ ์ƒ์„ฑ๋œ ํด๋ž˜์Šค ํŒŒ์ผ๋“ค์„ ์—ฎ์–ด์„œ JVM์ด ์šด์˜์ฒด์ œ๋กœ๋ถ€ํ„ฐ ํ• ๋‹น๋ฐ›์€ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์ธ Runtime Data Area๋กœ ์ ์žฌํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.
        • execution engine
          • ํด๋ž˜์Šค ๋กœ๋”์— ์˜ํ•ด ๋ฉ”๋ชจ๋ฆฌ์— ์ ์žฌ๋œ ํด๋ž˜์Šค(๋ฐ”์ดํŠธ ์ฝ”๋“œ)๋“ค์„ ๊ธฐ๊ณ„์–ด๋กœ ๋ณ€๊ฒฝํ•ด ๋ช…๋ น์–ด ๋‹จ์œ„๋กœ ์‹คํ–‰ํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.
        • garbage collector
          • Heap ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์— ์ƒ์„ฑ๋œ ๊ฐ์ฒด๋“ค ์ค‘์— ์ฐธ์กฐ๋˜์ง€ ์•Š๋Š” ๊ฐ์ฒด๋“ค์„ ํƒ์ƒ‰ ํ›„ ์ œ๊ฑฐํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค. GC๊ธฐ ์Šคํ—น๋˜๋Š” ๋™์•ˆ GC๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ์“ฐ๋ ˆ๋“œ๊ฐ€ ์•„๋‹Œ ๋‹ค๋ฅธ ๋ชจ๋“  ์“ฐ๋ ˆ๋“œ๊ฐ€ ์ผ์‹œ์ •์ง€๋œ๋‹ค. ํŠนํžˆ Fulll GC๊ฐ€ ์ผ์–ด๋‚˜์„œ ์ˆ˜ ์ดˆ๊ฐ„ ๋ชจ๋“  ์“ฐ๋ ˆ๋“œ๊ฐ€ ์ •์ง€ํ•œ๋‹ค๋ฉด ์žฅ์• ๋กœ ์ด์–ด์ง€๋Š” ์น˜๋ช…์ ์ธ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ๋‹ค.
        • runtime data area
          • ๊ฐ๊ฐ์˜ ์Šค๋ ˆ๋“œ์—์„œ ๋™์ž‘ํ•˜๋Š” PC Register, JVM Stack, Native Method Stack์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๊ณ  ๊ณต์œ  ์Šค๋ ˆ๋“œ์—์„œ ๋™์ž‘ํ•˜๋Š” Heap๊ณผ Method Area๊ฐ€ ์žˆ๋‹ค.
      • ์—ญํ• 
        1. OS์— ๋…๋ฆฝ์ ์œผ๋กœ ์ž๋ฐ” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ ์‹œ์ผœ ์ค€๋‹ค.
          • JVM ์‹คํ–‰ ๊ณผ์ •
            1. ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋˜๋ฉด JVM์€ OS๋กœ๋ถ€ํ„ฐ ์ด ํ”„๋กœ๊ทธ๋žจ์ด ํ•„์š”๋กœ ํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹น ๋ฐ›๋Š”๋‹ค. JVM์€ ์ด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์šฉ๋„์— ๋”ฐ๋ผ ์—ฌ๋Ÿฌ ์˜์—ญ์œผ๋กœ ๋‚˜๋ˆ„์–ด ๊ด€๋ฆฌํ•œ๋‹ค.
            2. ์ž๋ฐ” ์ปดํŒŒ์ผ๋Ÿฌ(javac)๊ฐ€ ์ž๋ฐ”์†Œ์Šค(.java)์ฝ”๋“œ๋ฅผ ์ฝ์–ด ๋“ค์—ฌ ์ž๋ฐ” ๋ฐ”์ดํŠธ์ฝ”๋“œ(.class)๋กœ ๋ณ€ํ™˜์‹œํ‚จ๋‹ค.
            3. ์ด ๋ณ€๊ฒฝ๋œ Class ํŒŒ์ผ๋“ค์„ Class Loader๋ฅผ ํ†ตํ•ด JVM ๋ฉ”๋ชจ๋ฆฌ์˜์—ญ(Runtime Data Areas) ์˜์—ญ์œผ๋กœ ๋กœ๋”ฉํ•œ๋‹ค.
            4. ๋กœ๋”ฉ๋œ classํŒŒ์ผ๋“ค์€ Execution engine์„ ํ†ตํ•ด ํ•ด์„๋œ๋‹ค.
            5. ํ•ด์„๋œ ๋ฐ”์ดํŠธ์ฝ”๋“œ๋Š” Runtime Data Areas์— ๋ฐฐ์น˜๋˜์–ด ์‹ค์งˆ์ ์ธ ์ˆ˜ํ–‰์ด ์ด๋ฃจ์–ด์ง€๊ฒŒ๋œ๋‹ค.์ด๋Ÿฌํ•œ ์‹คํ–‰๊ณผ์ •์†์—์„œ JVM์€ ํ•„์š”์— ๋”ฐ๋ผ Thread Synchronization๊ณผ GC๊ฐ™์€ ๊ด€๋ฆฌ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.
        2. GC๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ž๋™์œผ๋กœ ๊ด€๋ฆฌํ•ด์ค€๋‹ค.
          • ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ๋Š” ํž™ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ๋” ์ด์ƒ ์ฐธ์กฐ๋˜์ง€ ์•Š์€ ๊ฐ์ฒด๋ฅผ ํ™•์ธํ•˜์—ฌ ์ž๋™์œผ๋กœ ์ œ๊ฑฐํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ด€๋ฆฌ ํ•ด์ค€๋‹ค.
            • ์ฐธ๊ณ  ์‚ฌํ•ญ
              • ์ž๋ฐ” ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ(๋ฉ”์†Œ๋“œ ์˜์—ญ, ์Šคํƒ ์˜์—ญ, ํž™ ์˜์—ญ)
                • ๋ฉ”์†Œ๋“œ ์˜์—ญ : ๊ธ€๋กœ๋ฒŒ ๋ฐ์ดํ„ฐ, static ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋˜๋Š” ์˜์—ญ

                • ์Šคํƒ ์˜์—ญ : ๊ธฐ๋ณธํ˜• ๋ฐ์ดํ„ฐ, ๋กœ์ปฌ ๋ณ€์ˆ˜(์ฐธ์กฐํ˜•์ผ ๊ฒฝ์šฐ ์ฃผ์†Œ๊ฐ’๋งŒ ์ €์žฅ๋จ)๊ฐ€ ์ €์žฅ๋˜๋Š” ์˜์—ญ

                  ์Šคํƒ ์˜์—ญ์— ๋ฐ์ดํ„ฐ๋Š” ๋ฉ”์†Œ๋“œ ์‹คํ–‰ ์ดํ›„์—๋Š” ์‚ญ์ œ๋œ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ์ฐธ์กฐํ˜• ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ๋ฉ”์†Œ๋“œ ์ข…๋ฃŒ ์ดํ›„์— ์Šคํƒ ์˜์—ญ์— ์ฃผ์†Œ๊ฐ’์€ ์ œ๊ฑฐ๋˜์ง€๋งŒ ํž™ ์˜์—ญ์— ๋ฐ์ดํ„ฐ๊ฐ€ ๋‚จ์•„ ์žˆ๊ฒŒ ๋œ๋‹ค. ํž™ ์˜์—ญ์— ๋”์ด์ƒ ์ฐธ์กฐ๋˜์ง€ ์•Š๋Š” ๋ฐ์ดํ„ฐ๋Š” ๊ฐ€๋น„์ง€ ์ฝœ๋ ‰ํ„ฐ์— ์˜ํ•ด ์ œ๊ฑฐ๋œ๋‹ค.

                • ํž™ ์˜์—ญ : ์ฐธ์กฐํ˜• ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋˜๋Š” ์˜์—ญ

          • GC ๋™์ž‘ ์›๋ฆฌ
            1. ํž™ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์€ young generation(eden, survivor1, survivor2) , old generation, permanent generation ์œผ๋กœ ๋‚˜๋ˆ„์–ด ์ง„๋‹ค.
            2. ๋ฐ์ดํ„ฐ๋Š” young generation(eden โ†’ survivor1 โ†’ survivor2) โ†’ old generation ์ˆœ์œผ๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ์ฐธ์กฐ๋˜๋Š” ๊ธฐ์ค€์œผ๋กœ ์˜ฎ๊ฒจ์ง„๋‹ค.
            3. young generation์—์„œ ๋ฐœ์ƒํ•˜๋Š” gc๋ฅผ minor gc ๋ผ๊ณ  ํ•˜๊ณ , old generation์—์„œ ๋ฐœ์ƒํ•˜๋Š” gc๋ฅผ major gc๋กœ ๋ถ€๋ฅธ๋‹ค.
            4. minor gc๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋งŽ์ด ์ฐจ์ง€ํ•˜์ง€ ์•Š๊ณ , major gc์—์„œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋งŽ์ด ์ฐจ์ง€ํ•˜๊ฒŒ ๋œ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ gc๋ฅผ ํŠœ๋‹ํ•˜๋Š” ๊ฒฝ์šฐ๋Š” major gc์—์„œ ๋ฐœ์ƒํ•œ๋‹ค.
  • ์ž๋ฐ”์˜ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•˜์‹œ์˜ค

    • Method Area : ํด๋ž˜์Šค ๋ฉค๋ฒ„ ๋ณ€์ˆ˜์˜ ์ด๋ฆ„, ๋ฐ์ดํ„ฐ ํƒ€์ž…, final class ๋ณ€์ˆ˜
    • Heap Area(new,survive,old,perm,native โ†’ new,survive,old,metaspace) : new ํ‚ค์›Œ๋“œ๋กœ ์ƒ์„ฑ๋œ ๊ฐ์ฒด์™€ ๋ฐฐ์—ด์ด ์ƒ์„ฑ๋˜๋Š” ์˜์—ญ, static ๋ณ€์ˆ˜(jdk8 ๋ฒ„์ „ ์ด์ƒ), ์ƒ์ˆ˜ํ™”๋œ String Object(jdk8 ๋ฒ„์ „ ์ด์ƒ)
    • Stack Area : ์ง€์—ญ ๋ณ€์ˆ˜, ํŒŒ๋ผ๋ฏธํ„ฐ, ๋ฆฌํ„ด ๊ฐ’, ์—ฐ์‚ฐ์— ์‚ฌ์šฉ๋˜๋Š” ์ž„์‹œ ๊ฐ’์ด ์ƒ์„ฑ๋˜๋Š” ์˜์—ญ
    • PC Register : ์“ฐ๋ ˆ๋“œ๊ฐ€ ์ƒ์„ฑ๋  ๋•Œ๋งˆ๋‹ค ์ƒ์„ฑ๋˜๋Š” ์˜์—ญ์œผ๋กœ ์“ฐ๋ ˆ๋“œ๊ฐ€ ์‹คํ–‰๋˜๋Š” ๋ถ€๋ถ„์˜ ์ฃผ์†Œ์™€ ๋ช…๋ น์„ ์ €์žฅํ•˜๋Š” ์˜์—ญ
    • Native method stack : ์ž๋ฐ” ์™ธ ์–ธ์–ด๋กœ ์ž‘์„ฑ๋œ ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ๋ฅผ ์œ„ํ•œ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์ด๋‹ค. (๋ณดํ†ต C/C++ ๋“ฑ์˜ ์ฝ”๋“œ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ์Šคํƒ)
  • ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ ์ž‘๋™ ์›๋ฆฌ๋ฅผ ์„ค๋ช…ํ•˜์‹œ์˜ค

    • ํž™ ์˜์—ญ์˜ ๊ฐ์ฒด ์ค‘ ์ฐธ์กฐํ•˜์ง€ ์•Š๋Š” ๊ฐ์ฒด(Garbage)๋ฅผ ์ฐพ์•„ ๋‚ธ๋‹ค.
    • ์ฐพ์•„๋‚ธ Garbage ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํšŒ์ˆ˜ํ•œ๋‹ค.
    • GC ๋Œ€์ƒ์ด ๋˜๋Š” ๊ฐ์ฒด
      • ๋ชจ๋“  ๊ฐ์ฒด ์ฐธ์กฐ๊ฐ€ null ์ธ ๊ฒฝ์šฐ
      • ๊ฐ์ฒด๊ฐ€ ๋ธ”๋Ÿญ ์•ˆ์—์„œ ์ƒ์„ฑ๋˜๊ณ  ๋ธ”๋Ÿญ์ด ์ข…๋ฃŒ๋œ ๊ฒฝ์šฐ
      • ๋ถ€๋ชจ ๊ฐ์ฒด๊ฐ€ null์ด ๋œ ๊ฒฝ์šฐ, ์ž์‹ ๊ฐ์ฒด๋Š” ์ž๋™์ ์œผ๋กœ GC ๋Œ€์ƒ์ด ๋œ๋‹ค.
      • ๊ฐ์ฒด๊ฐ€ weak ์ฐธ์กฐ๋งŒ ๊ฐ€์ง€๊ณ  ์žˆ์„ ๊ฒฝ์šฐ
      • ๊ฐ์ฒด๊ฐ€ Soft ์ฐธ์กฐ์ด์ง€๋งŒ ๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ์ด ๋ฐœ์ƒํ•œ ๊ฒฝ์šฐ
    • JDK 8 ๊นŒ์ง€๋Š” parallel GC๊ฐ€ ๊ธฐ๋ณธ์ด์—ˆ๋‹ค.
      • parallel GC๋Š” ๋ฉ€ํ‹ฐ ์“ฐ๋ ˆ๋”ฉ ๊ฐ€๋Šฅ
    • JDK 9 ์ดํ›„์—๋Š” G1 GC๊ฐ€ ๊ธฐ๋ณธ์ด์—ˆ๋‹ค. (์ƒ์„ธํžˆ ์„ค๋ช… ํ•„์š”)
      • G1 GC๋Š” ์•ž์„œ ์‚ดํŽด๋ณธ GC์™€๋Š” ๋‹ค๋ฅธ ๋ฐฉ์‹์œผ๋กœ ํž™ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค. ์•ž์„œ ์‚ดํŽด๋ณด์•˜๋˜ Eden, Survivor, Old ์˜์—ญ์ด ์กด์žฌํ•˜์ง€๋งŒ ๊ณ ์ •๋œ ํฌ๊ธฐ๋กœ ๊ณ ์ •๋œ ์œ„์น˜์— ์กด์žฌํ•˜๋Š” ๊ฒƒ์ด์•„๋‹ˆ๋ฉฐ, ์ „์ฒด ํž™ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์„ Region ์ด๋ผ๋Š” ํŠน์ •ํ•œ ํฌ๊ธฐ๋กœ ๋‚˜๋ˆ ์„œ ๊ฐ Region์˜ ์ƒํƒœ์— ๋”ฐ๋ผ ๊ทธ Region์— ์—ญํ• (Eden, Survivor, Old)์ด ๋™์ ์œผ๋กœ ๋ถ€์—ฌ๋˜๋Š” ์ƒํƒœ์ด๋‹ค.
      • GC์˜ ๋Œ€์ƒ ์˜์—ญ์ด ์—ฌ๋Ÿฌ๊ฐœ์˜ region์œผ๋กœ ๋‚˜๋‰˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— GC๊ฐ€ ์ผ์–ด๋‚˜๋ฉด ์ „์ฒด heap์— ๋Œ€ํ•ด์„œ GC๋ฅผ ํ•˜์ง€ ์•Š๊ณ  ์ผ๋ถ€ region์—์„œ๋งŒ GC๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค. โ†’ ์ „์ฒด ์˜์—ญ์„ gcํ•˜์ง€ ์•Š๊ณ  ์ผ๋ถ€ ์˜์—ญ์—์„œ๋งŒ ์ˆ˜ํ–‰ํ•˜๋ฏ€๋กœ stw๊ฐ€ ๋” ์งง์•„์ ธ ๋น„์šฉ์ ์ธ ์ธก๋ฉด์—์„œ ๋” ํšจ์œจ์ ์ด๋‹ค. (๋Œ€์‹  ํž™ ์‚ฌ์ด์ฆˆ๊ฐ€ ๋” ํ•„์š”ํ•˜๋‹ค)

SPRING

  • ์Šคํ”„๋ง๋ถ€ํŠธ ์™€ ์Šคํ”„๋ง์˜ ์ฐจ์ด๋ฅผ ์„ค๋ช…ํ•˜์‹œ์˜ค
    • ์Šคํ”„๋ง๋ถ€ํŠธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ์„ค์ •ํ•˜์˜€๋˜ ์ •๋ณด๋“ค์„ ๊ฐ„ํŽธํ•˜๊ฒŒ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ฒฝ๋Ÿ‰ํ™”๋˜์–ด ์ œ๊ณตํ•œ ํ”„๋ ˆ์ž„์›Œํฌ์ด๋‹ค.
    • ์Šคํ”„๋ง๋ถ€ํŠธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ฐœ๋ฐœ์— ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ์ž‘์„ฑํ•˜๋˜ ๋งŽ์€ ์„ค์ •(๋ณด์ผ๋Ÿฌํ”Œ๋ ˆ์ดํŠธ)๋“ค์„ ํŒจํ‚ค์ง•ํ•˜์—ฌ ๊ฐ„ํŽธํ•˜๊ฒŒ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜์˜€๋‹ค.
    • ํŠน์ง•
      • @SpringBootApplication : @SpringBootConfiguration, @ComponentScan, @EnableAutoConfiguration ์–ด๋…ธํ…Œ์ด์…˜์„ ์ถ•์•ฝํ•˜์˜€๋‹ค.
      • ์Šคํ”„๋ง๋ถ€ํŠธ ์Šคํƒ€ํ„ฐ : ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ์‚ฌ์šฉํ•˜์˜€๋˜ ๋‹ค์–‘ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ์€ ์„œ๋กœ ๊ฐ„์˜ ์˜์กด์„ฑ์ด ์ถฉ๋Œ๋˜๋Š” ์ด์Šˆ๊ฐ€ ๋นˆ๋ฒˆํžˆ ๋ฐœ์ƒํ•˜์˜€๋‹ค. ๊ทธ๋ ‡๋‹ค ๋ณด๋‹ˆ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๋ฒ„์ „ ๊ด€๋ฆฌํ•˜๋Š”๋ฐ ๋งŽ์€ ๋…ธ๋ ฅ์ด ํ•„์š”ํ•˜์˜€๋‹ค. ์Šคํ”„๋ง ๋ถ€ํŠธ ์—์„œ๋Š” ์Šคํƒ€ํ„ฐ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์‚ฌ์šฉํ•˜์—ฌ ํŒจํ‚ค์ง•๋œ ํ”Œ๋Ÿฌ๊ทธ์ธ์œผ๋กœ ์ œ๊ณต๋˜์–ด ์ƒํ˜ธ๊ฐ„์— ์˜์กด์„ฑ ์ถฉ๋Œ์— ๋Œ€ํ•œ ๋…ธ๋ ฅ์„ ์ตœ๋Œ€ํ•œ ์ค„์ผ ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค.
      • ๋‚ด์žฅํ˜•ํ†ฐ์บฃ : ์ŠคํŠธ๋ง ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ๋Š” ๋ณ„๋„๋กœ was๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋นŒ๋“œ๋œ ํŒŒ์ผ ๊ฒฝ๋กœ๋ฅผ ์ง€์ •ํ•ด์ฃผ์–ด ์‹คํ–‰ํ•˜์˜€๋‹ค. ์Šคํ”„๋ง๋ถ€ํŠธ์—์„œ๋Š” was๊ฐ€ ๋‚ด์žฅ๋˜์–ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰์‹œ ์ž๋™์œผ๋กœ was๊ฐ€ ์‹คํ–‰๋  ์ˆ˜ ์žˆ์—ˆ๋‹ค.
  • ์Šคํ”„๋ง์˜ ํŠน์ง•์— ๋Œ€ํ•ด์„œ ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ๋น—๋Œ€์–ด ์„ค๋ช…ํ•˜์‹œ์˜ค
    • ์Šคํ”„๋ง์˜ ๋ชฉ์ ์€ POJO๋ฅผ ์ด์šฉํ•ด ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‰ฝ๊ณ  ํšจ๊ณผ์ ์œผ๋กœ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•ด์ฃผ๋Š” ๋ฐ ์žˆ๋‹ค. POJO๋ฐฉ์‹์˜ ๊ฐœ๋ฐœ์„ ๋•๊ธฐ ์œ„ํ•ด ์Šคํ”„๋ง์€ IOC/DI, AOP, PSA์™€ ๊ฐ™์€ ๊ฐ€๋Šฅ๊ธฐ์ˆ ์„ ํ”„๋ ˆ์ž„์›Œํฌ์™€ ์ปจํ…Œ์ด๋„ˆ๋ผ๋Š” ๋ฐฉ์‹์„ ํ†ตํ•ด ์ œ๊ณตํ•œ๋‹ค.
    • IOC/DI
      • ๋‘ ๊ฐœ์˜ ์˜ค๋ธŒ์ ํŠธ๋ฅผ ๋ถ„๋ฆฌํ•ด์„œ ๋งŒ๋“ค๊ณ , ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋‘์–ด ๋Š์Šจํ•˜๊ฒŒ ์—ฐ๊ฒฐํ•œ ๋’ค ์‹ค์ œ ์‚ฌ์šฉํ•  ๋Œ€์ƒ์€ DI๋ฅผ ํ†ตํ•ด ์™ธ๋ถ€์—์„œ ์ฃผ์ž…ํ•œ๋‹ค.
      • ํ™œ์šฉ ๋ฐฉ๋ฒ•
        • ์˜์กด ๋Œ€์ƒ์˜ ๊ตฌํ˜„์„ ๋ณ€๊ฒฝ(์ „๋žตํŒจํ„ด)
        • ํ•ต์‹ฌ๊ธฐ๋Šฅ์˜ ๋™์ ์ธ ๋ณ€๊ฒฝ
        • ๋ถ€๊ฐ€๊ธฐ๋Šฅ ์ถ”๊ฐ€(๋ฐ์ฝ”๋ ˆ์ดํ„ฐ ํŒจํ„ด)
        • ํ”„๋ก์‹œ : ํ•„์š”ํ•œ ์‹œ์ ์—์„œ ์‹ค์ œ ์‚ฌ์šฉํ•  ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๊ณ  ๋ฆฌ์†Œ์Šค๋ฅผ ์ค€๋น„ํ•˜๊ฒŒ ํ•ด์ฃผ๋Š” ์ง€์—ฐ ๋กœ๋”ฉ์„ ์ ์šฉํ•˜๋ ค๊ณ  ํ• ๋•Œ
        • ํ…œํ”Œ๋ฆฟ/์ฝœ๋ฐฑ : ์ฝœ๋ฐฑ์„ ์–ผ๋งˆ๋“ ์ง€ ๋งŒ๋“ค์–ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฑด ๊ฐœ๋ฐœ์„ ํ†ตํ•œ ์œ ์—ฐํ•œ ํ™•์žฅ์„ฑ์„ ๋ณด์—ฌ์ฃผ๋Š” ๊ฒƒ์ด๋ฉฐ, ํ…œํ”Œ๋ฆฟ์€ ํ•œ ๋ฒˆ ๋งŒ๋“ค์–ด๋‘๋ฉด ๊ณ„์† ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฑด ๊ธฐ๋Šฅ์˜ ํ™•์žฅ์—๋„ ๋ณ€ํ•˜์ง€ ์•Š๋Š”๋‹ค.
        • ์‹ฑ๊ธ€ํ†ค๊ณผ ์˜ค๋ธŒ์ ํŠธ : DI๋ฅผ ํ”„๋ ˆ์ž„์›Œํฌ๋กœ ์ด์šฉํ•œ๋‹ค๋Š” ๊ฑด DI ๋Œ€์ƒ ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๊ด€๋ฆฌํ•œ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค. ์Šคํ”„๋ง์—์„œ๋Š” ์‹ฑ๊ธ€ํ†ค ์™ธ์—๋„ ๋‹ค์–‘ํ•œ ์Šค์ฝ”ํ”„๋ฅผ ๊ฐ–๋Š” ์˜ค๋ธŒ์ ํŠธ๋ฅผ ๋งŒ๋“ค์–ด DI์— ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ๋‹ค. HTTP ์š”์ฒญ๋‹น ํ•˜๋‚˜์˜ ์˜ค๋ธŒ์ ํŠธ๊ฐ€ ๋งŒ๋“ค์–ด์ง€๊ฑฐ๋‚˜, HTTP ์„ธ์…˜๋‹น ํ•˜๋‚˜์”ฉ ์˜ค๋ธŒ์ ํŠธ๊ฐ€ ๋งŒ๋“ค์–ด์ง€๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค.
    • AOP
      • ๊ณตํ†ต ๊ด€์‹ฌ ์‚ฌํ•ญ์„ ๊ตฌํ˜„ํ•œ ์ฝ”๋“œ๋ฅผ ํ•ต์‹ฌ ๋กœ์ง์„ ๊ตฌํ˜„ํ•œ ์ฝ”๋“œ ์•ˆ์— ์‚ฝ์ž…ํ•œ๋‹ค.
      • ์šฉ์–ด
        • Advice : JoinPoint์— ์‚ฝ์ž…๋˜์–ด ๋™์ž‘ํ•  ์ˆ˜ ์žˆ๋Š” ์ฝ”๋“œ
        • JoinPoint : Advice๋ฅผ ์ ์šฉ ๊ฐ€๋Šฅํ•œ ์ง€์ 
        • PointCut : ์‹ค์ œ๋กœ Advice๊ฐ€ ์ ์šฉ๋˜๋Š” JoinPoint
        • Weaving : Advice๋ฅผ ํ•ต์‹ฌ ๋กœ์ง ์ฝ”๋“œ์— ์ ์šฉํ•˜๋Š”๊ฒƒ
        • Aspect : ์—ฌ๋Ÿฌ ๊ฐ์ฒด์˜ ๊ณตํ†ต์œผ๋กœ ์ ์šฉ๋˜๋Š” ๊ณตํ†ต ๊ด€์‹ฌ ์‚ฌํ•ญ
        • Advisor : Advice + PointCut
      • ์œ„๋น™ ์„ธ๊ฐ€์ง€
        • ์ปดํŒŒ์ผ ์‹œ์— ์œ„๋น™ : AspectJ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹
        • ํด๋ž˜์Šค ๋กœ๋”ฉ ์‹œ์— ์œ„๋น™ : AOP ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” JVM์ด ํด๋ž˜์Šค๋ฅผ ๋กœ๋”ฉํ•  ๋•Œ, ํด๋ž˜์Šค ์ •๋ณด๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š” ์—์ด์ „ํŠธ๋ฅผ ์ œ๊ณต(์›๋ณธ ํด๋ž˜์Šค ํŒŒ์ผ์€ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ  ํด๋ž˜์Šค๋ฅผ ๋กœ๋”ฉํ•  ๋•Œ JVM์ด ๋ณ€๊ฒฝ๋œ ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ํ•จ)
        • ๋Ÿฐํƒ€์ž„ ์‹œ์— ์œ„๋น™ : ํ”„๋ก์‹œ๋ฅผ ์ด์šฉํ•œ AOP ๊ตฌํ˜„(๋ฉ”์„œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋  ๋•Œ๋งŒ Advice๋ฅผ ์ ์šฉํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ํ•„๋“œ ๊ฐ’ ๋ณ€๊ฒฝ๊ณผ ๊ฐ™์€ JoinPoint์— ๋Œ€ํ•ด์„œ๋Š” ์ ์šฉ๋ถˆ๊ฐ€)
    • PSA
      • ํ™˜๊ฒฝ๊ณผ ์„ธ๋ถ€ ๊ธฐ์ˆ ์˜ ๋ณ€ํ™”์— ๊ด€๊ณ„์—†์ด ์ผ๊ด€๋œ ๋ฐฉ์‹์œผ๋กœ ๊ธฐ์ˆ ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์คŒ
      • ์„œ๋น„์Šค ์ถ”์ƒํ™”์˜ ์ข‹์€์˜ˆ๋Š” JDBC์ด๋‹ค.
        • JDBC๋ผ๋Š” ํ‘œ์ค€์ŠคํŽ™์ด ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— DBMS๋ฅผ ์˜ค๋ผํด์„ ์‚ฌ์šฉํ•˜๋˜, MYSQL์„ ์‚ฌ์šฉํ•˜๋˜ ๊ณตํ†ต๋œ ๋ฐฉ์‹์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ข…๋ฅ˜์— ๊ด€๊ณ„์—†์ด ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ์ œ์–ด ํ• ์ˆ˜ ์žˆ๋Š” ๋””์ž์ธํŒจํ„ด(์–ด๋Œ‘ํ„ฐ ํŒจํ„ด)์„ ์ ์šฉํ•ด ๋‹ค์ˆ˜์˜ ๊ธฐ์ˆ ์„ ๊ณตํ†ต ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๊ฒƒ์„ ์„œ๋น„์Šค ์ถ”์ƒํ™”๋ผ๊ณ  ํ•œ๋‹ค.
      • ๋˜๋Š” ์Šคํ”„๋ง ์บ์‹œ๊ฐ€ ์žˆ๋‹ค.
  • ์Šคํ”„๋ง์˜ ์„œ๋น„์Šค ์ถ”์ƒํ™”๋ž€ ๋ฌด์—‡์ธ์ง€ ์„ค๋ช…ํ•˜์‹œ์˜ค
    • PSA
      • ํ™˜๊ฒฝ๊ณผ ์„ธ๋ถ€ ๊ธฐ์ˆ ์˜ ๋ณ€ํ™”์— ๊ด€๊ณ„์—†์ด ์ผ๊ด€๋œ ๋ฐฉ์‹์œผ๋กœ ๊ธฐ์ˆ ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์คŒ
      • ์„œ๋น„์Šค ์ถ”์ƒํ™”์˜ ์ข‹์€์˜ˆ๋Š” JDBC์ด๋‹ค.
        • JDBC๋ผ๋Š” ํ‘œ์ค€์ŠคํŽ™์ด ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— DBMS๋ฅผ ์˜ค๋ผํด์„ ์‚ฌ์šฉํ•˜๋˜, MYSQL์„ ์‚ฌ์šฉํ•˜๋˜ ๊ณตํ†ต๋œ ๋ฐฉ์‹์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ข…๋ฅ˜์— ๊ด€๊ณ„์—†์ด ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ์ œ์–ด ํ• ์ˆ˜ ์žˆ๋Š” ๋””์ž์ธํŒจํ„ด(์–ด๋Œ‘ํ„ฐ ํŒจํ„ด)์„ ์ ์šฉํ•ด ๋‹ค์ˆ˜์˜ ๊ธฐ์ˆ ์„ ๊ณตํ†ต ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๊ฒƒ์„ ์„œ๋น„์Šค ์ถ”์ƒํ™”๋ผ๊ณ  ํ•œ๋‹ค.
      • ๋˜๋Š” ์Šคํ”„๋ง ์บ์‹œ๊ฐ€ ์žˆ๋‹ค.

์•„ํ‚คํ…์ฒ˜

  • ๊ฐ์ฒด์ง€ํ–ฅ๊ณผ ์ ˆ์ฐจ์ง€ํ–ฅ์— ์ฐจ์ด์— ๋Œ€ํ•ด ์„ค๋ช…ํ•˜์‹œ์˜ค

    ์ ˆ์ฐจ์ง€ํ–ฅ์ด๋ž€ ํ”„๋กœ์‹œ์ ธ(procedure)๋กœ ํ”„๋กœ๊ทธ๋žจ์„ ๊ตฌ์„ฑํ•˜๋Š” ๊ธฐ๋ฒ•์ด๋‹ค. ํ”„๋กœ์‹œ์ ธ๋Š” ๋Œ€์ฒด๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ๊ตฌํ˜„ํ•œ๋‹ค. ๋‹จ์ ์€ ๋ฐ์ดํ„ฐ ํƒ€์ž…์ด๋‚˜ ์˜๋ฏธ๋ฅผ ๋ณ€๊ฒฝํ•ด์•ผ ํ•  ๋•Œ, ํ•จ๊ป˜ ์ˆ˜์ •ํ•ด์•ผ ํ•˜๋Š” ํ”„๋กœ์‹œ์ €๊ฐ€ ์ฆ๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

    ๊ฐ์ฒด๋Š” ์ž์‹ ๋งŒ์˜ ๋ฐ์ดํ„ฐ์™€ ํ”„๋กœ์‹œ์ ธ๋ฅผ ๊ฐ–๋Š”๋‹ค. ๊ฐ์ฒด๋Š” ์ž์‹ ๋งŒ์ด ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋ฉฐ, ๊ฐ ๊ฐ์ฒด๋“ค์€ ์„œ๋กœ ์—ฐ๊ฒฐ๋˜์–ด ๋‹ค๋ฅธ ๊ฐ์ฒด๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

    ์ ˆ์ฐจ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ํ”„๋กœ๊ทธ๋žจ์˜ ์ˆœ์„œ์™€ ํ๋ฆ„์„ ๋จผ์ € ์„ธ์šฐ๊ณ  ํ•„์š”ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ์™€ ํ•จ์ˆ˜๋“ค์„ ์„ค๊ณ„ํ•˜๋Š” ๋ฐฉ์‹์ด๊ณ , ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ๋ฐ˜๋Œ€๋กœ ์ž๋ฃŒ๊ตฌ์™€ ์ด๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ํ•œ ๋ชจ๋“ˆ๋“ค์„ ๋จผ์ € ์„ค๊ณ„ํ•œ ๋‹ค์Œ์— ์ด๋“ค์˜ ์‹คํ–‰์ˆœ์„œ์™€ ํ๋ฆ„์„ ์งœ๋Š” ๋ฐฉ์‹์ด๋‹ค.

    ์ ˆ์ฐจ์ง€ํ–ฅ ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด, ๋ง ๊ทธ๋Œ€๋กœ ์‹คํ–‰ ์ˆœ์„œ, ์ฆ‰ ์ ˆ์ฐจ๊ฐ€ ๋” ์ค‘์ ์ด ๋˜๊ณ , ๊ฐ์ฒด์ง€ํ–ฅ ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด, ํ•„์š”ํ•œ ๊ฐ์ฒด๋“ค์˜ ์ข…๋ฅ˜์™€ ์†์„ฑ ๋“ฑ์ด ๋” ์ค‘์ ์ด ๋œ๋‹ค.

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

    ์ ˆ์ฐจ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ํ”„๋กœ๊ทธ๋žจ์˜ ์ˆœ์„œ์™€ ํ๋ฆ„์„ ๋จผ์ € ์„ธ์šฐ๊ณ  ํ•„์š”ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ์™€ ํ•จ์ˆ˜๋“ค์„ ์„ค๊ณ„ํ•˜๋Š” ๋ฐฉ์‹์ด๊ณ , ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ๋ฐ˜๋Œ€๋กœ ์ž๋ฃŒ๊ตฌ์กฐ์™€ ์ด๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ํ•œ ๋ชจ๋“ˆ๋“ค์„ ๋จผ์ € ์„ค๊ณ„ํ•œ ๋‹ค์Œ์— ์ด๋“ค์˜ ์‹คํ–‰์ˆœ์„œ์™€ ํ๋ฆ„์„ ์งœ๋Š” ๋ฐฉ์‹์ด๋‹ค

  • SOLID ์›์น™์— ๋Œ€ํ•ด ์•„๋Š”๋Œ€๋กœ ์„ค๋ช…ํ•˜์‹œ์˜ค

    • ๋‹จ์ผ ์ฑ…์ž„ ์›์น™ : ๊ฐ์ฒด๋Š” ๋‹จ ํ•˜๋‚˜์˜ ์ฑ…์ž„๋งŒ์„ ๊ฐ€์ ธ์•ผ ํ•œ๋‹ค. : ์ฑ…์ž„์ด ๋งŽ์•„์ง€๋ฉด ํด๋ž˜์Šค ๋‚ด๋ถ€์˜ ํ•จ์ˆ˜๋ผ๋ฆฌ ๊ฐ•ํ•œ ๊ฒฐํ•ฉ์„ ๋ฐœ์ƒํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์•„์ง€๋ฉฐ ์ด๋Š” ์œ ์ง€๋ณด์ˆ˜์— ๋น„์šฉ์ด ์ฆ๊ฐ€ํ•˜๊ฒŒ ๋˜๋ฏ€๋กœ ์ฑ…์ž„์„ ๋ถ„๋ฆฌ์‹œํ‚ฌ ํ•„์š”๊ฐ€ ์žˆ๋‹ค.
    • ๊ฐœ๋ฐฉ ํ์‡„ ์›์น™ : ๊ธฐ์กด์˜ ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ  ๊ธฐ๋Šฅ์„ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„ํ•ด์•ผ ํ•œ๋‹ค. : OCP๋ฅผ ๋งŒ์กฑํ•œ ์„ค๊ณ„๋Š” ๋ณ€๊ฒฝ์— ์œ ์—ฐํ•˜๋ฏ€๋กœ ์œ ์ง€๋ณด์ˆ˜ ๋น„์šฉ์„ ์ค„์—ฌ์ฃผ๊ณ  ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ ๋˜ํ•œ ๋†’์•„์ง€๋Š” ํšจ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.
    • ๋ฆฌ์Šค์ฝ”ํ”„ ์น˜ํ™˜ ์›์น™ : ์ž์‹ ํด๋ž˜์Šค๋Š” ๋ถ€๋ชจํด๋ž˜์Šค์—์„œ ๊ฐ€๋Šฅํ•œ ํ–‰์œ„๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค. : ์ƒ์† ๊ด€๊ณ„์—์„œ๋Š” ์ผ๋ฐ˜ํ™” ๊ด€๊ณ„(IS-A)๊ฐ€ ์„ฑ๋ฆฝํ•ด์•ผ ํ•œ๋‹ค. ์ผ๋ฐ˜ํ™” ๊ด€๊ณ„์— ์žˆ๋‹ค๋Š” ๊ฒƒ์€ ์ผ๊ด€์„ฑ์ด ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.
    • ์ธํ„ฐํŽ˜์ด์Šค ๋ถ„๋ฆฌ ์›์น™ : ํ•œ ํด๋ž˜์Šค๋Š” ์ž์‹ ์ด ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๊ตฌํ˜„ํ•˜์ง€ ๋ง์•„์•ผ ํ•œ๋‹ค. ํ•˜๋‚˜์˜ ์ผ๋ฐ˜์ ์ธ ์ธํ„ฐํŽ˜์ด์Šค๋ณด๋‹ค๋Š” ์—ฌ๋Ÿฌ๊ฐœ์˜ ๊ตฌ์ฒด์ ์ธ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ๋‚ซ๋‹ค. : ์ž์‹ ์ด ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ธฐ๋Šฅ์—๋Š” ์˜ํ–ฅ์„ ๋ฐ›์ง€ ๋ง์•„์•ผ ํ•œ๋‹ค.
    • ์˜์กด ์—ญ์ „ ์›์น™ : ์˜์กด ๊ด€๊ณ„๋ฅผ ๋งบ์„ ๋•Œ ๋ณ€ํ™”ํ•˜๊ธฐ ์‰ฌ์šด๊ฒƒ ๋ณด๋‹จ ๋ณ€ํ™”ํ•˜๊ธฐ ์–ด๋ ค์šด ๊ฒƒ์— ์˜์กดํ•ด์•ผ ํ•œ๋‹ค. : ์˜์กด๊ด€๊ณ„๋ฅผ ๋งบ์„ ๋•Œ ๊ตฌ์ฒด์ ์ธ ํด๋ž˜์Šค๋ณด๋‹ค ์ธํ„ฐํŽ˜์ด์Šค๋‚˜ ์ถ”์ƒ ํด๋ž˜์Šค์™€ ๊ด€๊ณ„๋ฅผ ๋งบ๋Š”๊ฒŒ ๋ณ€ํ™”์— ์œ ์—ฐํ•˜๊ฒŒ ๋Œ€์ฒ˜ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์บก์Šํ™”์— ๋Œ€ํ•ด ์„ค๋ช…ํ•˜์‹œ์˜ค

    ์บก์Šํ™”๋Š” ๊ฐ์ฒด๊ฐ€ ๋‚ด๋ถ€์ ์œผ๋กœ ๊ธฐ๋Šฅ์„ ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„ํ•˜์ง€๋Š”์ง€๋ฅผ ๊ฐ์ถ”๋Š” ๊ฒƒ์ด๋‹ค.

    ๋‹จ์ˆœํžˆ ํ”„๋ผ์ด๋น—ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ง์ ‘ ์ ‘๊ทผํ•˜์ง€ ๋ชปํ•˜๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ ๋‚ด๋ถ€์ ์ธ ๊ธฐ๋Šฅ์— ์ดˆ์ ์„ ๋งž์ถ”์–ด์•ผ ํ•œ๋‹ค.

    ๋‹จ์ˆœํžˆ ๋ฐ์ดํ„ฐ๋ฅผ ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•œ ์šฉ๋„๋กœ ์บก์Šํ™”๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ๊ฐ์ฒด์— ๋Œ€ํ•œ ์ฑ…์ž„์ด ๋ถ„์‚ฐ๋  ์ˆ˜ ์žˆ๋‹ค.

    ์บก์Šํ™”๋ฅผ ํ•˜๊ธฐ ์œ„ํ•œ ๋‘๊ฐ€์ง€ ๊ทœ์น™์ด ์žˆ๋‹ค.

    • ๋ฌป์ง€ ๋ง๊ณ  ์‹œ์ผœ๋ผ : ์ฐธ์กฐํ•œ ๊ฐ์ฒด์˜ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ๋กœ์ง์ด ํ•„์š”ํ•  ๊ฒฝ์šฐ์— ์ง์ ‘ ๊ตฌํ˜„ํ•˜์ง€ ๋ง๊ณ  ๊ตฌํ˜„๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญํ•˜์—ฌ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ์ฑ…์ž„์„ ์ „๊ฐ€ ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.
    • ๋ฐ๋ฏธํ…Œ๋ฅด์˜ ๋ฒ•์น™ : 1 ๋Ž์Šค๋งŒ ์‚ฌ์šฉํ•  ๋ฟ 2 ๋Ž์Šค๋กœ ์‚ฌ์šฉํ•˜์ง€ ๋ง์•„์•ผ ํ•œ๋‹ค. ์ด๊ฒƒ์€ ๋ฌป์ง€ ๋ง๊ณ  ์‹œ์ผœ๋ผ์˜ ์—ฐ์žฅ์„ ์œผ๋กœ ์ฐธ์กฐํ•˜๋Š” ๊ฐ์ฒด๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ฐธ์กฐํ•˜๋Š” ์‚ฌ์šฉ์ž ์ž…์žฅ์—์„œ๋Š” ์•Œ ํ•„์š”๊ฐ€ ์—†๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ์˜ ๋‚ด๋ถ€ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด ๋‚ด๋ถ€ ๊ธฐ๋Šฅ์˜ ๋ณ€ํ™”์— ๋ฒ”์œ„๊ฐ€ ์™ธ๋ถ€์—๋„ ๋…ธ์ถœ๋˜์–ด ์˜์กด์„ฑ์ด ๋‚ฎ์•„ ์ง„๋‹ค.