๐Ÿ“š[Java] ๋Ÿฐํƒ€์ž„์—๋Ÿฌ(Runtime Error)

ํ…ํ…ยท2025๋…„ 4์›” 17์ผ

์ œ๋„ค๋ฆญ์— ๋Œ€ํ•œ ํ•™์Šต ์ค‘ ์ƒ๊ธด ์˜๋ฌธ

์ œ๋„ค๋ฆญ์„ ๊ณต๋ถ€ํ•˜๋ฉด์„œ ํ•œ ๊ฐ€์ง€ ์˜๋ฌธ์ด ์ƒ๊ฒผ๋‹ค.
"ํƒ€์ž… ์•ˆ์ •์„ฑ์„ ๋ณด์žฅํ•œ๋‹ค"๋Š” ๋ง์€ ๊ณผ์—ฐ ๋ฌด์—‡์„ ์˜๋ฏธํ•˜๋Š” ๊ฑธ๊นŒ?
์ฒ˜์Œ์—๋Š” ์ด ๋ง์ด ์ข€ ๋ง‰์—ฐํ•˜๊ฒŒ ๋“ค๋ ธ๊ณ  ๊ทธ ์˜๋ฌธ์€ ๊ผฌ๋ฆฌ์— ๊ผฌ๋ฆฌ๋ฅผ ๋ฌผ๊ณ  ์ด์–ด์ ธ
๋Ÿฐํƒ€์ž„์—๋Ÿฌ ์— ๋Œ€ํ•ด ๊ณต๋ถ€ํ•˜๊ฒŒ ๋˜๋Š” ๊ณ„๊ธฐ๊ฐ€ ๋˜์—ˆ๋‹ค.


์ œ๋„ค๋ฆญ ์‚ฌ์šฉ ์˜ˆ์‹œ

//์ œ๋„ค๋ฆญ ํด๋ž˜์Šค
public class GenericBox<T> {
    private T item;

    public GenericBox(T item){
        this.item = item;
    }

    public T getItem() {
        return this.item;
    }
}
//๋ฉ”์ธ ํด๋ž˜์Šค
public class Main {
    public static void main(String[] args) {
      //์ œ๋„ค๋ฆญ์€ ์ฐธ์กฐํ˜•(Reference Type)๋งŒ ํ—ˆ์šฉํ•œ๋‹ค.(๊ธฐ๋ณธํ˜• Primitive Type์€ ํ—ˆ์šฉํ•˜์ง€ ์•Š์Œ)
      //๊ธฐ๋ณธํ˜•์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๋Œ€์‘๋˜๋Š” ๋ž˜ํผ ํด๋ž˜์Šค๋ฅผ ํƒ€์ž… ์ธ์ž๋กœ ๋„ฃ์–ด์•ผ ํ•œ๋‹ค.
      //(์˜ˆ: int โ†’ Integer, double โ†’ Double ๋“ฑ / String์€ ์• ์ดˆ์— ์ฐธ์กฐํ˜•์ด๋ฏ€๋กœ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅ)
      GenericBox<String> strGBox = new GenericBox<>("item1");
      GenericBox<Integer> intGBox = new GenericBox<>(100);
      GenericBox<Double> doubleGBox = new GenericBox<>(1.5);

      //ํƒ€์ž… ์•ˆ์ •์„ฑ ๋ณด์žฅ
      //์ œ๋„ค๋ฆญ ์ธ์Šคํ„ด์Šค๋Š” ๋‹ค์šด์บ์ŠคํŒ…์„ ์ž๋™์œผ๋กœ ์ง„ํ–‰ํ•ด์ค€๋‹ค.
      String str1 = strGBox.getItem();
      System.out.println("str1 = " + str1);
      Object num1 = intGBox.getItem();
      System.out.println("num1 = " + num1);
}

์—ฌ๊ธฐ๊นŒ์ง€๋Š” ์ผ๋ฐ˜์ ์ธ ์ œ๋„ค๋ฆญ์˜ ์‚ฌ์šฉ๋ฒ•์„ ์„ค๋ช…ํ•˜๋Š” ์˜ˆ์‹œ์ด๋‹ค.
๊ทธ๋Ÿฐ๋ฐ ์•„๋ž˜์ฒ˜๋Ÿผ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค๋ฉด ์–ด๋–จ๊นŒ? ๋‚ด ์˜๋ฌธ์ ์€ ์ด ๋ถ€๋ถ„์—์„œ ์‹œ์ž‘ํ•œ๋‹ค.

Integer num2 = strGBox.getItem(); //์ปดํŒŒ์ผ ์—๋Ÿฌ item์€ String ํƒ€์ž…

๋ฌผ๋ก  ํ•ด๋‹น ์ƒํ™ฉ์€ IDE ๊ฐ€ ์˜ค๋ฅ˜๋ฅผ ์บ์น˜ํ•ด์ฃผ๊ณ  ์‹คํ–‰์‹œ ์ปดํŒŒ์ผ ์—๋Ÿฌ๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค.
ํ•˜์ง€๋งŒ ํƒ€์ž… ๋ถˆ์ผ์น˜ ์‹œ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š”๊ฑด ๊ธฐ์กด์˜ ํด๋ž˜์Šค์™€ ๋™์ผํ•œ๋ฐ ์ œ๋„ค๋ฆญ์„ ์‚ฌ์šฉํ•˜๋ฉด์„œ ์–ป๋Š”๋‹ค๋Š” ํƒ€์ž… ์•ˆ์ •์„ฑ ๋ณด์žฅ์ด๋ผ๋Š” ๋ง์ด ๋ฌด์Šจ ์˜๋ฏธ์ธ์ง€ ๊ถ๊ธˆํ–ˆ๋‹ค.
์ด๋Ÿฐ ์˜๋ฌธ์„ ๊ฐ–๊ณ  ๊ฒ€์ƒ‰์„ ํ•˜๋‹ค ๋ณด๋‹ˆ 'ํƒ€์ž… ์•ˆ์ •์„ฑ ๋ณด์žฅ' ์ด๋ผ๋Š” ๋ง์ด ์ปดํŒŒ์ผ ํƒ€์ž„์— ์—๋Ÿฌ๋ฅผ ์žก์•„์ฃผ๋Š” ๊ฒƒ์ด๋ผ๋Š” ์‚ฌ์‹ค์„ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค.
์ปดํŒŒ์ผ ํƒ€์ž„์— ์—๋Ÿฌ๋ฅผ ์žก์•„์ค˜์„œ ๋Ÿฐํƒ€์ž„์—๋Ÿฌ๋ฅผ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒŒ ์™œ ๊ทธ๋ ‡๊ฒŒ ์ค‘์š”ํ•œ๊ฑธ๊นŒ?
"๋Ÿฐํƒ€์ž„์—๋Ÿฌ? ๊ทธ๋ƒฅ ํ”„๋กœ๊ทธ๋žจ์ด ๊ฐ•์ œ์ข…๋ฃŒ ๋˜๋Š”๊ฑฐ ์•„๋‹Œ๊ฐ€...?"


๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ๊ฐ€ ๋ฌด์„œ์šด ์ง„์งœ ์ด์œ 

๋Ÿฐํƒ€์ž„์—๋Ÿฌ์™€ ์ด๋กœ ์ธํ•ด ๋ฐœ์ƒํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์˜ ๊ฐ•์ œ ์ข…๋ฃŒ๊ฐ€ ์™œ ๋ฌด์„œ์šด์ง€์— ๋Œ€ํ•ด ์ฐพ์•„๋ณด์•˜๋‹ค.

1. ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ๋งˆ์ฃผ์นœ๋‹ค.

  • ์ปดํŒŒ์ผ ์—๋Ÿฌ๋Š” ๊ฐœ๋ฐœ ์ค‘ ํ™•์ธํ•˜๊ณ  ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ๋ฅผ ๋†“์ณ ๋ฐฐํฌ๊ฐ€ ์ง„ํ–‰๋œ๋‹ค๋ฉด ์‚ฌ์šฉ์ž ์•ž์—์„œ ์—๋Ÿฌ๊ฐ€ ํ„ฐ์งˆ ์ˆ˜ ์žˆ๋‹ค.
  • ๊ฐ‘์ž‘์Šค๋Ÿฌ์šด ํ”„๋กœ๊ทธ๋žจ์˜ ๋น„์ •์ƒ์  ์ข…๋ฃŒ๋Š” ๊ณ ๊ฐ์˜ ์‹ ๋ขฐ๋„๋ฅผ ๋–จ์–ด๋œจ๋ฆฐ๋‹ค.
    1. ์€ํ–‰ ์•ฑ์—์„œ ์†ก๊ธˆ์„ ๋ˆ„๋ฅธ ์ˆœ๊ฐ„ ๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ ๋ฐœ์ƒ
    2. ์•ฑ ๊ฐ•์ œ์ข…๋ฃŒ
    3. ์‚ฌ์šฉ์ž๋Š” ๋ˆ์ด ์†ก๊ธˆ๋๋Š”์ง€ ์•„๋‹Œ์ง€ ๋ชจ๋ฆ„

2. ์žฌํ˜„์ด ์–ด๋ ต๋‹ค.

  • ํŠน์ • ์กฐ๊ฑด, ํƒ€์ด๋ฐ, ์ƒํ™ฉ์—์„œ๋งŒ ํ„ฐ์ง€๋Š” ๋Ÿฐํƒ€์ž„์—๋Ÿฌ๋„ ์กด์žฌํ•œ๋‹ค.
  • ์‚ฌ์šฉํ™˜๊ฒฝ์— ๋”ฐ๋ผ ๋ฐœ์ƒ์กฐ๊ฑด์ด ๋‹ฌ๋ผ์งˆ ์ˆ˜ ๋„ ์žˆ์–ด ๋””๋ฒ„๊น…์ด ํž˜๋“ค์–ด์ง„๋‹ค.

3. ๋ฐ์ดํ„ฐ ์†์‹ค

  • ํŒŒ์ผ ์ €์žฅ ํ˜น์€ DB ์“ฐ๊ธฐ ๋„์ค‘์— ๋Ÿฐํƒ€์ž„์—๋Ÿฌ ๋ฐœ์ƒ
  • ์ €์žฅ์ค‘์ด๋˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๋‚ ์•„๊ฐ€๊ฑฐ๋‚˜ ์ž˜๋ชป๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋  ์ˆ˜ ์žˆ๋‹ค.

4. ๋ณด์•ˆ ์ทจ์•ฝ์ 

  • ๋Ÿฐํƒ€์ž„ ์˜ˆ์™ธ ์ค‘ ์ผ๋ถ€๋Š” ๋ณด์•ˆ ๊ณต๊ฒฉ์— ์•…์šฉ๋  ์ˆ˜ ์žˆ๋‹ค.

    ์ƒํ™ฉ ์˜ˆ์‹œ
    unchecked null : null ์ƒํƒœ๋ฅผ ์•…์šฉํ•ด ์ธ์ฆ ์šฐํšŒ๋‚˜ ์ ‘๊ทผ ์ œ์–ด ์šฐํšŒ ์‹œ๋„๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.
    buffer overrun : ๋ฒ„ํผ ๋ฒ”์œ„๋ฅผ ๋„˜์–ด์„œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋ฎ์–ด์“ฐ๋ฉฐ ๊ณก๊ฒฉ์ž๊ฐ€ ์ž„์˜์˜ ์ฝ”๋“œ๋ฅผ ์‚ฝ์ž…ํ•˜๊ฑฐ๋‚˜ ์‹คํ–‰์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

5.์„œ๋น„์Šค ์ „์ฒด ์žฅ์•  ๊ฐ€๋Šฅ์„ฑ

  • ์„œ๋ฒ„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์˜ˆ์™ธ๊ฐ€ ์ฒ˜๋ฆฌ๋˜์ง€ ์•Š์œผ๋ฉด ์ „์ฒด ์„œ๋น„์Šค๊ฐ€ ๋‹ค์šด๋  ์ˆ˜ ์žˆ๋‹ค.
  • ํ•˜๋‚˜์˜ ๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ๊ฐ€ ์ „์ฒด ์‹œ์Šคํ…œ์— ์—ฐ์‡„์ ์ธ ์˜ํ–ฅ์„ ๋ฏธ์น  ์ˆ˜ ์žˆ๋‹ค.

์ง€๊ธˆ๊นŒ์ง€์˜ ์ž‘์—…์ด ๊ฐœ๋ฐœ ๋‹จ๊ณ„์— ๊ทธ์ณค๊ธฐ์— ๋‚˜๋Š” ๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ๋ฅผ ๋‹จ์ˆœํžˆ ๊ฐœ๋ฐœ ์ค‘ ๋งˆ์ฃผ์น˜๋Š” ๊ฐ€๋ฒผ์šด ์˜ˆ์™ธ์ฏค์œผ๋กœ๋งŒ ์—ฌ๊ฒผ๋‹ค.
ํ•˜์ง€๋งŒ ์ œ๋„ค๋ฆญ์˜ ํƒ€์ž… ์•ˆ์ •์„ฑ์— ๋Œ€ํ•ด ๊ณ ๋ฏผํ•˜๋ฉด์„œ '์™œ ์ปดํŒŒ์ผ ํƒ€์ž„์— ์—๋Ÿฌ๋ฅผ ์žก๋Š” ๊ฒŒ ์ค‘์š”ํ• ๊นŒ?' ๋ผ๋Š” ์งˆ๋ฌธ์„ ์Šค์Šค๋กœ์—๊ฒŒ ๋˜์ง€๊ฒŒ ๋˜์—ˆ๊ณ  ๊ทธ ๊ณผ์ •์—์„œ ๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ๊ฐ€ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ง์ ‘์ ์ธ ํ”ผํ•ด๋ฅผ ์ค„ ์ˆ˜ ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค์„ ๊นจ๋‹ซ๊ฒŒ ๋˜์—ˆ๋‹ค.

๊ฒฐ๊ตญ ํƒ€์ž… ์•ˆ์ •์„ฑ ๋ณด์žฅ์„ ํ†ตํ•ด ๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ๋ฅผ ๋ฐฉ์ง€ํ•œ๋‹ค๋Š” ๊ฒƒ์€ ์‚ฌ์šฉ์ž๊ฐ€ ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ์•ˆ์ •์ ์ธ ์‹คํ–‰ํ™˜๊ฒฝ์„ ๋งŒ๋“ ๋‹ค๋Š” ์˜๋ฏธ์˜€๋‹ค.

์ข‹์€ ํ”„๋กœ๊ทธ๋žจ์ด๋ž€ ๋‹จ์ˆœํ•œ ๊ตฌ๋™์„ ๋„˜์–ด ์‚ฌ์šฉ์ž๊ฐ€ ๋ถˆํŽธํ•จ ์—†์ด ์•ˆ์‹ฌํ•˜๊ณ  ์“ธ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด์–ด์•ผ ํ•œ๋‹ค.

๊ฒฐ๋ก : ์ œ๋„ค๋ฆญ ์ตœ๊ณ !

profile
์ฐจ๊ทผ์ฐจ๊ทผ

2๊ฐœ์˜ ๋Œ“๊ธ€

comment-user-thumbnail
2025๋…„ 4์›” 21์ผ

๊ทธ๋Ÿผ ํƒ€์ž… ์•ˆ์ •์„ฑ์ด ์—†์„ ๋•Œ ๋Ÿฐํƒ€์ž„ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์˜ˆ์‹œ๋Š” ๋ญ”๊ฐ€์š”?

1๊ฐœ์˜ ๋‹ต๊ธ€