๊ด€๋ฆฌ ๋ฉ”๋‰ด

๐‘†๐‘ข๐‘›๐‘ โ„Ž๐‘–๐‘›๐‘’ ๐‘Ž๐‘“๐‘ก๐‘’๐‘Ÿ ๐‘Ÿ๐‘Ž๐‘–๐‘›โœง

[JAVA] JVM, JVM ๋ฉ”๋ชจ๋ฆฌ, ๊ฐ์ฒด, ์ธ์Šคํ„ด์Šค, ์˜ค๋ฒ„๋ผ์ด๋”ฉ, ์˜ค๋ฒ„๋กœ๋”ฉ, ์ถ”์ƒํ™” ๋ณธ๋ฌธ

๐—ฃ๐—ฟ๐—ผ๐—ด๐—ฟ๐—ฎ๐—บ๐—บ๐—ถ๐—ป๐—ด๐Ÿ’ป/๐‰๐š๐ฏ๐š

[JAVA] JVM, JVM ๋ฉ”๋ชจ๋ฆฌ, ๊ฐ์ฒด, ์ธ์Šคํ„ด์Šค, ์˜ค๋ฒ„๋ผ์ด๋”ฉ, ์˜ค๋ฒ„๋กœ๋”ฉ, ์ถ”์ƒํ™”

๐ŸคRyusun๐Ÿค 2024. 5. 22. 23:23

์ž๋ฐ” ๊ฐ€์ƒ ๋จธ์‹ (Java Virtual Machine, JVM)์€ ์ž๋ฐ” ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด ํ™˜๊ฒฝ์ด๋‹ค. ์ž๋ฐ” ์ฝ”๋“œ๋Š” ๋ฐ”๋กœ ์‹คํ–‰๋˜๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ ๋ฐ”์ดํŠธ์ฝ”๋“œ(.class ํŒŒ์ผ)๋กœ ๋ณ€ํ™˜๋˜๊ณ , ์ด ๋ฐ”์ดํŠธ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์—ญํ• ์„ ํ•˜๋Š” ๊ฒŒ JVM์ด๋‹ค.

 

 JVM์˜ ์ฃผ์š” ์—ญํ• 

  • ๋ฐ”์ดํŠธ์ฝ”๋“œ ์‹คํ–‰: ์ž๋ฐ” ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ๋ณ€ํ™˜ํ•œ ๋ฐ”์ดํŠธ์ฝ”๋“œ๋ฅผ ํ•ด์„ํ•˜๊ณ  ์‹คํ–‰ํ•œ๋‹ค.
  • ํ”Œ๋žซํผ ๋…๋ฆฝ์„ฑ ์ œ๊ณต: ํ•œ ๋ฒˆ ์ปดํŒŒ์ผ๋œ ์ž๋ฐ” ํ”„๋กœ๊ทธ๋žจ์€ ์šด์˜ ์ฒด์ œ์™€ ์ƒ๊ด€์—†์ด ์‹คํ–‰ ๊ฐ€๋Šฅํ•˜๋‹ค. ("Write Once, Run Anywhere")
  • ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ: ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ(GC)๋ฅผ ํ†ตํ•ด ๋ถˆํ•„์š”ํ•œ ๊ฐ์ฒด๋ฅผ ์ž๋™์œผ๋กœ ์ •๋ฆฌํ•œ๋‹ค.
  • ๋Ÿฐํƒ€์ž„ ํ™˜๊ฒฝ ์ œ๊ณต: ์Šคํƒ, ํž™, ๋ฉ”์„œ๋“œ ์˜์—ญ ๋“ฑ์„ ๊ด€๋ฆฌํ•˜๋ฉด์„œ ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰์„ ๋•๋Š”๋‹ค.

 

 JVM ์‹คํ–‰ ๊ณผ์ •

  1. ์†Œ์Šค ์ฝ”๋“œ(.java) ์ž‘์„ฑ
  2. ์ปดํŒŒ์ผ(javac) → ๋ฐ”์ดํŠธ์ฝ”๋“œ(.class) ์ƒ์„ฑ
  3. JVM์ด ๋ฐ”์ดํŠธ์ฝ”๋“œ ์‹คํ–‰(์ธํ„ฐํ”„๋ฆฌํ„ฐ + JIT ์ปดํŒŒ์ผ๋Ÿฌ ์‚ฌ์šฉ

 

JVM์˜ ์ฃผ์š” ๊ตฌ์„ฑ ์š”์†Œ

  • ํด๋ž˜์Šค ๋กœ๋”(Class Loader): ๋ฐ”์ดํŠธ์ฝ”๋“œ๋ฅผ JVM ๋‚ด๋ถ€๋กœ ๋กœ๋“œ
  • ์‹คํ–‰ ์—”์ง„(Execution Engine): ๋ฐ”์ดํŠธ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ (์ธํ„ฐํ”„๋ฆฌํ„ฐ + JIT ์ปดํŒŒ์ผ๋Ÿฌ)
  • ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ(Runtime Data Area): ํž™(Heap), ์Šคํƒ(Stack), ๋ฉ”์„œ๋“œ(Method) ์˜์—ญ ๋“ฑ
  • ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ(GC): ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ฉ”๋ชจ๋ฆฌ ์ž๋™ ์ •๋ฆฌ

 

์ฆ‰, JVM ๋•๋ถ„์— ์ž๋ฐ” ํ”„๋กœ๊ทธ๋žจ์ด ์šด์˜ ์ฒด์ œ์— ๊ด€๊ณ„์—†์ด ์‹คํ–‰๋  ์ˆ˜ ์žˆ๊ณ , ์ž๋™ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ๊ธฐ๋Šฅ(GC) ๋•๋ถ„์— ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ•ด์ œํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค.

 


 

 

JVM ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์€ ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์ค‘ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ๊ณต๊ฐ„์ด๋‹ค. ํฌ๊ฒŒ ํž™(Heap), ์Šคํƒ(Stack), ๋ฉ”์„œ๋“œ(Method) ์˜์—ญ์œผ๋กœ ๋‚˜๋‰˜๋ฉฐ, ๊ฐ ์˜์—ญ์€ ์„œ๋กœ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

 

JVM ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ

  1. ๋ฉ”์„œ๋“œ(Method) ์˜์—ญ (๋˜๋Š” ํด๋ž˜์Šค(Class) ์˜์—ญ)
    • ํด๋ž˜์Šค ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ(ํด๋ž˜์Šค ์ •๋ณด, ํ•„๋“œ, ๋ฉ”์„œ๋“œ, ์ธํ„ฐํŽ˜์ด์Šค ๋“ฑ)๋ฅผ ์ €์žฅ
    • ์ƒ์ˆ˜ ํ’€: ์ƒ์ˆ˜ ๋ฐ ๋ฆฌํ„ฐ๋Ÿด ์ €์žฅ
    • ์ •์ (static) ๋ณ€์ˆ˜ ๋ฐ ๋ฉ”์„œ๋“œ ์ฝ”๋“œ(๋ฐ”์ดํŠธ์ฝ”๋“œ) ์ €์žฅ
    • JVM์ด ์‹œ์ž‘๋  ๋•Œ ํ• ๋‹น๋˜๋ฉฐ, ํ”„๋กœ๊ทธ๋žจ ์ข…๋ฃŒ ์‹œ ํ•ด์ œ๋จ
  2. ํž™(Heap) ์˜์—ญ
    • ๊ฐ์ฒด, ๋ฐฐ์—ด์ด ์ €์žฅ๋˜๋Š” ๊ณต๊ฐ„
    • GC(๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ)๊ฐ€ ๊ด€๋ฆฌํ•˜์—ฌ ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๊ฐ์ฒด๋ฅผ ์ •๋ฆฌ
    • ํฌ๊ธฐ๊ฐ€ ํฌ๊ณ  ๋น„๊ต์  ์†๋„๊ฐ€ ๋Š๋ฆผ
    • ์˜์—ญ ๊ตฌ๋ถ„ (JVM ๊ตฌํ˜„์— ๋”ฐ๋ผ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Œ)
      • Young Generation (Eden, Survivor Space): ์ƒˆ๋กญ๊ฒŒ ์ƒ์„ฑ๋œ ๊ฐ์ฒด๊ฐ€ ์ €์žฅ๋จ
      • Old Generation (Tenured Generation): ์˜ค๋ž˜๋œ ๊ฐ์ฒด๊ฐ€ ์ €์žฅ๋จ
      • Permanent Generation (JDK 8 ์ดํ›„ Metaspace): ํด๋ž˜์Šค ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ €์žฅ
  3. ์Šคํƒ(Stack) ์˜์—ญ
    • ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ์‹œ ์ƒ์„ฑ๋˜๋Š” ์ง€์—ญ ๋ณ€์ˆ˜, ๋งค๊ฐœ๋ณ€์ˆ˜(Parameter), ์—ฐ์‚ฐ ์ค‘๊ฐ„๊ฐ’์„ ์ €์žฅ
    • ๋ฉ”์„œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋  ๋•Œ ์Šคํƒ ํ”„๋ ˆ์ž„์ด ์ƒ์„ฑ๋˜๊ณ , ๋ฉ”์„œ๋“œ ์ข…๋ฃŒ ์‹œ ์ œ๊ฑฐ๋จ (LIFO ๊ตฌ์กฐ)
    • ๊ฐ ์Šค๋ ˆ๋“œ๋งˆ๋‹ค ๋ณ„๋„์˜ ์Šคํƒ์„ ๊ฐ€์ง (์Šค๋ ˆ๋“œ๋ณ„ ๋…๋ฆฝ์ ์ธ ๊ณต๊ฐ„)
    • ๊ธฐ๋ณธ ์ž๋ฃŒํ˜•(int, double ๋“ฑ)๊ณผ ์ฐธ์กฐ ๋ณ€์ˆ˜(reference)๊ฐ€ ์ €์žฅ๋จ (๊ฐ์ฒด ์ž์ฒด๋Š” ํž™์— ์ €์žฅ)
 
public class MemoryExample {
    static int staticVar = 100; // ๋ฉ”์„œ๋“œ ์˜์—ญ์— ์ €์žฅ

    public static void main(String[] args) { // ์Šคํƒ์— main() ํ”„๋ ˆ์ž„ ์ƒ์„ฑ
        int localVar = 10; // ์Šคํƒ ์˜์—ญ์— ์ €์žฅ
        MyClass obj = new MyClass(); // obj๋Š” ์Šคํƒ์—, ๊ฐ์ฒด๋Š” ํž™์— ์ €์žฅ
        obj.display();
    }
}

class MyClass {
    int instanceVar = 20; // ํž™ ์˜์—ญ์— ์ €์žฅ
}
  • staticVar: ๋ฉ”์„œ๋“œ ์˜์—ญ์— ์ €์žฅ
  • localVar: main() ๋ฉ”์„œ๋“œ์˜ ์Šคํƒ ํ”„๋ ˆ์ž„์— ์ €์žฅ
  • obj: ์Šคํƒ์— ์ฐธ์กฐ ๋ณ€์ˆ˜๋กœ ์ €์žฅ, ์‹ค์ œ ๊ฐ์ฒด๋Š” ํž™์— ์ €์žฅ
  • instanceVar: ํž™ ์˜์—ญ์— ๊ฐ์ฒด์™€ ํ•จ๊ป˜ ์ €์žฅ

 

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

 


 

 

ํด๋ž˜์Šค

ํด๋ž˜์Šค(class)๋ž€ ๊ฐ์ฒด(object)๋ฅผ ๋งŒ๋“ค์–ด ๋‚ด๊ธฐ ์œ„ํ•œ ํ‹€์ด๋ฉฐ ๋งŒ๋“ค์–ด ๋‚ผ ๊ฐ์ฒด์˜ ์†์„ฑ๊ณผ ๋ฉ”์„œ๋“œ์˜ ์ง‘ํ•ฉ์„ ๋‹ด์•„๋†“์€ ๊ฒƒ

 

 

๊ฐ์ฒด

๊ฐ์ฒด๋ž€ ํด๋ž˜์Šค๋กœ๋ถ€ํ„ฐ ๋งŒ๋“ค์–ด์ง€๋Š” ์‹ค์ฒด, ํด๋ž˜์Šค๋กœ ์„ ์–ธ๋œ ๋ณ€์ˆ˜๋ฅผ ๊ฐ์ฒด๋ผ ํ•œ๋‹ค.

 

 

์ธ์Šคํ„ด์Šค

์ธ์Šคํ„ด์Šค(instance)๋ž€ ๊ฐ์ฒด๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์— ํ• ๋‹น์ด ๋œ ์ƒํƒœ์ด๋ฉฐ ๋Ÿฐํƒ€์ž„์— ๊ตฌ๋™๋˜๋Š” ๊ฐ์ฒด๋ฅผ ๋งํ•ฉ๋‹ˆ๋‹ค. ๊ฐ์ฒด์™€ ๊ฐ™์€ ์˜๋ฏธ๋กœ ์“ฐ์ด๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.

 

 

static

static ํ‚ค์›Œ๋“œ๋Š” ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๊ฐ€ ์•„๋‹Œ ํด๋ž˜์Šค์— ์†ํ•˜๋ฉฐ ํด๋ž˜์Šค์˜ ๋ณ€์ˆ˜, ๋ฉ”์„œ๋“œ ๋“ฑ์„ ๊ณต์œ ํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

 

  • static ์žฅ์ 
    • ํด๋ž˜์Šค๋กœ ๋งŒ๋“ค์–ด์ง€๋Š” ๊ฐ์ฒด์‚ฌ์ด์—์„œ ์ค‘๋ณต๋˜๋Š” ๋ฉ”์„œ๋“œ, ์†์„ฑ์„ ํšจ์œจ์ ์œผ๋กœ ์ •์˜ํ•  ๋•Œ ์“ฐ์ด๋ฉฐ ๋‹จ์ˆœํžˆ ์ „์—ญ๋ณ€์ˆ˜๊ฐ€ ์•„๋‹ˆ๋ผ ํด๋ž˜์Šค๋‚ด์˜ static ํ‚ค์›Œ๋“œ๋กœ ์„ ์–ธํ•˜์—ฌ ์ด ํด๋ž˜์Šค์˜ ๊ฐ์ฒด๋“ค๋ผ๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ๋ฉ”์„œ๋“œ ๋˜๋Š” ์†์„ฑ์ด๋‹ค. ๋ผ๋Š” ๊ฒƒ์„ ๋‚˜ํƒ€๋‚ด์ฃผ๋Š” ๋ช…์‹œ์„ฑ์ด๋ผ๋Š” ์žฅ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • static ๋‹จ์ 
    • static ํ‚ค์›Œ๋“œ๋กœ ์„ ์–ธ๋œ ๋ณ€์ˆ˜, ๋ธ”๋ก, ๋ฉ”์„œ๋“œ ๋“ฑ์€ ์„ ์–ธ๊ณผ ๋™์‹œ์— ๋ฏธ๋ฆฌ heap์˜์—ญ์ด ์•„๋‹Œ Method area ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์— ํ• ๋‹น์ด ๋˜๋ฉฐ ํ”„๋กœ๊ทธ๋žจ์ด ์ข…๋ฃŒ ๋  ๋•Œ๊นŒ์ง€ GC์— ์˜ํ•ด ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํšŒ์ˆ˜๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋งŒ์•ฝ ํด๋ž˜์Šค๊ฐ€ ๊ฐ์ฒด๋กœ ์“ฐ์ด์ง€ ์•Š๋Š”๋‹ค๋ฉด ๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„๋ฅผ ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์˜ค๋ฒ„๋กœ๋”ฉ(Overloading)

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

 

 

์˜ค๋ฒ„๋ผ์ด๋”ฉ(Overriding)

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

 

 

์ถ”์ƒํ™”

ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ์˜ ์ถ”์ƒํ™”๋Š” ๋ณต์žกํ•œ ๋ฐ์ดํ„ฐ, ๊ตฌ์กฐ, ์‹œ์Šคํ…œ ๋“ฑ์œผ๋กœ๋ถ€ํ„ฐ ํ•ต์‹ฌ๋งŒ์„ ๊ฐ€๋ ค๋‚ด ๋œ ์ž์„ธํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ ๋˜๋Š” ์„ธ๋ถ€์‚ฌํ•ญ, ์ ˆ์ฐจ ๋“ฑ์„ ๊ฐ์ถ”๊ณ  ์ธํ„ฐํŽ˜์ด์Šค ๋“ฑ์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์œผ๋กœ ๋ณต์žก๋„๋ฅผ ๋‚ฎ์ถ”๋Š” ๋ฐฉ๋ฒ•์„ ๋งํ•ฉ๋‹ˆ๋‹ค.
์ถ”์ƒํ™”๋Š” ๋ฐ์ดํ„ฐ, ํ”„๋กœ์„ธ์Šค ์ถ”์ƒํ™” ํฌ๊ฒŒ 2๊ฐ€์ง€๋กœ ๋‚˜๋ˆ ์ง‘๋‹ˆ๋‹ค.

 

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

 

์ปดํŒŒ์ผ๋Ÿฌ

  • ์ „์ฒด ๋ณ€ํ™˜: ์†Œ์Šค ์ฝ”๋“œ์˜ ์ „์ฒด๋ฅผ ์ฝ์–ด ํ•œ ๋ฒˆ์— ๊ธฐ๊ณ„์–ด๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๋ณ€ํ™˜๊ณผ์ •์„๊ฑฐ์นœ ํ›„, ์ƒ์„ฑ๋œ ๊ธฐ๊ณ„์–ด ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  • ์†๋„: ์ปดํŒŒ์ผ ๊ณผ์ • ์ž์ฒด๋Š” ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฌ์ง€๋งŒ, ๋ณ€ํ™˜๋œ ์ฝ”๋“œ๋Š” ์ง์ ‘ ์‹คํ–‰๋˜๋ฏ€๋กœ ์‹คํ–‰ ์‹œ๊ฐ„์€ ๋น ๋ฆ…๋‹ˆ๋‹ค.
  • ์‚ฌ์šฉ ์˜ˆ: C, C++, Go, Rust ๋“ฑ์˜ ์–ธ์–ด๊ฐ€ ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ–ˆ์„ ๋•Œ ์ปดํŒŒ์ผ๊ณผ์ •์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
  • ex) C++ ์‹ค์Šต
์ปดํŒŒ์ผ๊ณผ์ •
๊ณ ์ˆ˜์ค€์˜ ์†Œ์Šค์ฝ”๋“œ๋ฅผ ์ „์ฒ˜๋ฆฌ, ์ปดํŒŒ์ผ๋Ÿฌ, ์–ด์…ˆ๋ธ”๋Ÿฌ, ๋ง์ปค์˜ ๊ณผ์ •์„ ๊ฑฐ์ณ ์ €์ˆ˜์ค€์–ธ์–ด๋กœ ๋งŒ๋“ค๊ณ  ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“œ๋Š” ๊ณผ์ •

 

 

์ธํ„ฐํ”„๋ฆฌํ„ฐ

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

 

 

 

์ปดํŒŒ์ผ๋Ÿฌ์™€ ์ธํ„ฐํ”„๋ฆฌํ„ฐ์˜ ๊ณตํ†ต์ 

๋ชจ๋‘ ๊ณ ์ˆ˜์ค€์˜ ์–ธ์–ด๋ฅผ ๊ธฐ๊ณ„์–ด๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค๋Š” ๊ณตํ†ต์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.


[์ฐธ๊ณ ] ๊ธฐ๊ณ„์–ด
๊ธฐ๊ณ„์–ด ์ฝ”๋“œ(Machine Code)๋Š” ์ปดํ“จํ„ฐ ํ”„๋กœ์„ธ์„œ๊ฐ€ ์ง์ ‘ ์ดํ•ดํ•˜๊ณ  ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š”, ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ํ˜•ํƒœ์˜ ๋ช…๋ น์–ด ์ง‘ํ•ฉ์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ฝ”๋“œ๋Š” 0๊ณผ 1, ์ฆ‰ ์ด์ง„์ˆ˜(binary)๋กœ ํ‘œํ˜„๋˜๋ฉฐ, ์ปดํ“จํ„ฐ์˜ ์ค‘์•™ ์ฒ˜๋ฆฌ ์žฅ์น˜(CPU)๊ฐ€ ์ง์ ‘ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์œ ์ผํ•œ ์–ธ์–ด์ด์ž ๊ฐ€์žฅ ๋‚ฎ์€ ์ˆ˜์ค€์˜ ์–ธ์–ด์ด๋ฉฐ ์ด๋Š” ๊ธฐ๊ณ„์–ด๊ฐ€ ์ปดํ“จํ„ฐ ํ•˜๋“œ์›จ์–ด์™€ ์ง์ ‘์ ์œผ๋กœ ์†Œํ†ตํ•  ์ˆ˜ ์žˆ๋Š” ์–ธ์–ด๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

 

 

์ปดํŒŒ์ผ๋Ÿฌ์™€ ์ธํ„ฐํ”„๋ฆฌํ„ฐ์˜ ์ฐจ์ด์ 

 

๊ตฌ๋ถ„ ์ปดํŒŒ์ผ๋Ÿฌ ์ธํ„ฐํ”„๋ฆฌํ„ฐ
๋ฒˆ์—ญ ๋ฐฉ์‹ ์ „์ฒด ์ฝ”๋“œ ๋ฒˆ์—ญ ํ›„ ์‹คํ–‰ ํ•œ ์ค„์”ฉ ๋ฒˆ์—ญํ•˜๋ฉด์„œ ์‹คํ–‰
์‹คํ–‰ ์†๋„ ๋น ๋ฆ„ (๋ฏธ๋ฆฌ ๋ฒˆ์—ญ) ๋Š๋ฆผ (์‹คํ–‰ํ•  ๋•Œ ๋ฒˆ์—ญ)
์˜ค๋ฅ˜ ๊ฒ€์ถœ ์ „์ฒด ์ฝ”๋“œ ํ™•์ธ ํ›„ ์˜ค๋ฅ˜ ์ถœ๋ ฅ ์‹คํ–‰ ๋„์ค‘ ์˜ค๋ฅ˜ ๋ฐœ์ƒ ์‹œ ์ฆ‰์‹œ ์ค‘๋‹จ
์˜ˆ์‹œ ์–ธ์–ด C, C++, Java Python, JavaScript

 

 

JIT ์ปดํŒŒ์ผ๋Ÿฌ

JIT ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์ธํ„ฐํ”„๋ฆฌํ„ฐ์™€ ์ปดํŒŒ์ผ๋Ÿฌ์˜ ์ค‘๊ฐ„ ํ˜•ํƒœ๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ์ฝ”๋“œ ๋ถ„์„: ์‹คํ–‰ ์‹œ์ ์— ํ”„๋กœ๊ทธ๋žจ ์ฝ”๋“œ๋ฅผ ๋ถ„์„ํ•˜์—ฌ, ์–ด๋–ค ๋ถ€๋ถ„์ด ๊ฐ€์žฅ ์ž์ฃผ ์‹คํ–‰๋˜๋Š”์ง€(hot spot) ํŒ๋‹จํ•ฉ๋‹ˆ๋‹ค.(์ฆ‰, ์‹คํ–‰์ „ ์ฝ”๋“œ๋ฅผ ๋ถ„์„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.)
  2. ๋™์  ์ปดํŒŒ์ผ: ๋ถ„์„ ๊ฒฐ๊ณผ์— ๊ธฐ๋ฐ˜ํ•˜์—ฌ, ์ž์ฃผ ์‹คํ–‰๋˜๋Š” ์ฝ”๋“œ(hot spot)๋งŒ์„ ์„ ๋ณ„์ ์œผ๋กœ ๊ธฐ๊ณ„์–ด๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ณผ์ •์€ ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์ค‘์— ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค.
  3. ์ตœ์ ํ™”: ์ปดํŒŒ์ผ ๊ณผ์ •์—์„œ ๋‹ค์–‘ํ•œ ์ตœ์ ํ™” ๊ธฐ๋ฒ•์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค. (ex. ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ ํŒจํ„ด์„ ๋ถ„์„, ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์˜ ์˜ค๋ฒ„ํ—ค๋“œ ์ตœ์†Œํ™” ๋“ฑ)
  4. ์‹คํ–‰: ์ปดํŒŒ์ผ๋œ ๊ธฐ๊ณ„์–ด ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœ๊ทธ๋žจ์ด ๊ณ„์† ์‹คํ–‰๋˜๋ฉด์„œ ์ƒˆ๋กœ์šด ํ•ซ ์ŠคํŒŸ์ด ๋ฐœ๊ฒฌ๋˜๋ฉด, ํ•ด๋‹น ๋ถ€๋ถ„๋„ JIT ์ปดํŒŒ์ผ์„ ํ†ตํ•ด ์ตœ์ ํ™”๋ฉ๋‹ˆ๋‹ค.
    • ex) JVM(์ž๋ฐ”๊ฐ€์ƒ๋จธ์‹ ), .NET, V8(node.js ์—”์ง„)
  • ์žฅ์ 
    • ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ์ฝ”๋“œ(hot code)์˜ ์‹คํ–‰ ์†๋„๊ฐ€ ํฌ๊ฒŒ ํ–ฅ์ƒ๋ฉ๋‹ˆ๋‹ค.
  • ๋‹จ์ 
    • ์ปดํŒŒ์ผ ๋œ ์ฝ”๋“œ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅํ•ด ์บ์‹ฑํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ธํ„ฐํ”„๋ฆฌํ„ฐ ๋ฐฉ์‹์— ๋น„ํ•ด ๋” ๋งŽ์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์†Œ๋น„ํ•œ๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

 

 

 

 

 

 

 

[์ฐธ๊ณ ] 

https://www.inflearn.com/course/๊ฐœ๋ฐœ์ž-๋ฉด์ ‘-cs-ํŠน๊ฐ•

 

CS ์ง€์‹์˜ ์ •์„ | ๋””์ž์ธํŒจํ„ด ๋„คํŠธ์›Œํฌ ์šด์˜์ฒด์ œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ž๋ฃŒ๊ตฌ์กฐ | ํฐ๋Œ - ์ธํ”„๋Ÿฐ

ํฐ๋Œ | ๊ตญ๋‚ด 1์œ„ "๋ฉด์ ‘์„ ์œ„ํ•œ CS ์ „๊ณต์ง€์‹๋…ธํŠธ" ์ €์ž์˜ ๋””์ž์ธํŒจํ„ด, ๋„คํŠธ์›Œํฌ, ์šด์˜์ฒด์ œ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋“ฑ CS ์ง€์‹ ๊ฐ•์˜! CS ๋ฉด์ ‘์— ํ•„์š”ํ•œ ๋ชจ๋“  ๊ฐœ๋…๊ณผ ์ตœ์‹  ๊ธฐ์ถœ์„ ๋‹ค๋ฃฌ๋‹ค!, [์‚ฌ์ง„] [์‚ฌ์ง„] [์‹ค์ œ ์นด

www.inflearn.com