๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๋นˆ ๊ตฌ๋ฉ ์ฑ„์šฐ๊ธฐ

[Compiler] ์ฝ”๋“œ ํŒจ์Šค(์ฝ”๋“œ ๊ฒฝ๋กœ) + ์ฝ”๋“œ ํŒจ์Šค์™€ ์ปดํŒŒ์ผ๋Ÿฌ ์ตœ์ ํ™”

์ถœ์ฒ˜

ChatGPT


์ฝ”๋“œ ํŒจ์Šค ์˜๋ฏธ 

์ฝ”๋“œ ํŒจ์Šค๋ž€

ํ”„๋กœ๊ทธ๋žจ ๋‚ด์˜ ํŠน์ • ์ฝ”๋“œ ๊ฒฝ๋กœ. ํ”„๋กœ๊ทธ๋žจ์˜ ์‹คํ–‰์ด ์–ด๋–ป๊ฒŒ ์ง„ํ–‰๋˜๋Š” ์ง€๋ฅผ ์„ค๋ช…ํ•œ๋‹ค. 

 

์ฝ”๋“œ ํŒจ์Šค๋Š” ๋ณดํ†ต ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฝ์šฐ์— ํ˜•์„ฑ๋œ๋‹ค.

 

1. ์กฐ๊ฑด๋ฌธ 

  • 'if', 'else', 'switch' ๋“ฑ์˜ ์กฐ๊ฑด๋ฌธ์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ์ฝ”๋“œ ๊ฒฝ๋กœ๊ฐ€ ์‹คํ–‰๋œ๋‹ค.

2. ๋ฐ˜๋ณต๋ฌธ

  • 'for', 'while' ๋“ฑ์˜ ๋ฐ˜๋ณต๋ฌธ์—์„œ ์กฐ๊ฑด์— ๋”ฐ๋ผ ๋ฐ˜๋ณต ํšŒ์ˆ˜์— ๋”ฐ๋ผ ๋‹ค์–‘ํ•œ ๊ฒฝ๋กœ๊ฐ€ ํ˜•์„ฑ๋  ์ˆ˜ ์žˆ๋‹ค.

3. ํ•จ์ˆ˜ ํ˜ธ์ถœ

  • ํŠน์ • ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋˜๋ฉด์„œ ๋‹ค๋ฅธ ์ฝ”๋“œ ๊ฒฝ๋กœ๋กœ ์‹คํ–‰์ด ์ „ํ™˜๋œ๋‹ค.

4. ์˜ˆ์™ธ ์ฒ˜๋ฆฌ

  • ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด, ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๋ธ”๋ก์œผ๋กœ ์ฝ”๋“œ ๊ฒฝ๋กœ๊ฐ€ ๋ณ€๊ฒฝ๋œ๋‹ค.

 

์˜ˆ์‹œ ์ฝ”๋“œ

public class Example {
    public static void main(String[] args) {
        int number = 10;

        // ์กฐ๊ฑด๋ฌธ์— ๋”ฐ๋ฅธ ์ฝ”๋“œ ํŒจ์Šค
        if (number > 0) {
            System.out.println("Positive number");
        } else if (number < 0) {
            System.out.println("Negative number");
        } else {
            System.out.println("Zero");
        }

        // ๋ฐ˜๋ณต๋ฌธ์— ๋”ฐ๋ฅธ ์ฝ”๋“œ ํŒจ์Šค
        for (int i = 0; i < number; i++) {
            if (i % 2 == 0) {
                System.out.println(i + " is even");
            } else {
                System.out.println(i + " is odd");
            }
        }

        // ํ•จ์ˆ˜ ํ˜ธ์ถœ์— ๋”ฐ๋ฅธ ์ฝ”๋“œ ํŒจ์Šค
        printMessage("Hello, World!");

        // ์˜ˆ์™ธ ์ฒ˜๋ฆฌ์— ๋”ฐ๋ฅธ ์ฝ”๋“œ ํŒจ์Šค
        try {
            int result = divide(number, 0);
            System.out.println("Result: " + result);
        } catch (ArithmeticException e) {
            System.out.println("Cannot divide by zero");
        }
    }

    public static void printMessage(String message) {
        System.out.println(message);
    }

    public static int divide(int a, int b) {
        return a / b;
    }
}

 

์œ„์˜ ์ฝ”๋“œ์—์„œ ๋‹ค์–‘ํ•œ ์ฝ”๋“œ ํŒจ์Šค๊ฐ€ ์žˆ๋‹ค.

 

1. ์กฐ๊ฑด๋ฌธ ์ฝ”๋“œ ํŒจ์Šค

 

  • 'number > 0'์ผ ๋•Œ์˜ ์ฝ”๋“œ ํŒจ์Šค
  • 'number < 0'์ผ ๋•Œ์˜ ์ฝ”๋“œ ํŒจ์Šค
  • 'number == 0'์ผ ๋•Œ์˜ ์ฝ”๋“œ ํŒจ์Šค

 

2. ๋ฐ˜๋ณต๋ฌธ ์ฝ”๋“œ ํŒจ์Šค

  • 'for' ๋ฃจํ”„๊ฐ€ 'i = 0'๋ถ€ํ„ฐ 'i < number'๊นŒ์ง€ ๋ฐ˜๋ณต๋˜๋ฉฐ, 'i'๊ฐ€ ์ง์ˆ˜์ผ ๋•Œ์™€ ํ™€์ˆ˜์ผ ๋•Œ ๊ฐ๊ฐ ๋‹ค๋ฅธ ์ฝ”๋“œ ํŒจ์Šค๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.

3. ํ•จ์ˆ˜ ํ˜ธ์ถœ ์ฝ”๋“œ ํŒจ์Šค

  • 'printMessage' ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋˜๋ฉฐ, ์ด๋กœ ์ธํ•ด ๋‹ค๋ฅธ ์ฝ”๋“œ ํŒจ์Šค๋กœ ์ „ํ™˜๋ฉ๋‹ˆ๋‹ค.

4. ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ์ฝ”๋“œ ํŒจ์Šค

  • 'divide' ๋ฉ”์„œ๋“œ๊ฐ€ 0์œผ๋กœ ๋‚˜๋ˆ„๋ ค ํ•  ๋•Œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ 'catch' ๋ธ”๋ก์˜ ์ฝ”๋“œ ํŒจ์Šค๋กœ ์ „ํ™˜๋ฉ๋‹ˆ๋‹ค.

 

์ฝ”๋“œ ํŒจ์Šค์™€ ์ปดํŒŒ์ผ๋Ÿฌ ์ตœ์ ํ™”

JIT์™€ AOT ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ํ”„๋กœ๊ทธ๋žจ์˜ ์‹คํ–‰ ์ค‘ ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•˜๊ธฐ ์œ„ํ•ด ์ฝ”๋“œ ํŒจ์Šค๋ฅผ ๋ถ„์„ํ•˜๊ณ  ์ตœ์ ํ™”๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค. ์ž์ฃผ ์‹คํ–‰๋˜๋Š” ์ฝ”๋“œ ํŒจ์Šค๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์ปดํŒŒ์ผํ•˜๋ฉด ํ”„๋กœ๊ทธ๋žจ์˜ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

์ตœ์ ํ™” ์˜ˆ์‹œ

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

์ ์‘ํ˜• ์ตœ์ ํ™”

  • ๋Ÿฐํƒ€์ž„์— ์ž์ฃผ ์‹คํ–‰๋˜๋Š” ์ฝ”๋“œ ํŒจ์Šค๋ฅผ ์‹๋ณ„ํ•˜๊ณ , ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ค๊ธฐ ์œ„ํ•œ ์ตœ์ ํ™”๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋ฃจํ”„ ๋‚ด์˜ ์ฝ”๋“œ๋ฅผ ์ธ๋ผ์ธํ•˜๊ฑฐ๋‚˜, ๋ถˆํ•„์š”ํ•œ ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ์„ ์ œ๊ฑฐํ•œ๋‹ค.

2. AOT ์ปดํŒŒ์ผ๋Ÿฌ

๋ฏธ๋ฆฌ ์ตœ์ ํ™”

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

 

์ฝ”๋“œ ํŒจ์Šค ์ตœ์ ํ™”์˜ ์ค‘์š”์„ฑ

1. ์„ฑ๋Šฅ ํ–ฅ์ƒ

์ฝ”๋“œ ํŒจ์Šค๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์ตœ์ ํ™”ํ•˜๋ฉด ํ”„๋กœ๊ทธ๋žจ์˜ ์„ฑ๋Šฅ์ด ํฌ๊ฒŒ ํ–ฅ์ƒ๋  ์ˆ˜ ์žˆ๋‹ค. ํŠนํžˆ, ์ž์ฃผ ์‹คํ–‰๋˜๋Š” ๋ฃจํ”„๋‚˜ ํ•จ์ˆ˜๋Š” ์ตœ์ ํ™”์˜ ์ฃผ์š” ๋Œ€์ƒ์ด ๋œ๋‹ค.

2. ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ ๊ฐ์†Œ

์ตœ์ ํ™”๋œ ์ฝ”๋“œ ํŒจ์Šค๋Š” ๋ถˆํ•„์š”ํ•œ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ์„ ์ค„์—ฌ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ฉ”๋ชจ๋ฆฌ ํšจ์œจ์„ฑ์„ ๋†’์ธ๋‹ค.

3. ์ „๋ ฅ ์†Œ๋น„ ๊ฐ์†Œ

๋ชจ๋ฐ”์ผ ํ™˜๊ฒฝ์—์„œ๋Š” ์ตœ์ ํ™”๋œ ์ฝ”๋“œ ํŒจ์Šค๊ฐ€ ์ „๋ ฅ ์†Œ๋น„๋ฅผ ์ค„์ด๊ณ , ๋ฐฐํ„ฐ๋ฆฌ ์ˆ˜๋ช…์„ ์—ฐ์žฅํ•˜๋Š” ๋ฐ ๊ธฐ์—ฌํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๊ฒฐ๋ก 

"์ฝ”๋“œ ํŒจ์Šค"๋Š” ํ”„๋กœ๊ทธ๋žจ์˜ ์‹คํ–‰ ํ๋ฆ„์„ ์„ค๋ช…ํ•˜๋Š” ์ค‘์š”ํ•œ ๊ฐœ๋…์ด๋ฉฐ, JIT์™€ AOT ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์„ฑ๋Šฅ ์ตœ์ ํ™”๋ฅผ ์ˆ˜ํ–‰ํ•  ๋•Œ ์ฃผ์š” ๊ณ ๋ ค ์‚ฌํ•ญ์ด ๋œ๋‹ค. ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์ž์ฃผ ์‹คํ–‰๋˜๋Š” ์ฝ”๋“œ ํŒจ์Šค๋ฅผ ์‹๋ณ„ํ•˜๊ณ  ์ตœ์ ํ™”๋ฅผ ์ˆ˜ํ–ฅํ•˜์—ฌ, ํ”„๋กœ๊ทธ๋žจ์˜ ์„ฑ๋Šฅ๊ณผ ํšจ์œจ์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค.


ChatGPT์—๊ฒŒ ์ด ๊ธ€์˜ ์ถœ์ฒ˜๋ฅผ ๋ฌผ์—ˆ๋‹ค.

์ฝ”๋“œ ํŒจ์Šค์— ๋Œ€ํ•œ ์ถœ์ฒ˜

  1. "Clean Code: A Handbook of Agile Software Craftsmanship" by Robert C. Martin
    • ๋‚ด์šฉ: ์ด ์ฑ…์€ ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์—์„œ ๊นจ๋—ํ•œ ์ฝ”๋“œ ์ž‘์„ฑ์˜ ์ค‘์š”์„ฑ๊ณผ ๊ด€๋ จ๋œ ๋‚ด์šฉ์„ ๋‹ค๋ฃน๋‹ˆ๋‹ค. ์ฝ”๋“œ ํŒจ์Šค๋Š” ์ฝ”๋“œ์˜ ๋ณต์žก์„ฑ์„ ์ค„์ด๊ณ , ๊ฐ€๋…์„ฑ์„ ๋†’์ด๋ฉฐ, ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ๊ฐœ์„ ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•  ๋•Œ ์ž์ฃผ ์–ธ๊ธ‰๋ฉ๋‹ˆ๋‹ค.
    • ์„ค๋ช…:
      • ์ฝ”๋“œ ํŒจ์Šค๋Š” ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋˜๋Š” ๋™์•ˆ ์ฝ”๋“œ์˜ ํ๋ฆ„์„ ๋”ฐ๋ผ๊ฐ€๋Š” ๊ฒฝ๋กœ์ž…๋‹ˆ๋‹ค.
      • ์ฝ”๋“œ ํŒจ์Šค๋ฅผ ๋‹จ์ˆœํ™”ํ•˜๊ณ  ๋ช…ํ™•ํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ์ฝ”๋“œ ํ’ˆ์งˆ์˜ ํ•ต์‹ฌ์ž…๋‹ˆ๋‹ค.
    • ๋งํฌ: Clean Code on Amazon
  2. "Code Complete: A Practical Handbook of Software Construction" by Steve McConnell
    • ๋‚ด์šฉ: ์ด ์ฑ…์€ ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์˜ ๋‹ค์–‘ํ•œ ์ธก๋ฉด์„ ๋‹ค๋ฃจ๋ฉฐ, ํŠนํžˆ ์ฝ”๋“œ ๊ตฌ์กฐ์™€ ํ๋ฆ„ ์ œ์–ด์— ๊ด€ํ•œ ๋‚ด์šฉ์„ ํฌํ•จํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ฝ”๋“œ ํŒจ์Šค๋Š” ํšจ๊ณผ์ ์ธ ์ฝ”๋”ฉ ๋ฐ ๋””๋ฒ„๊น…์˜ ์ผ๋ถ€๋กœ ์„ค๋ช…๋ฉ๋‹ˆ๋‹ค.
    • ์„ค๋ช…:
      • ์ฝ”๋“œ ํŒจ์Šค๋Š” ํ”„๋กœ๊ทธ๋žจ ๋‚ด์˜ ํŠน์ • ๋กœ์ง์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒฝ๋กœ์ด๋ฉฐ, ๋‹ค์–‘ํ•œ ์กฐ๊ฑด๊ณผ ๋ถ„๊ธฐ์ ์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
      • ๋ณต์žกํ•œ ์ฝ”๋“œ ํŒจ์Šค๋ฅผ ๋‹จ์ˆœํ™”ํ•˜๋Š” ๊ฒƒ์ด ์†Œํ”„ํŠธ์›จ์–ด์˜ ์ดํ•ด๋ฅผ ๋•๊ณ , ๋ฒ„๊ทธ๋ฅผ ์ค„์ด๋Š” ๋ฐ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.
    • ๋งํฌ: Code Complete on Amazon
  3. "The Pragmatic Programmer: Your Journey To Mastery" by Andrew Hunt and David Thomas
    • ๋‚ด์šฉ: ์ด ์ฑ…์€ ๊ฐœ๋ฐœ์ž์˜ ์ƒ์‚ฐ์„ฑ๊ณผ ์ฝ”๋“œ ํ’ˆ์งˆ์„ ๋†’์ด๊ธฐ ์œ„ํ•œ ๋‹ค์–‘ํ•œ ๊ธฐ์ˆ ๊ณผ ๋ฐฉ๋ฒ•์„ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค. ์ฝ”๋“œ ํŒจ์Šค์˜ ์ตœ์ ํ™” ๋ฐ ๊ด€๋ฆฌ์— ๊ด€ํ•œ ๋‚ด์šฉ๋„ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.
    • ์„ค๋ช…:
      • ์ฝ”๋“œ ํŒจ์Šค๋Š” ํŠน์ • ์ž…๋ ฅ๊ณผ ์กฐ๊ฑด์— ๋”ฐ๋ผ ํ”„๋กœ๊ทธ๋žจ์ด ์ˆ˜ํ–‰ํ•˜๋Š” ์ผ๋ จ์˜ ๋ช…๋ น์ž…๋‹ˆ๋‹ค.
      • ํšจ์œจ์ ์ธ ์ฝ”๋“œ ํŒจ์Šค ๊ด€๋ฆฌ๋Š” ํ”„๋กœ๊ทธ๋žจ์˜ ์„ฑ๋Šฅ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.
    • ๋งํฌ: The Pragmatic Programmer on Amazon
  4. "Design Patterns: Elements of Reusable Object-Oriented Software" by Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides
    • ๋‚ด์šฉ: ์ด ์ฑ…์€ ๊ฐ์ฒด์ง€ํ–ฅ ๋””์ž์ธ ํŒจํ„ด์„ ์†Œ๊ฐœํ•˜๋ฉฐ, ์ฝ”๋“œ ํŒจ์Šค์™€ ๊ด€๋ จ๋œ ๊ตฌ์กฐ์  ๋ฐ ํ–‰๋™์  ํŒจํ„ด์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.
    • ์„ค๋ช…:
      • ์ฝ”๋“œ ํŒจ์Šค๋Š” ํŠน์ • ๋””์ž์ธ ํŒจํ„ด์„ ์ ์šฉํ•˜์—ฌ ์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ์„ฑ๊ณผ ํ™•์žฅ์„ฑ์„ ๊ฐœ์„ ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ์˜ํ–ฅ์„ ๋ฏธ์นฉ๋‹ˆ๋‹ค.
      • ํŒจํ„ด์„ ์‚ฌ์šฉํ•˜์—ฌ ์ฝ”๋“œ ํŒจ์Šค๋ฅผ ๋ช…ํ™•ํ•˜๊ณ  ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ๋ชฉํ‘œ์ž…๋‹ˆ๋‹ค.
    • ๋งํฌ: Design Patterns on Amazon
  5. "Refactoring: Improving the Design of Existing Code" by Martin Fowler
    • ๋‚ด์šฉ: ์ด ์ฑ…์€ ๊ธฐ์กด ์ฝ”๋“œ์˜ ๊ตฌ์กฐ๋ฅผ ๊ฐœ์„ ํ•˜๋Š” ๋‹ค์–‘ํ•œ ๋ฆฌํŒฉํ† ๋ง ๊ธฐ๋ฒ•์„ ์†Œ๊ฐœํ•˜๋ฉฐ, ์ฝ”๋“œ ํŒจ์Šค์˜ ๋‹จ์ˆœํ™”์™€ ์ตœ์ ํ™”์— ๊ด€ํ•œ ๋‚ด์šฉ์„ ๋‹ค๋ฃน๋‹ˆ๋‹ค.
    • ์„ค๋ช…:
      • ์ฝ”๋“œ ํŒจ์Šค๋ฅผ ๋ถ„์„ํ•˜๊ณ  ๋ฆฌํŒฉํ† ๋งํ•˜์—ฌ ์ฝ”๋“œ๋ฅผ ๋ณด๋‹ค ์ฝ๊ธฐ ์‰ฝ๊ฒŒ ํ•˜๊ณ , ์˜ค๋ฅ˜๋ฅผ ์ค„์ด๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.
      • ๋ณต์žกํ•œ ์ฝ”๋“œ ํŒจ์Šค๋ฅผ ๋‹จ์ˆœํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์ฝ”๋“œ์˜ ์œ ์ง€๋ณด์ˆ˜์„ฑ๊ณผ ํ™•์žฅ์„ฑ์„ ๋†’์ด๋Š” ๋ฐ ๊ธฐ์—ฌํ•ฉ๋‹ˆ๋‹ค.
    • ๋งํฌ: Refactoring on Amazon