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

[JAVA] Exception

by ๋Œ€๋ณต2 2024. 7. 28.

 

 

Exception๊ณผ Error์˜ ์ฐจ์ด

์˜ค๋ฅ˜(Error): ์‹œ์Šคํ…œ์ด ์ข…๋ฃŒ๋˜์–ด์•ผ ํ•  ์ˆ˜์ค€์˜ ์ƒํ™ฉ๊ณผ ๊ฐ™์ด ์ˆ˜์Šตํ•  ์ˆ˜ ์—†๋Š” ์‹ฌ๊ฐํ•œ ๋ฌธ์ œ๋ฅผ ์˜๋ฏธ

์˜ˆ์™ธ(Exception): ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ตฌํ˜„ํ•œ ๋กœ์ง์—์„œ ๋ฐœ์ƒํ•œ ์‹ค์ˆ˜๋‚˜ ์‚ฌ์šฉ์ž์˜ ์˜ํ–ฅ์— ์˜ํ•ด ๋ฐœ์ƒ

* ์˜ˆ์™ธ์˜ ๊ฒฝ์šฐ ๋ณ„๋„์˜ ์ฒ˜๋ฆฌ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์—ฌ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

 

 

Try ~ Catch

public static void main(String[] args) {
		FileInputStream is = null;
        try { // ์˜ˆ์™ธ๊ฐ€ ๋ ๋งŒํ•œ ์ฝ”๋“œ๋ฅผ try์˜์—ญ์— ์ง€์ •ํ•œ๋‹ค.
            is = new FileInputStream("number.txt");
            int num = 0;
            System.out.println("code 1, num: " + num);
            int i = 1 / num;
            System.out.println("code 2 - ์˜ˆ์™ธ ์—†์Œ: " + i);
            return;
        } catch (ArithmeticException e) { // try์˜์—ญ์—์„œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค๋ฉด Catch๋ฌธ์„ ์‹คํ–‰
            System.out.println("code 3 - exception handling ์™„๋ฃŒ");
        } finally { // try ~ catch๊ฐ€ ๋๋‚œ ๋’ค ์‹คํ–‰ ๋œ๋‹ค. ์˜ˆ์™ธ ๋ฐœ์ƒ ์œ ๋ฌด์™€ ์ƒ๊ด€์—†์ด ํ•ญ์ƒ ์‹คํ–‰
            if(is != null) is.close();
            System.out.println("code 4 - ์–ธ์ œ๋‚˜ ์‹คํ–‰");
        }
        System.out.println("code 5");
    }

 

e.getMessage(): ๋ฐœ์ƒํ•œ ์˜ˆ์™ธ์— ๋Œ€ํ•œ ๊ตฌ์ฒด์ ์ธ ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.  

getCause(): ์˜ˆ์™ธ์˜ ์›์ธ์ด ๋˜๋Š” Throwable ๊ฐ์ฒด ๋˜๋Š” null์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

printStackTrace(): ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒ๋œ ๋ฉ”์„œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋˜๊ธฐ๊นŒ์ง€์˜ ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ์Šคํƒ์„ ์ถœ๋ ฅ(๋””๋ฒ„๊น…์šฉ)

- ๋ฐ˜ํ™˜๊ฐ’์ด ์—†๊ณ , ์˜ˆ์™ธ ๊ฒฐ๊ณผ๋ฅผ ํ™”๋ฉด์— ์ถœ๋ ฅํ•ด ์ค€๋‹ค.

ํ•˜๋‚˜์˜ try์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ catch๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค.(์ž์‹ -> ๋ถ€๋ชจ ์ˆœ์„œ ๊ถŒ์žฅ)

|(or) ๊ธฐ๋Šฅ์„ ์ด์šฉํ•ด ํ•œ๋ฒˆ์— 2๊ฐ€์ง€ ์ด์ƒ์˜ ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋„ ๊ฐ€๋Šฅํ•˜๋‹ค.

 

 

 

์‚ฌ์šฉ ํ›„ ์ž์›์„ ๋ฐ˜๋‚ฉ์ด ํ•„์š”ํ•œ ์ž์›๋“ค์€ ๋ชจ๋‘ Closable ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ  ์žˆ๊ณ , ์‚ฌ์šฉ ํ›„ close ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ด์•ผ ํ•œ๋‹ค.

 

 

 

Try ~ with ~ resources

public static void main(String args[]) throws IOException {
    try (FileInputStream is = new FileInputStream("trywithresources.txt"); BufferedInputStream bis = new BufferedInputStream(is)) {
        int data;
        while ((data = bis.read()) != -1) {
            System.out.print((char) data);
        }
    }
}

 

try๋ฌธ์— ์‚ฌ์šฉํ•  ์ž์›์„ ์„ ์–ธํ•ด ์ฃผ๊ณ , ์‚ฌ์šฉ์ด ๋๋‚ฌ์„ ๋•Œ, ์ž๋™์œผ๋กœ ๋ฐ˜๋‚ฉํ•ด ์ฃผ๋Š” ๋ฌธ๋ฒ•์ด๋‹ค.

try-catch๋ฅผ ์ด์šฉํ•˜์˜€์„ ๋•Œ, ์ž์›์„ ๋ฐ˜๋‚ฉํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ๋ฐ˜๋“œ์‹œ ๋ช…์‹œ๋ฅผ ํ•ด์•ผ ํ•˜๋Š” ๋ถˆํŽธํ•จ์ด ์žˆ์–ด์„œ(๊ท€์ฐฎ์•„์„œ)

Java7๋ถ€ํ„ฐ ์ƒ๊ฒผ๋‹ค.

 

์ด ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ž์›๋“ค์ด Closable์˜ ๋ถ€๋ชจ ํด๋ž˜์Šค์ธ AutoCloseable ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค.

 

 

 

 

Throws

public void sell(String isbn, int quantity) throws QuantityException, ISBNNotFoundException {
	if(searchByisbn(isbn) == null) throw new ISBNNotFoundException(isbn);
		for(int i = 0; i < books.size(); i++) {
			if(books.get(i).getQuantity() - quantity < 0) throw new QuantityException();
		}
	}
}

 

- method์—์„œ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•  ํ•˜๋‚˜ ์ด์ƒ์˜ ์˜ˆ์™ธ๋ฅผ ํ˜ธ์ถœํ•œ ๊ณณ์œผ๋กœ ์ „๋‹ฌํ•œ๋‹ค.(์ฒ˜๋ฆฌ ์œ„์ž„, ์—†์–ด์ง€์ง€ ์•Š๋Š”๋‹ค.)

- API๋Š” ์‚ฌ์ „์— ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Œ์„ ์„ ์–ธ๋ถ€์— ๋ช…์‹œํ•˜๊ณ  ๋Œ€์ฒ˜ํ•˜๋„๋ก ๊ฐ•์š”ํ•œ๋‹ค.

- ์˜ค๋ฒ„๋ผ์ด๋”ฉ ์‹œ ์กฐ์ƒ ํด๋ž˜์Šค ๋ฉ”์„œ๋“œ๊ฐ€ ๋˜์ง€๋Š” ์˜ˆ์™ธ๋ณด๋‹ค ๋ถ€๋ชจ์ธ ์˜ˆ์™ธ๋ฅผ ๋˜์งˆ ์ˆ˜ ์—†๋‹ค.

 

 

 

 

์‚ฌ์šฉ์ž ์ •์˜ ์˜ˆ์™ธ

//๋„์„œ๊ณ ์œ  ๋ฒˆํ˜ธ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ์˜ˆ์™ธ์ •๋ณด๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ํด๋ž˜์Šค

public class ISBNNotFoundException extends Exception {
	private String isbn;
	
	// ๊ณ ์œ ๋ฒˆํ˜ธ๋ฅผ ๋ฐ›์•„ ์ƒ์„ฑํ•˜๋Š” ์ƒ์„ฑ์ž
	public ISBNNotFoundException(String isbn) {
		super(isbn+"๊ณ ์œ ๋ฒˆํ˜ธ๋Š” ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.");
		this.isbn = isbn;
	}

	// ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๋„์„œ ๊ณ ์œ ๋ฒˆํ˜ธ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
	public String getIsbn() {
		return isbn;
	}
}

 

์ด๋Ÿฐ ์‹์œผ๋กœ ์˜ˆ์™ธ๋ฅผ ์ง์ ‘ ๋งŒ๋“ค์–ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

'Java' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[JAVA] ConcurrentHashMap  (0) 2025.05.17
[JAVA] File I/O  (0) 2024.07.28
[JAVA] Stream API  (0) 2024.07.25
[JAVA] Lambda  (0) 2024.07.24
[JAVA] Comparable? Comparator?  (3) 2024.07.23