λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

빈 ꡬ멍 μ±„μš°κΈ°

[Java] μ§€μ—­λ³€μˆ˜μ— μ΄ˆκΈ°ν™”κ°€ ν•„μˆ˜μΈ 이유

좜처

ChatGPT


지역 λ³€μˆ˜κ°€ μ΄ˆκΈ°ν™”κ°€ ν•„μš”ν•œ μ΄μœ λŠ” 크게 두 κ°€μ§€λ‘œ μš”μ•½ν•  수 μžˆλ‹€: μ•ˆμ •μ„±κ³Ό λͺ…확성이닀. 지역 λ³€μˆ˜λŠ” νŠΉμ • λ©”μ„œλ“œλ‚˜ 블둝 λ‚΄μ—μ„œλ§Œ μ‘΄μž¬ν•˜λŠ” λ³€μˆ˜λ‘œ, κ·Έ λ²”μœ„λ₯Ό λ²—μ–΄λ‚˜λ©΄ μ ‘κ·Όν•  수 μ—†λ‹€. μ΄λŸ¬ν•œ νŠΉμ„± λ•Œλ¬Έμ— 지역 λ³€μˆ˜λŠ” μ΄ˆκΈ°ν™”ν•˜μ§€ μ•Šκ³  μ‚¬μš©ν•˜λ €κ³  ν•  경우 예기치 μ•Šμ€ λ™μž‘μ΄λ‚˜ μ—λŸ¬λ₯Ό λ°œμƒμ‹œν‚¬ 수 μžˆλ‹€.

 

1. μ•ˆμ •μ„±

λ©”λͺ¨λ¦¬μ˜ μ“°λ ˆκΈ° κ°’ 방지

지역 λ³€μˆ˜λŠ” λ©”λͺ¨λ¦¬μ— 선언될 λ•Œ μ΄ˆκΈ°ν™”λ˜μ§€ μ•ŠμœΌλ©΄, ν•΄λ‹Ή λ©”λͺ¨λ¦¬ μœ„μΉ˜μ— 이전에 μ‚¬μš©λœ μ“°λ ˆκΈ° κ°’(garbage value)이 λ‚¨μ•„μžˆμ„ 수 μžˆλ‹€. λ§Œμ•½ μ΄λŸ¬ν•œ μ“°λ ˆκΈ° 값을 μ‚¬μš©ν•˜κ²Œ λœλ‹€λ©΄, 예기치 μ•Šμ€ λ™μž‘μ΄λ‚˜ 버그가 λ°œμƒν•  수 μžˆλ‹€.

 

 

μ˜ˆμ‹œ

public class UninitializedVariable {
    public static void main(String[] args) {
        int x;
        // μ΄ˆκΈ°ν™”λ˜μ§€ μ•Šμ€ 지역 λ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜λ €κ³  μ‹œλ„ν•  λ•Œ
        // System.out.println(x); // 컴파일 였λ₯˜ λ°œμƒ
    }
}

 

μœ„ μ½”λ“œμ—μ„œ 'x'λŠ” μ΄ˆκΈ°ν™”λ˜μ§€ μ•Šμ•˜μœΌλ―€λ‘œ 컴파일 μ˜€ν“¨κ°€ λ°œμƒν•œλ‹€. 이둜 인해 ν”„λ‘œκ·Έλž¨μ˜ 예츑 λΆˆκ°€λŠ₯ν•œ λ™μž‘μ„ 방지할 수 μžˆλ‹€.

컴파일 νƒ€μž„ μ—λŸ¬

μžλ°” μ»΄νŒŒμΌλŸ¬λŠ” μ΄ˆκΈ°ν™”λ˜μ§€ μ•Šμ€ 지역 λ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜λŠ” 것을 μ—„κ²©ν•˜κ²Œ λ°©μ§€ν•œλ‹€. μ΄λŠ” ν”„λ‘œκ·Έλž¨μ˜ μ•ˆμ „μ„±μ„ λ†’μ΄λŠ” μ‘°μΉ˜μ΄λ‹€. μ΄ˆκΈ°ν™”λ˜μ§€ μ•Šμ€ λ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜λ©΄ 컴파일 νƒ€μž„ μ—λŸ¬λ₯Ό λ°œμƒμ‹œμΌœ, ν”„λ‘œκ·Έλž¨μ΄ μ‹€ν–‰λ˜κΈ° 전에 문제λ₯Ό λ°œκ²¬ν•  수 있게 ν•œλ‹€.

 

μ˜ˆμ‹œ

public class SafeInitialization {
    public static void main(String[] args) {
        int number;
        // numberλ₯Ό μ΄ˆκΈ°ν™”ν•˜μ§€ μ•Šκ³  μ‚¬μš©ν•˜λ €κ³  μ‹œλ„ν•  λ•Œ
        // int result = number + 10; // 컴파일 였λ₯˜ λ°œμƒ
    }
}

 

이 μ½”λ“œμ—μ„œ 'number'λŠ” μ΄ˆκΈ°ν™”λ˜μ§€ μ•Šμ•˜μœΌλ©°, 이둜 인해 컴파일 νƒ€μž„ μ—λŸ¬κ°€ λ°œμƒν•œλ‹€. μ΄λŠ” μ‹€ν–‰μ‹œ 예기치 μ•Šμ€ λ™μž‘μ„ λ°©μ§€ν•˜λŠ” 데 도움이 λœλ‹€.

 

2. λͺ…ν™•μ„±

μ½”λ“œμ˜ λͺ…ν™•μ„±κ³Ό 가독성

지역 λ³€μˆ˜λ₯Ό μ΄ˆκΈ°ν™”ν•˜λ©΄, λ³€μˆ˜μ˜ 초기 μƒνƒœκ°€ λͺ…ν™•ν•΄μ Έ μ½”λ“œλ₯Ό 읽고 μœ μ§€λ³΄μˆ˜ν•˜κΈ° μ‰¬μ›Œμ§„λ‹€. μ΄λŠ” ν”„λ‘œκ·Έλž¨μ˜ 가독성을 높이고, μ½”λ“œ 리뷰 및 μœ μ§€λ³΄μˆ˜ κ³Όμ •μ—μ„œ μ‹€μˆ˜λ₯Ό μ€„μ΄λŠ” 데 도움이 λœλ‹€.

 

μ˜ˆμ‹œ

public class InitializationExample {
    public static void main(String[] args) {
        int count = 0; // λͺ…ν™•ν•˜κ²Œ μ΄ˆκΈ°ν™”λœ λ³€μˆ˜
        for (int i = 0; i < 10; i++) {
            count += i;
        }
        System.out.println("Total count: " + count);
    }
}

 

μœ„ μ½”λ“œμ—μ„œ 'count'λŠ” 0으둜 λͺ…ν™•ν•˜κ²Œ μ΄ˆκΈ°ν™”λ˜μ–΄ 있으며, μ΄λŠ” ν”„λ‘œκ·Έλž¨ 둜직의 μ˜λ„λ₯Όλͺ…ν™•νžˆ ν•œλ‹€.

 

μ΄ˆκΈ°ν™”μ˜ μ˜λ„ ν‘œν˜„

λ³€μˆ˜λ₯Ό λͺ…μ‹œμ μœΌλ‘œ μ΄ˆκΈ°ν™”ν•˜λŠ” 것은 κ°œλ°œμžκ°€ μ˜λ„μ μœΌλ‘œ 초기 값을 μ„€μ •ν•˜κ³  μžˆλ‹€λŠ” 것을 보여쀀닀. μ΄λŠ” μ½”λ“œμ˜ μ˜λ„λ₯Ό λͺ…ν™•νžˆ λ“œλŸ¬λ‚΄μ–΄, λ‹€λ₯Έ κ°œλ°œμžκ°€ μ½”λ“œλ₯Ό μ΄ν•΄ν•˜λŠ” 데 도움을 μ€€λ‹€.

 

μ˜ˆμ‹œ

public class GameSettings {
    public static void main(String[] args) {
        boolean isGameOver = false; // 초기 μƒνƒœλ₯Ό λͺ…μ‹œμ μœΌλ‘œ ν‘œν˜„
        if (!isGameOver) {
            System.out.println("Game is still running...");
        }
    }
}

 

μ—¬κΈ°μ„œ 'isGameOver'λŠ” 'false'둜 μ΄ˆκΈ°ν™”λ˜μ–΄ κ²Œμž„μ˜ 초기 μƒνƒœλ₯Ό λͺ…ν™•νžˆ ν‘œν˜„ν•œλ‹€.

 

지역 λ³€μˆ˜μ˜ μ΄ˆκΈ°ν™” κ·œμΉ™

μžλ°”μ—μ„œλŠ” 지역 λ³€μˆ˜μ˜ μ΄ˆκΈ°ν™”κ°€ μ—„κ²©ν•˜κ²Œ μš”κ΅¬λœλ‹€. 클래슀의 μΈμŠ€ν„΄μŠ€ λ³€μˆ˜(ν•„λ“œ)μ™€λŠ” 달리, 지역 λ³€μˆ˜λŠ” μžλ™μœΌλ‘œ μ΄ˆκΈ°ν™”λ˜μ§€ μ•ŠμœΌλ―€λ‘œ, κ°œλ°œμžκ°€ λͺ…μ‹œμ μœΌλ‘œ μ΄ˆκΈ°ν™”ν•΄μ•Ό ν•œλ‹€. 이 κ·œμΉ™μ€ 특히 κΈ°λ³Έ 데이터 νƒ€μž…μ˜ κ²½μš°μ— λ”μš± μ€‘μš”ν•˜λ‹€. 예λ₯Ό λ“€μ–΄, μ •μˆ˜ν˜• λ³€μˆ˜λŠ” '0'으둜 μ΄ˆκΈ°ν™”λ˜μ§€ μ•ŠμœΌλ©°, μ°Έμ‘°ν˜• λ³€μˆ˜λ„ 'null'둜 μ΄ˆκΈ°ν™”λ˜μ§€ μ•ŠλŠ”λ‹€.

 

μ˜ˆμ‹œ

public class InitializationRules {
    public static void main(String[] args) {
        int uninitialized; // μ΄ˆκΈ°ν™”λ˜μ§€ μ•Šμ€ 지역 λ³€μˆ˜

        // if (uninitialized == 0) { // 컴파일 였λ₯˜ λ°œμƒ
        //     System.out.println("Uninitialized is zero.");
        // }
    }
}

 

μ΄ˆκΈ°ν™”μ˜ μœ μš©μ„± : μžλ™ μ΄ˆκΈ°ν™”μ™€ λͺ…μ‹œμ  μ΄ˆκΈ°ν™”

μžλ™ μ΄ˆκΈ°ν™”

클래슀의 μΈμŠ€ν„΄μŠ€ λ³€μˆ˜λŠ” μ„ μ–Έλ§ŒμœΌλ‘œ μžλ™ μ΄ˆκΈ°ν™”λœλ‹€. κΈ°λ³Έκ°’μœΌλ‘œ μ΄ˆκΈ°ν™”λ˜μ–΄ λ©”λͺ¨λ¦¬ μ•ˆμ „μ„±μ„ ν™•λ³΄ν•œλ‹€. 예λ₯Ό λ“€μ–΄, 'int'λŠ” ''0', 'boolean'은 'false', μ°Έμ‘°ν˜• λ³€μˆ˜λŠ” 'null'둜 μ΄ˆκΈ°ν™”λœλ‹€.

λͺ…μ‹œμ  μ΄ˆκΈ°ν™”

지역 λ³€μˆ˜λŠ” λͺ…μ‹œμ  μ΄ˆκΈ°ν™”λ₯Ό μš”κ΅¬ν•œλ‹€. μ΄ˆκΈ°κ°’ 섀정을 톡해 λ³€μˆ˜μ˜ μ˜λ„λ₯Ό λͺ…ν™•νžˆ ν‘œν˜„ν•˜κ³ , μ•ˆμ „ν•œ ν”„λ‘œκ·Έλž¨ 싀행을 보μž₯ν•œλ‹€.

 

μ˜ˆμ‹œ

public class DefaultInitialization {
    int defaultInt; // μžλ™μœΌλ‘œ 0으둜 μ΄ˆκΈ°ν™”
    boolean defaultBool; // μžλ™μœΌλ‘œ false둜 μ΄ˆκΈ°ν™”

    public void displayDefaults() {
        System.out.println("Default int: " + defaultInt);
        System.out.println("Default boolean: " + defaultBool);
    }

    public static void main(String[] args) {
        DefaultInitialization di = new DefaultInitialization();
        di.displayDefaults();
    }
}

 

좜λ ₯

Default int: 0
Default boolean: false

 

κ²°λ‘ 

지역 λ³€μˆ˜λ₯Ό μ΄ˆκΈ°ν™”ν•˜λŠ” 것은 ν”„λ‘œκ·Έλž¨μ˜ μ•ˆμ •μ„±, λͺ…ν™•μ„±, μ•ˆμ „μ„±μ„ 보μž₯ν•˜κΈ° μœ„ν•œ μ€‘μš”ν•œ 관행이닀. μ΄ˆκΈ°ν™”λ₯Ό 톡해 예기치 μ•Šμ€ λ™μž‘μ„ λ°©μ§€ν•˜κ³ , μ½”λ“œμ˜ μ˜λ„λ₯Ό λͺ…ν™•νžˆ ν‘œν˜„ν•˜μ—¬ 가독성을 λ†’μ΄λŠ” 데 κΈ°μ—¬ν•œλ‹€. 이λ₯Ό 톡해 κ°œλ°œμžλŠ” 보닀 μ‹ λ’°ν•  수 μžˆλŠ” μ½”λ“œλ₯Ό μž‘μ„±ν•  수 μžˆλ‹€.