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

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

[Java] ์‹ฌ๋ณผ๋ฆญ ๋ ˆํผ๋Ÿฐ์Šค Symbolic Reference

์ถœ์ฒ˜

ChatGPT

 

 

๊ฐœ์š”

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

 

๊ฐœ๋…

  • ์‹ฌ๋ณผ๋ฆญ ๋ ˆํผ๋Ÿฐ์Šค๋Š” ํŠน์ • ์ž์›์„ ์ฐธ์กฐํ•˜๋Š” ๊ณ ์ˆ˜์ค€์˜ ์ด๋ฆ„, ๋ฌธ์ž์—ด, ์‹๋ณ„์ž์ด๋‹ค.
  • JVM์ด ํด๋ž˜์Šค ํŒŒ์ผ์„ ํ•ด์„ํ•˜๋Š” ๊ณผ์ •์—์„œ ์‚ฌ์šฉ๋œ๋‹ค.
  • ์ปดํŒŒ์ผ ์‹œ์ ์— ๊ฒฐ์ •๋˜๋ฉฐ, ๋Ÿฐํƒ€์ž„ ์‹œ์ €์— ์‹ค์ œ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋กœ ๋ณ€ํ™˜๋œ๋‹ค. 

์ข…๋ฅ˜

1. ํด๋ž˜์Šค ์‹ฌ๋ณผ๋ฆญ ๋ ˆํผ๋Ÿฐ์Šค

๋‹ค๋ฅธ ํด๋ž˜์Šค๋‚˜ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ฐธ์กฐํ•˜๋Š” ๋ฌธ์ž์—ด. ํŒจํ‚ค์ง€ ๊ฒฝ๋กœ์™€ ํด๋ž˜์Šค ์ด๋ฆ„์œผ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.

2. ํ•„๋“œ ์‹ฌ๋ณผ๋ฆญ ๋ ˆํผ๋Ÿฐ์Šค

ํด๋ž˜์Šค ๋‚ด์˜ ํŠน์ • ํ•„๋“œ๋ฅผ ์ฐธ์กฐํ•˜๋Š” ์ด๋ฆ„์ด๋‹ค. ํ•„๋“œ์˜ ์ด๋ฆ„๊ณผ ์†Œ์† ํด๋ž˜์Šค ์ •๋ณด๋ฅผ ํฌํ•จํ•œ๋‹ค.

3. ๋ฉ”์„œ๋“œ ์‹ฌ๋ณผ๋ฆญ ๋ ˆํผ๋Ÿฐ์Šค

ํŠน์ • ๋ฉ”์„œ๋“œ๋ฅผ ์ฐธ์กฐํ•˜๋Š” ์ด๋ฆ„์ด๋‹ค. ๋ฉ”์„œ๋“œ์˜ ์ด๋ฆ„, ๋งค๊ฐœ๋ณ€์ˆ˜ ํƒ€์ž…, ๋ฆฌํ„ด ํƒ€์ž… ๋“ฑ์„ ํฌํ•จํ•œ๋‹ค.

 

์˜ˆ

1. ํด๋ž˜์Šค ์‹ฌ๋ณผ๋ฆญ ๋ ˆํผ๋Ÿฐ์Šค

import java.util.ArrayList;

public class Example {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        list.add("Hello");
    }
}

 

  • ์‹ฌ๋ณผ๋ฆญ ๋ ˆํผ๋Ÿฐ์Šค : 'java.util.ArrayList'
  • ์„ค๋ช… : 'ArrayList' ํด๋ž˜์Šค๋ฅผ ์ฐธ์กฐํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋œ ์‹ฌ๋ณผ๋ฆญ ๋ ˆํผ๋Ÿฐ์Šค๋Š” 'java.util'ํŒจํ‚ค์ง€์˜ 'ArrayList' ํด๋ž˜์Šค๋ผ๋Š” ๋ฌธ์ž์—ด์ด๋‹ค.

 

2. ํ•„๋“œ ์‹ฌ๋ณผ๋ฆญ ๋ ˆํผ๋Ÿฐ์Šค

public class Example {
    public static int staticField = 10;

    public static void main(String[] args) {
        System.out.println(Example.staticField);
    }
}

 

  • ์‹ฌ๋ณผ๋ฆญ ๋ ˆํผ๋Ÿฐ์Šค : 'Example.staticField'
  • ์„ค๋ช… : 'staticField' ๋ผ๋Š” ํ•„๋“œ๋ฅผ ์ฐธ์กฐํ•˜๊ธฐ ์œ„ํ•ด 'Example' ํด๋ž˜์Šค ๋‚ด์˜ ํ•„๋“œ ์ด๋ฆ„์œผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค.

 

3. ๋ฉ”์„œ๋“œ ์‹ฌ๋ณผ๋ฆญ ๋ ˆํผ๋Ÿฐ์Šค

public class Example {
    public void printMessage() {
        System.out.println("Hello, World!");
    }

    public static void main(String[] args) {
        Example example = new Example();
        example.printMessage();
    }
}

 

  • ์‹ฌ๋ณผ๋ฆญ ๋ ˆํผ๋Ÿฐ์Šค : 'Example.printMessage()'
  • ์„ค๋ช… : 'printMessage' ๋ฉ”์„œ๋“œ๋ฅผ ์ฐธ์กฐํ•˜๊ธฐ ์œ„ํ•ด 'Example' ํด๋ž˜์Šค์˜ ๋ฉ”์„œ๋“œ ์ด๋ฆ„๊ณผ ์‹œ๊ทธ๋‹ˆ์ฒ˜๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

 

 

์—ญํ• 

1. ์ปดํŒŒ์ผ ์‹œ์  ์ •๋ณด ์ œ๊ณต

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

2. ๋Ÿฐํƒ€์ž„ ์‹œ์  ๋™์  ์—ฐ๊ฒฐ

JVM์€ ํด๋ž˜์Šค ๋กœ๋”ฉ ๊ณผ์ •์—์„œ ์‹ฌ๋ณผ๋ฆญ ๋ ˆํผ๋Ÿฐ์Šค๋ฅผ ์‹ค์ œ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋กœ ๋ณ€ํ™˜ํ•ด ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค. 

์‹ฌ๋ณผ๋ฆญ ๋ ˆํผ๋Ÿฐ์Šค๋ฅผ ๋ฌผ๋ฆฌ์  ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ณผ์ •์„ ๋™์  ์—ฐ๊ฒฐ์ด๋ผ๊ณ  ํ•œ๋‹ค.

 

์‹ฌ๋ณผ๋ฆญ ๋ ˆํผ๋Ÿฐ์Šค์™€ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ

์‹ฌ๋ณผ๋ฆญ ๋ ˆํผ๋Ÿฐ์Šค์˜ ์žฅ์ 

1. ์œ ์—ฐ์„ฑ

์ฝ”๋“œ์˜ ๋ณ€๊ฒฝ ์—†์ด ๋‹ค์–‘ํ•œ ํด๋ž˜์Šค๋‚˜ ๋ฉ”์„œ๋“œ๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋‹ค.

2. ์บก์Šํ™”

์‹ค์ œ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ์ˆจ๊ธฐ๊ณ , ์ฝ”๋“œ์—์„œ ๊ณ ์ˆ˜์ค€์˜ ์ด๋ฆ„๋งŒ์„ ์‚ฌ์šฉํ•˜์—ฌ ์•ˆ์ „์„ฑ์„ ๋†’์ธ๋‹ค.

3. ํ™•์žฅ์„ฑ

์ฝ”๋“œ ์ˆ˜์ • ์—†์ด ๋Ÿฐํƒ€์ž„ ์‹œ์ ์— ์ƒˆ๋กœ์šด ํด๋ž˜์Šค๋ฅผ ๋™์ ์œผ๋กœ ๋กœ๋“œํ•  ์ˆ˜ ์žˆ๋‹ค.

์‹ฌ๋ณผ๋ฆญ ๋ ˆํผ๋Ÿฐ์Šค์˜ ๋‹จ์ 

1. ์„ฑ๋Šฅ ์˜ค๋ฒ„ํ—ค๋“œ

๋Ÿฐํ‹ฐ์ž„ ์‹œ์ ์— ์‹ฌ๋ณผ๋ฆญ ๋ ˆํผ๋Ÿฐ์Šค๋ฅผ ๋ฌผ๋ฆฌ์  ์ฃผ์†Œ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ณผ์ •์—์„œ ์„ฑ๋Šฅ ์ €ํ•˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

2. ๋Ÿฐํƒ€์ž„ ์˜ˆ์™ธ

์‹ฌ๋ณผ๋ฆญ ๋ ˆํผ๋Ÿฐ์Šค๋ฅผ ํ†ตํ•œ ๋™์  ์—ฐ๊ฒฐ ๊ณผ์ •์—์„œ ํด๋ž˜์Šค๋‚˜ ๋ฉ”์„œ๋“œ๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ 'ClassNotFoundException', 'NoSuchMethodError'์™€ ๊ฐ™์€ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์‚ฌ์šฉ ์‚ฌ๋ก€

1. JVM ํด๋ž˜์Šค ๋กœ๋”ฉ

JVM์€ ํ”„๋กœ๊ทธ๋žจ์ด ์‹œ์ž‘๋  ๋•Œ ํ•„์š”ํ•œ ํด๋ž˜์Šค๋“ค์„ ์‹ฌ๋ณผ๋ฆญ ๋ ˆํผ๋Ÿฐ์Šค๋ฅผ ํ†ตํ•ด ์ฐพ๊ณ  ๋กœ๋“œํ•œ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ํด๋ž˜์Šค๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋ฐฐ์น˜๋˜๊ณ  ์‹คํ–‰๋œ๋‹ค.

 

์˜ˆ์ œ

public class Main {
    public static void main(String[] args) {
        System.out.println("Hello, World!");
    }
}

 

  • ์„ค๋ช… : 'System.out.println' ๋ฉ”์„œ๋“œ๋Š” 'System' ํด๋ž˜์Šค์˜ ์‹ฌ๋ณผ๋ฆญ ๋ ˆํผ๋Ÿฐ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ JVM์ด ์‹คํ–‰ ์‹œ์ ์ด 'println' ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค.

2. ๋ฆฌํ”Œ๋ ‰์…˜(Reflection) APi

๋ฆฌํ”Œ๋ž™์…˜ API๋Š” ๋Ÿฐํƒ€์ž„ ์‹œ์ ์— ํด๋ž˜์Šค, ๋ฉ”์„œ๋“œ, ํ•„๋“œ ๋“ฑ์„ ๋™์ ์œผ๋กœ ํƒ์ƒ‰ํ•˜๊ณ  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ์ด๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์‹ฌ๋ณผ๋ฆญ ๋ ˆํผ๋Ÿฐ์Šค๋ฅผ ํ™œ์šฉํ•ด ๊ฐ์ฒด๋ฅผ ๋™์ ์œผ๋กœ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์˜ˆ์ œ

import java.lang.reflect.Method;

public class ReflectionExample {
    public void sayHello() {
        System.out.println("Hello from Reflection!");
    }

    public static void main(String[] args) {
        try {
            // ํด๋ž˜์Šค ์ด๋ฆ„์„ ์‚ฌ์šฉํ•˜์—ฌ ๋™์ ์œผ๋กœ ๋กœ๋“œ
            Class<?> clazz = Class.forName("ReflectionExample");
            
            // ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ
            Object instance = clazz.getDeclaredConstructor().newInstance();
            
            // ๋ฉ”์„œ๋“œ ์ฐพ๊ธฐ ๋ฐ ํ˜ธ์ถœ
            Method method = clazz.getMethod("sayHello");
            method.invoke(instance);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

 

  • ์„ค๋ช… : 'Class.forName'๋Š” 'ReflectionExample' ํด๋ž˜์Šค๋ฅผ ์‹ฌ๋ณผ๋ฆญ ๋ ˆํผ๋Ÿฐ์Šค๋กœ ๋กœ๋“œํ•˜๊ณ , ๋Ÿฐํƒ€์ž„์— ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค. 

 

3. ํ”„๋ ˆ์ž„์›Œํฌ์™€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ์˜ ํ™œ์šฉ

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

 

์˜ˆ์ œ

์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ๋Š” XML ์„ค์ •์ด๋‚˜ ์• ๋„ˆํ…Œ์ด์…˜์„ ํ†ตํ•ด ๋นˆ(Bean)์„ ์ •์˜ํ•˜๊ณ , ๋Ÿฐํƒ€์ž„ ์‹œ์ ์— ์‹ฌ๋ณผ๋ฆญ ๋ ˆํผ๋Ÿฐ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•ด๋‹น ํด๋ž˜์Šค๋ฅผ ์ธ์Šคํ„ด์Šคํ™”ํ•œ๋‹ค.

<bean id="myBean" class="com.example.MyClass"/>

 

  • ์„ค๋ช… : ์Šคํ”„๋ง์€ 'com.example.MyClass'๋ผ๋Š” ์‹ฌ๋ณผ๋ฆญ ๋ ˆํผ๋Ÿฐ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ 'MyClass'์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๊ด€๋ฆฌํ•œ๋‹ค.

 

์‹ฌ๋ณผ๋ฆญ ๋ ˆํผ๋Ÿฐ์Šค์™€ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ

์‹ฌ๋ณผ๋ฆญ ๋ ˆ๋ฒ„๋Ÿฐ์Šค๋Š” JVM์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ์™€๋„ ๋ฐ€์ ‘ํ•˜๊ฒŒ ๊ด€๋ จ์ด ์žˆ๋‹ค. JVM์€ ์‹ฌ๋ณผ๋ฆญ ๋ ˆํผ๋Ÿฐ์Šค๋ฅผ ์‚ฌ์šฉํ•ด ํด๋ž˜์Šค์™€ ๊ฐ์ฒด๋ฅผ ๋ฉ”๋ชจ๋ฆฌ ์•ˆ์— ์ ์ ˆํžˆ ๋ฐฐ์น˜ํ•˜๊ณ  ๊ด€๋ฆฌํ•œ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ์„ ์ตœ์ ํ™”ํ•˜๊ณ , ํ•„์š”ํ•˜์ง€ ์•Š์€ ์ž์›์„ ํ•ด์ œํ•ด ์„ฑ๋Šฅ์„ ์œ ์ง€ํ•œ๋‹ค.

1. ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜

์‹ฌ๋ณผ๋ฆญ ๋ ˆํผ๋Ÿฐ์Šค๋ฅผ ํ†ตํ•ด ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๊ฐ์ฒด๋ฅผ ์‹๋ณ„ํ•˜๊ณ , ๋ฉ”๋ชจ๋ฆฌ์—์„œ ํ•ด์ œํ•œ๋‹ค.

2. ํด๋ž˜์Šค ์–ธ๋กœ๋”ฉ

์‹ฌ๋ณผ๋ฆญ ๋ ˆํผ๋Ÿฐ์Šค๋ฅผ ํ†ตํ•ด ๋” ์ด์ƒ ์ฐธ์กฐ๋˜์ง€ ์•Š๋Š” ํด๋ž˜์Šค๋‚˜ ๋ฆฌ์†Œ์Šค๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ œ๊ฑฐํ•œ๋‹ค.

 

๊ฒฐ๋ก 

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

 


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

์‹ฌ๋ณผ๋ฆญ ๋ ˆํผ๋Ÿฐ์Šค์— ๋Œ€ํ•œ ์ถœ์ฒ˜

  1. Java Language Specification (JLS)
    • ๋‚ด์šฉ: JLS๋Š” Java์˜ ๋ฌธ๋ฒ•๊ณผ ๋™์ž‘ ์›๋ฆฌ๋ฅผ ์ •์˜ํ•˜๋Š” ๊ณต์‹ ๋ฌธ์„œ๋กœ, ์‹ฌ๋ณผ๋ฆญ ๋ ˆํผ๋Ÿฐ์Šค์— ๋Œ€ํ•œ ์ƒ์„ธํ•œ ์„ค๋ช…์„ ํฌํ•จํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์‹ฌ๋ณผ๋ฆญ ๋ ˆํผ๋Ÿฐ์Šค๋Š” ์ปดํŒŒ์ผ๋œ ๋ฐ”์ดํŠธ์ฝ”๋“œ๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ ๋Œ€์‹  ํด๋ž˜์Šค, ๋ฉ”์„œ๋“œ, ํ•„๋“œ์˜ ์ด๋ฆ„์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.
    • ์„ค๋ช…:
      • ์‹ฌ๋ณผ๋ฆญ ๋ ˆํผ๋Ÿฐ์Šค๋Š” ๋Ÿฐํƒ€์ž„ ์‹œ์ ์— ํ•ด์„(resolution) ๋˜์–ด ์‹ค์ œ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋กœ ๋ณ€ํ™˜๋ฉ๋‹ˆ๋‹ค.
      • ํด๋ž˜์Šค ํŒŒ์ผ ๋‚ด์—์„œ ์‹ฌ๋ณผ๋ฆญ ๋ ˆํผ๋Ÿฐ์Šค๋Š” **์ƒ์ˆ˜ ํ’€(constant pool)**์— ์ €์žฅ๋˜๋ฉฐ, ํ•„์š”ํ•  ๋•Œ JVM์— ์˜ํ•ด ํ•ด์„๋ฉ๋‹ˆ๋‹ค.
    • ๋งํฌ: Java Language Specification
  2. Java Virtual Machine Specification
    • ๋‚ด์šฉ: JVM ์‚ฌ์–‘์€ Java ๋ฐ”์ดํŠธ์ฝ”๋“œ์™€ JVM์˜ ๋™์ž‘์„ ์„ค๋ช…ํ•˜๋ฉฐ, ์‹ฌ๋ณผ๋ฆญ ๋ ˆํผ๋Ÿฐ์Šค๊ฐ€ JVM์—์„œ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌ๋˜๋Š”์ง€๋ฅผ ๋‹ค๋ฃน๋‹ˆ๋‹ค.
    • ์„ค๋ช…:
      • JVM์€ ์‹ฌ๋ณผ๋ฆญ ๋ ˆํผ๋Ÿฐ์Šค๋ฅผ ํ†ตํ•ด ํด๋ž˜์Šค์™€ ๊ฐ์ฒด์˜ ๊ตฌ์กฐ๋ฅผ ๋Ÿฐํƒ€์ž„์— ๋™์ ์œผ๋กœ ์—ฐ๊ฒฐ(binded)ํ•ฉ๋‹ˆ๋‹ค.
      • ์‹ฌ๋ณผ๋ฆญ ๋ ˆํผ๋Ÿฐ์Šค๋Š” ๋™์  ๋กœ๋”ฉ(dynamic loading) ๊ณผ ๋™์  ์—ฐ๊ฒฐ(dynamic linking) ์— ํ•ต์‹ฌ์ ์ธ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.
    • ๋งํฌ: Java Virtual Machine Specification
  3. "Inside the Java Virtual Machine" by Bill Venners
    • ๋‚ด์šฉ: ์ด ์ฑ…์€ JVM์˜ ๋‚ด๋ถ€ ๊ตฌ์กฐ๋ฅผ ์ƒ์„ธํžˆ ์„ค๋ช…ํ•˜๋ฉฐ, ์‹ฌ๋ณผ๋ฆญ ๋ ˆํผ๋Ÿฐ์Šค๊ฐ€ ์–ด๋–ป๊ฒŒ ๋ฉ”๋ชจ๋ฆฌ ์ฐธ์กฐ๋กœ ๋ณ€ํ™˜๋˜๋Š”์ง€๋ฅผ ๋‹ค๋ฃน๋‹ˆ๋‹ค.
    • ์„ค๋ช…:
      • ์‹ฌ๋ณผ๋ฆญ ๋ ˆํผ๋Ÿฐ์Šค๋Š” JVM์˜ ํด๋ž˜์Šค ๋กœ๋”(ClassLoader) ๋ฉ”์ปค๋‹ˆ์ฆ˜์— ์˜ํ•ด ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค.
      • ํด๋ž˜์Šค, ๋ฉ”์„œ๋“œ, ํ•„๋“œ์˜ ์ด๋ฆ„๊ณผ ํƒ€์ž… ์ •๋ณด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์‹ฌ๋ณผ๋ฆญ ๋ ˆํผ๋Ÿฐ์Šค๊ฐ€ ํ•ด์„๋ฉ๋‹ˆ๋‹ค.
    • ๋งํฌ: Inside the Java Virtual Machine on Amazon
  4. "Java Performance: The Definitive Guide" by Scott Oaks
    • ๋‚ด์šฉ: Java ์„ฑ๋Šฅ ์ตœ์ ํ™”์— ๊ด€ํ•œ ์ด ์ฑ…์€ ์‹ฌ๋ณผ๋ฆญ ๋ ˆํผ๋Ÿฐ์Šค๊ฐ€ ์„ฑ๋Šฅ์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ์„ ๋ถ„์„ํ•˜๊ณ , ํšจ์œจ์ ์ธ ํ•ด์„ ๋ฐฉ๋ฒ•์„ ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค.
    • ์„ค๋ช…:
      • ์‹ฌ๋ณผ๋ฆญ ๋ ˆํผ๋Ÿฐ์Šค์˜ ํ•ด์„์€ JVM ์ดˆ๊ธฐํ™” ์‹œ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์œผ๋ฉฐ, JIT(Just-In-Time) ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ด๋ฅผ ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
      • **ํด๋ž˜์Šค ๋ฐ์ดํ„ฐ ๊ณต์œ (Class Data Sharing)**์™€ ๊ฐ™์€ ๊ธฐ์ˆ ์„ ํ†ตํ•ด ์‹ฌ๋ณผ๋ฆญ ๋ ˆํผ๋Ÿฐ์Šค ํ•ด์„ ์‹œ๊ฐ„์„ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ๋งํฌ: Java Performance on Amazon
  5. "The Java Programming Language" by Ken Arnold, James Gosling, David Holmes
    • ๋‚ด์šฉ: ์ด ์ฑ…์€ Java์˜ ์ฐฝ์‹œ์ž ์ค‘ ํ•œ ๋ช…์ธ James Gosling์ด ์ €์ˆ ํ•œ ์ฑ…์œผ๋กœ, Java ์–ธ์–ด์˜ ๊นŠ์ด ์žˆ๋Š” ์ดํ•ด๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์‹ฌ๋ณผ๋ฆญ ๋ ˆํผ๋Ÿฐ์Šค์˜ ์—ญํ• ๊ณผ JVM์—์„œ์˜ ์ž‘๋™ ๋ฐฉ์‹์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.
    • ์„ค๋ช…:
      • ์‹ฌ๋ณผ๋ฆญ ๋ ˆํผ๋Ÿฐ์Šค๋Š” Java ํ”„๋กœ๊ทธ๋žจ์ด ๋…๋ฆฝ์ ์ธ ํ”Œ๋žซํผ์—์„œ ์‹คํ–‰๋  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋ฉฐ, ๋ฐ”์ดํŠธ์ฝ”๋“œ์˜ ์ด์‹์„ฑ์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.
      • ์‹ฌ๋ณผ๋ฆญ ๋ ˆํผ๋Ÿฐ์Šค๋Š” ๋ฐ”์ดํŠธ์ฝ”๋“œ ๊ฒ€์ฆ ๋‹จ๊ณ„์—์„œ ์ค‘์š”ํ•˜๊ฒŒ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
    • ๋งํฌ: The Java Programming Language on Amazon