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

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

[Java] final ํด๋ž˜์Šค๋ฅผ ์„ ์–ธํ•˜๊ฒŒ ๋งŒ๋“  ์ด์œ 

์ถœ์ฒ˜

ChatGPT


Java์—์„œ final ํด๋ž˜์Šค๋ฅผ ์„ ์–ธํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“  ์ด์œ 

1. ๋ถˆ๋ณ€์„ฑ ๋ณด์žฅ

final ํด๋ž˜์Šค๋ฅผ ์„ ์–ธํ•˜๋ฉด ํ•ด๋‹น ํด๋ž˜์Šค๋ฅผ ์ƒ์†ํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ, ํ•ด๋‹น ํด๋ž˜์Šค์˜ ๊ตฌ์กฐ์™€ ๋™์ž‘์ด ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๋Š”๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ํด๋ž˜์Šค์˜ ๋ถˆ๋ณ€์„ฑ์„ ๋ณด์žฅํ•˜๊ณ , ๊ฐ์ฒด์˜ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

2. ์•ˆ์ „ํ•œ ์„ค๊ณ„

final ํด๋ž˜์Šค๋Š” ๋” ์ด์ƒ ์„œ๋ธŒํด๋ž˜์Šค์— ์˜ํ•ด ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ, ๊ธฐ์กด์˜ ํด๋ž˜์Šค ์„ค๊ณ„๊ฐ€ ์•ˆ์ „ํ•˜๊ฒŒ ์œ ์ง€๋œ๋‹ค. ์ด๋กœ ์ธํ•ด ํด๋ž˜์Šค๊ฐ€ ์™ธ๋ถ€์˜ ์˜ํ–ฅ ์—†์ด ์„ค๊ณ„ ์˜๋„๋Œ€๋กœ ๋™์ž‘ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

3. ์„ฑ๋Šฅ ์ตœ์ ํ™”

final ํด๋ž˜์Šค๋Š” ์ƒ์†์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— JVM์€ ํ•ด๋‹น ํด๋ž˜์Šค์˜ ๋ฉ”์†Œ๋“œ์™€ ํ•„๋“œ์— ๋Œ€ํ•ด ๋” ๋งŽ์€ ์ตœ์ ํ™”๋ฅผ ํ•  ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, final ํด๋ž˜์Šค์˜ ๋ฉ”์†Œ๋“œ๋Š” ์˜ค๋ฒ„๋ผ์ด๋”ฉ๋  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ, ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ์— ๋Œ€ํ•ด ๋”์šฑ ํšจ์œจ์ ์ธ ์ธ๋ผ์ธ ์ตœ์ ํ™”๋ฅผ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

4. ์Šค๋ ˆ๋“œ ์•ˆ์ „์„ฑ

final ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ, ํ•ด๋‹น ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋Š” ์Šค๋ ˆ๋“œ ์•ˆ์ „์„ฑ์„ ๋ณด๋‹ค ์‰ฝ๊ฒŒ ๋ณด์žฅํ•  ์ˆ˜ ์žˆ๋‹ค. ์ƒ์†์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ, ํด๋ž˜์Šค์˜ ์ƒํƒœ์™€ ๋™์ž‘์ด ์˜ˆ์ธก ๊ฐ€๋Šฅํ•˜๋ฉฐ, ๋‹ค๋ฅธ ํด๋ž˜์Šค์—์„œ์˜ ๋น„์ •์ƒ์ ์ธ ์ƒํƒœ ๋ณ€๊ฒฝ์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

5. ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๋””์ž์ธ

Java์˜ ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—๋Š” final ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, String, Integer, Double ๋“ฑ๊ณผ ๊ฐ™์€ ํด๋ž˜์Šค๋Š” final๋กœ ์„ ์–ธ๋˜์–ด ์žˆ๋‹ค. ์ด๋Š” ์ด๋Ÿฌํ•œ ํด๋ž˜์Šค๋“ค์ด ๋ณ€ํ•˜์ง€ ์•Š๋„๋ก ํ•˜์—ฌ, ์•ˆ์ •์„ฑ๊ณผ ์ผ๊ด€์„ฑ์„ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•œ ์„ค๊ณ„ ๊ฒฐ์ •์ด๋‹ค.

 

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

// Final ํด๋ž˜์Šค๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.
public final class ImmutableClass {
    private final int value;

    public ImmutableClass(int value) {
        this.value = value;
    }

    public int getValue() {
        return value;
    }

    // ์ด ํด๋ž˜์Šค๋Š” ์ƒ์†๋  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
}

// ๋‹ค์Œ์€ ์ปดํŒŒ์ผ ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.
// class SubClass extends ImmutableClass {
//     // ์ปดํŒŒ์ผ ์˜ค๋ฅ˜: Cannot subclass final class ImmutableClass
// }

public class Main {
    public static void main(String[] args) {
        ImmutableClass obj = new ImmutableClass(10);
        System.out.println("Value: " + obj.getValue());
    }
}

 

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

 

๊ฒฐ๋ก 

final ํด๋ž˜์Šค๋ฅผ ์„ ์–ธํ•˜๋Š” ๊ฒƒ์€ ํด๋ž˜์Šค์˜ ๋ถˆ๋ณ€์„ฑ์„ ๋ณด์žฅํ•˜๊ณ , ์„ค๊ณ„์˜ ์•ˆ์ „์„ฑ์„ ๋†’์ด๋ฉฐ, JVM์˜ ์„ฑ๋Šฅ ์ตœ์ ํ™”๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๊ณ , ์Šค๋ ˆ๋“œ ์•ˆ์ „์„ฑ์„ ์ง€์›ํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ์ด์œ ๋กœ final ํด๋ž˜์Šค๋Š” ํŠน์ • ํด๋ž˜์Šค์˜ ์ƒ์†์„ ๋ฐฉ์ง€ํ•˜๊ณ , ์•ˆ์ •์ ์ด๊ณ  ์˜ˆ์ธก ๊ฐ€๋Šฅํ•œ ๋™์ž‘์„ ์ œ๊ณตํ•˜๋Š” ๋ฐ ์œ ์šฉํ•˜๋‹ค.

 


ChatGPT ๊ธ€์˜ ์ถœ์ฒ˜

์ œ๊ฐ€ ์ œ๊ณตํ•œ final ํด๋ž˜์Šค์™€ ๊ด€๋ จ๋œ ์„ค๋ช…์€ ๋‹ค์–‘ํ•œ ์ž๋ฐ” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ด€๋ จ ์„œ์ ๊ณผ ์˜จ๋ผ์ธ ์ž๋ฃŒ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ํ•œ ์ผ๋ฐ˜์ ์ธ ์„ค๋ช…์ž…๋‹ˆ๋‹ค. ํŠน์ • ์ถœ์ฒ˜๋ฅผ ์ง์ ‘ ์ฐธ์กฐํ•  ์ˆ˜๋Š” ์—†์ง€๋งŒ, ๋‹ค์Œ์€ ๊ด€๋ จ๋œ ๋‚ด์šฉ์„ ์ฐพ์„ ์ˆ˜ ์žˆ๋Š” ๋ช‡ ๊ฐ€์ง€ ๊ถŒ์œ„ ์žˆ๋Š” ์ž๋ฃŒ๋“ค์ž…๋‹ˆ๋‹ค:

  1. ์ž๋ฐ” ๊ณต์‹ ๋ฌธ์„œ:
    • Oracle์˜ ์ž๋ฐ” ๊ณต์‹ ๋ฌธ์„œ์—์„œ๋Š” final ํ‚ค์›Œ๋“œ์™€ ๊ด€๋ จ๋œ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. Oracle Java Documentation์—์„œ final ํ‚ค์›Œ๋“œ์˜ ์‚ฌ์šฉ๋ฒ•๊ณผ ์˜๋ฏธ๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  2. "Effective Java" by Joshua Bloch:
    • ์ด ์ฑ…์€ ์ž๋ฐ”์˜ ๋ชจ๋ฒ” ์‚ฌ๋ก€๋ฅผ ์„ค๋ช…ํ•˜๋ฉฐ, final ํด๋ž˜์Šค์™€ ๋ฉ”์„œ๋“œ์˜ ์‚ฌ์šฉ ์ด์œ ์™€ ์ด์ ์„ ์„ค๋ช…ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
  3. "Java: The Complete Reference" by Herbert Schildt:
    • ์ด ์ฑ…์€ ์ž๋ฐ”์˜ ๋‹ค์–‘ํ•œ ๊ฐœ๋…์„ ํฌ๊ด„์ ์œผ๋กœ ๋‹ค๋ฃจ๋ฉฐ, final ํด๋ž˜์Šค์™€ ๊ทธ ์‚ฌ์šฉ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.
  4. Stack Overflow์™€ ๊ฐ™์€ ๊ฐœ๋ฐœ์ž ์ปค๋ฎค๋‹ˆํ‹ฐ:
    • ์‹ค์ œ ๊ฐœ๋ฐœ์ž๋“ค์ด final ํด๋ž˜์Šค์™€ ๊ด€๋ จ๋œ ์งˆ๋ฌธ๊ณผ ๋‹ต๋ณ€์„ ์ œ๊ณตํ•˜๋Š” ํฌ๋Ÿผ์ž…๋‹ˆ๋‹ค. Stack Overflow์—์„œ final ํด๋ž˜์Šค์— ๋Œ€ํ•œ ๋‹ค์–‘ํ•œ ๋…ผ์˜์™€ ์‹ค๋ฌด์  ์กฐ์–ธ์„ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ์ž๋ฃŒ๋“ค์€ ์ž๋ฐ”์—์„œ final ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ์™€ ๊ทธ ์žฅ์ ์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์„ค๋ช…ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ง์ ‘์ ์œผ๋กœ ํ™•์ธํ•˜๊ณ  ์‹ถ์€ ๋‚ด์šฉ์ด ์žˆ๋‹ค๋ฉด, ์ด๋Ÿฌํ•œ ์„œ์ ์ด๋‚˜ ๊ณต์‹ ๋ฌธ์„œ๋ฅผ ์ฐธ์กฐํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.