GiantStepDEV
article thumbnail

μ˜ˆμ™Έ 클래슀?

  • 싀행쀑인 ν”„λ‘œκ·Έλž¨μ΄ μ˜λ„ν•˜μ§€ μ•Šμ€ λ™μž‘μ„ ν•˜κ±°λ‚˜ ν”„λ‘œκ·Έλž¨μ΄ μ€‘μ§€λ˜λŠ” 것을 막기 μœ„ν•΄ μ˜ˆμ™Έ 처리λ₯Ό ν•œλ‹€.
  • ν”„λ‘œκ·Έλž¨μ—μ„œ μ²˜λ¦¬ν•˜λŠ” μ˜ˆμ™Έ 클래슀의 μ΅œμƒμœ„ ν΄λž˜μŠ€λŠ” Exception 클래슀 이닀.

μ‹œμŠ€ν…œ 였λ₯˜ & μ˜ˆμ™Έ

1. μ‹œμŠ€ν…œ 였λ₯˜(Error) : κ°œλ°œμžκ°€ μ œμ–΄ ν•  수 μ—†μŒ

2. μ˜ˆμ™Έ(Exception) : ν”„λ‘œκ·Έλž¨μ—μ„œ μ œμ–΄ κ°€λŠ₯ (try ~ catch ~ finally 블둝)

    예) ν”„λ‘œκ·Έλž¨μ—μ„œ νŒŒμΌμ„ 읽을 수 μ—†λŠ” 경우, λ„€νŠΈμ›Œν¬λ‘œ 데이터λ₯Ό μ£Όκ³  λ°›κ³ μž ν•˜λŠ”λ° λ„€νŠΈμ›Œν¬κ°€ 연결이 μ•ˆλœ 경우, λ°°            μ—΄ 값을 좜λ ₯ν•˜κ³ μž ν•˜λŠ”λ° λ°°μ—΄ μš”μ†Œκ°€ μ—†λŠ” 경우 λ“±


ArrayIndexOutOfBoundException

  • λ°°μ—΄ λ²”μœ„ μ΄ˆκ³Όμ— λŒ€ν•œ μ˜ˆμ™Έ 처리
public class Main {
    public static void main(String[] args) {
        int[] arr = new int[5];
        try {
            for(int i = 0; i <= 5; i++) {
                arr[i] = i;
                System.out.println(arr[i]);
            }
        } catch (ArrayIndexOutOfBoundsException e) {
            System.out.println(e);
            System.out.println("μ˜ˆμ™Έ 처리 λΆ€λΆ„");
        }
        System.out.println("ν”„λ‘œκ·Έλž¨ 정상 μ’…λ£Œ ...");
    }
}

FileNotFoundException

  • μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ” νŒŒμΌμ„ μ—΄λ €κ³  μ‹œλ„ ν•  λ•Œ λ°œμƒ
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class Main {
    public static void main(String[] args) {
        try {
            BufferedReader br = new BufferedReader(new FileReader("μ—†λŠ” 파일"));
            br.readLine();
            br.close();
        } catch (IOException e) {
            System.out.println(e);
            System.out.println("파일이 μ—†μŠ΅λ‹ˆλ‹€.");
        }
    }
}

NullPointerException

  • μ°Έμ‘°ν•˜κ³  μžˆλŠ” μ£Όμ†Œλ₯Ό μ ‘κ·Ό ν–ˆμœΌλ‚˜ 값이 μ—†λŠ” 경우
NullPointerException은 가급적 try ~ catch ~ finally μ‚¬μš©ν•˜μ§€ 말 것.
ν•΄λ‹Ή 였λ₯˜λŠ” μž‘μ•„μ£ΌλŠ” 것이 μ’‹μŒ.
public class Main {
    public static void main(String[] args) {
        Test test = null;
        try {
            String testStr = test.name;
            System.out.println(test);
        } catch(NullPointerException e) {
            System.out.println("μ°Έμ‘°ν•˜κ³  μžˆλŠ” 곳에 값이 μ—†μŠ΅λ‹ˆλ‹€.");
        }
    }
}

class Test {
    String name = "κ³°λŒμ΄μ‚¬μœ‘μ‚¬";
}

ArithmeticException

  • μ—°μ‚° 였λ₯˜
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        int rst = 0;
        Scanner sc = new Scanner(System.in);
        while(true) {
            System.out.print("λ‚˜λˆ—μ…ˆ μž…λ ₯ : ");
            int a = sc.nextInt();
            int b = sc.nextInt();
            try {
                rst = a / b;
            } catch(ArithmeticException e) {
                System.out.println("0으둜 λ‚˜λˆŒ 수 μ—†μŠ΅λ‹ˆλ‹€. λ‹€μ‹œ μž…λ ₯ν•˜μ„Έμš”.");
                continue;
            }
            System.out.println("κ²°κ³ΌλŠ” " + rst);
            break;
        }
    }
}

finally

  • ν”„λ‘œκ·Έλž¨ μ‹€ν–‰ 도쀑 μ˜ˆμ™Έκ°€ λ°œμƒν•  κ°€λŠ₯성이 μžˆλŠ” μ½”λ“œμ— try ꡬ문을 μž‘μ„±ν•©λ‹ˆλ‹€.
  • 이 λ•Œ, μ˜ˆμ™Έκ°€ λ°œμƒν•˜λ©΄ catch ꡬ문으둜 μ§„ν–‰ν•˜κ³  κ·Έλ ‡μ§€ μ•ŠμœΌλ©΄ μ•„λž˜ μ½”λ“œκ°€ μ‹€ν–‰ λ©λ‹ˆλ‹€.
  • 이 경우, μ˜ˆμ™Έ μ—¬λΆ€ 상관없이 항상 μ‹€ν–‰λ˜μ–΄μ•Ό ν•  ꡬ문이 μžˆλ‹€λ©΄ finally둜 처리 ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
import java.io.FileWriter;
import java.io.IOException;

public class Main {
    public static void main(String[] args) {
        FileWriter f = null;
        try {
            f = new FileWriter("test.txt");
            f.write("test");
        } catch(IOException e) {
            e.printStackTrace();
        } finally {
            if(f != null) {
                try {
                    f.close();
                } catch(IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

μ˜ˆμ™Έ 처리 미루기

  • ν•΄λ‹Ή λ©”μ†Œλ“œ λ‚΄μ—μ„œ λ°œμƒν•œ μ˜ˆμ™Έ μ²˜λ¦¬μ— λŒ€ν•œ μ±…μž„μ„ λ©”μ†Œλ“œλ₯Ό ν˜ΈμΆœν•œ μͺ½μœΌλ‘œ λ– λ„˜κΉ€
public class Main {
	public static void main(String[] args) {
    	IOSample test = new IOSample( );
    	try{
        	test.input();
        	test.output();
    	} catch (IOException e) {
        	e.printStackTrace();
    	} catch (ArrayIndexOutOfBoundsException e) {
        	e.printStackTrace();
    	}
	}
}

public class IOSample {
    private int num;

    public void input() throws IOException {
        num = System.in.read();
    }
    public void output() {
        System.out.println(num);
    }
}

μ˜ˆμ™Έ 처리 λ˜μ§€κΈ°

  • μ›ν•˜λŠ” 쑰건 μƒν™©μ—μ„œ ν•„μš”ν•œ 경우 μ˜ˆμ™Έ 객체λ₯Ό μƒμ„±μ‹œν‚€λ©΄μ„œ μ˜ˆμ™Έλ₯Ό λ°œμƒμ‹œν‚¬ 수 μžˆμŠ΅λ‹ˆλ‹€.
import java.io.IOException;

public class Main {
    public static void main(String[] args) {
       ThrowEx ex = new ThrowEx();
       ex.printStr(5);
    }
}

class ThrowEx {
    String str = null;
    public void printStr(int cnt) {
        if(str == null) {
            System.out.println("str이 null μž…λ‹ˆλ‹€.");
            throw new NullPointerException();
        }
        for(int i = 0; i < cnt; i++) {
            System.out.println(str);
        }
    }
}
profile

GiantStepDEV

@kongmi

ν¬μŠ€νŒ…μ΄ μ’‹μ•˜λ‹€λ©΄ "μ’‹μ•„μš”β€οΈ" λ˜λŠ” "κ΅¬λ…πŸ‘πŸ»" ν•΄μ£Όμ„Έμš”!