Hamutaro - Hamtaro 4

Backend/Java

[JAVA] final ν‚€μ›Œλ“œμ— λŒ€ν•΄μ„œ

carsumin 2024. 6. 25. 17:51

 

final ν‚€μ›Œλ“œμ˜ μ‚¬μš©

1. final λ³€μˆ˜

   - μ΄ˆκΈ°ν™” ν›„ 값을 λ³€κ²½ν•  수 μ—†λŠ” λ³€μˆ˜λ₯Ό μ„ μ–Έν•  λ•Œ μ‚¬μš©. μƒμˆ˜μ™€ μœ μ‚¬ν•œ κ°œλ…

final int MAX_HEIGHT = 100;
MAX_HEIGHT = 200; // 컴파일 μ—λŸ¬ λ°œμƒ

 

  * ν•„μš”ν•œ 이유

   - μƒμˆ˜ μ„ μ–Έ : μƒμˆ˜ 값을 μ„ μ–Έν•˜μ—¬ μ½”λ“œμ˜ 가독성을 높이고 μ‹€μˆ˜λ₯Ό λ°©μ§€

   - λ³΄μ•ˆ 및 무결성 : ν•œ 번 μ΄ˆκΈ°ν™”λœ 값이 λ³€κ²½λ˜μ§€ μ•ŠμŒμ„ 보μž₯ν•˜μ—¬ 데이터 무결성 μœ μ§€

 

  * final둜 μ„ μ–Έν•˜μ§€ μ•ŠμœΌλ©΄ λ°œμƒν•˜λŠ” 문제

    - μ€‘μš”ν•œ 값이 변경될 수 μžˆμ–΄, ν”„λ‘œκ·Έλž¨μ˜ 둜직이 κΉ¨μ§€κ±°λ‚˜ μ˜ˆμƒμΉ˜λͺ»ν•œ λ¬Έμ œκ°€ λ°œμƒν•  수 μžˆλ‹€

 

2. final λ©”μ„œλ“œ

    - final λ©”μ„œλ“œλŠ” ν•˜μœ„ ν΄λž˜μŠ€μ—μ„œ μ˜€λ²„λΌμ΄λ“œν•  수 μ—†λŠ” λ©”μ„œλ“œλ₯Ό μ •μ˜ν•  λ•Œ μ‚¬μš©

class Parent {
    public final void display() {
        System.out.println("This is a final method.");
    }
}

class Child extends Parent {
    public void display() { // 컴파일 μ—λŸ¬ λ°œμƒ
        System.out.println("Trying to override.");
    }
}

 

  * ν•„μš”ν•œ 이유

    - λ³΄μ•ˆ 및 무결성 : μ€‘μš”ν•œ λ©”μ„œλ“œμ˜ κ΅¬ν˜„μ„ ν•˜μœ„ ν΄λž˜μŠ€μ—μ„œ λ³€κ²½ν•˜μ§€ λͺ»ν•˜λ„둝 λ§‰λŠ”λ‹€

    - API 섀계 : 외뢀에 μ œκ³΅λ˜λŠ” APIμ—μ„œ νŠΉμ • λ©”μ„œλ“œμ˜ λ™μž‘μ„ 보μž₯ν•  ν•„μš”κ°€ μžˆμ„ λ•Œ μ‚¬μš©

 

  * final둜 μ„ μ–Έν•˜μ§€ μ•ŠμœΌλ©΄ λ°œμƒν•˜λŠ” 문제

    - ν•˜μœ„ ν΄λž˜μŠ€μ—μ„œ λ©”μ„œλ“œλ₯Ό μ˜€λ²„λΌμ΄λ“œν•˜μ—¬ 예기치 μ•Šμ€ λ™μž‘μ„ ν•  수 있음

 

3. final 클래슀

    - final ν΄λž˜μŠ€λŠ” 상속할 수 μ—†λŠ” 클래슀λ₯Ό μ •μ˜ν•  λ•Œ μ‚¬μš©

final class ImmutableClass {
    // 클래슀 λ‚΄μš©
}

class SubClass extends ImmutableClass { // 컴파일 μ—λŸ¬ λ°œμƒ
    // μ„œλΈŒν΄λž˜μŠ€ λ‚΄μš©
}

 

   * ν•„μš”ν•œ 이유

     - λ³΄μ•ˆ 및 무결성 : 클래슀의 λ™μž‘μ΄ λ³€κ²½λ˜μ§€ μ•Šλ„λ‘ 보μž₯

     - λΆˆλ³€ 객체 : String 클래슀처럼 λΆˆλ³€ 객체λ₯Ό κ΅¬ν˜„ν•  λ•Œ μ‚¬μš©

 

   * final둜 μ„ μ–Έν•˜μ§€ μ•ŠμœΌλ©΄ λ°œμƒν•  문제

     - ν΄λž˜μŠ€κ°€ μƒμ†λ˜μ–΄ μ˜λ„ν•˜μ§€ μ•Šμ€ λ°©μ‹μœΌλ‘œ λ™μž‘μ΄ 변경될 수 있음

 

final ν‚€μ›Œλ“œλŠ” μžλ°”μ—μ„œ λ³€μˆ˜λ₯Ό μƒμˆ˜λ‘œ λ§Œλ“€κ³  λ©”μ„œλ“œμ™€ 클래슀λ₯Ό μ˜€λ²„λΌμ΄λ“œ 및 상속할 수 μ—†λ„λ‘ν•˜μ—¬ ν”„λ‘œκ·Έλž¨μ˜ μ•ˆμ •μ„±κ³Ό 일관성을 μœ μ§€ν•˜λŠ” 데 μ€‘μš”ν•œ 역할을 ν•œλ‹€. final둜 μ„ μ–Έν•˜μ§€ μ•ŠμœΌλ©΄ μ€‘μš”ν•œ κ°’μ΄λ‚˜ λ©”μ„œλ“œμ˜ κ΅¬ν˜„μ΄ 변경될 κ°€λŠ₯μ„± μžˆλ‹€. final ν‚€μ›Œλ“œλ₯Ό 적절히 μ‚¬μš©ν•˜μ—¬ μ½”λ“œμ˜ μ•ˆμ •μ„±κ³Ό μœ μ§€λ³΄μˆ˜μ„±μ„ λ†’μ΄λŠ” 것이 μ’‹λ‹€.