λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
Java

[Java-기초] μ˜ˆμ™Έ 클래슀

by μ½”λ”©ν•˜λŠ” λΆ•μ–΄ 2021. 2. 22.
λ°˜μ‘ν˜•

β–Ά μ˜ˆμ™Έ 클래슀

​

*였λ₯˜λž€?

ν”„λ‘œκ·Έλž¨μ—μ„œ 였λ₯˜κ°€ λ°œμƒν•˜λŠ” 상황은 두 가지이닀.

1. ν”„λ‘œκ·Έλž¨ μ½”λ“œ μž‘μ„± 쀑 μ‹€μˆ˜λ‘œ λ°œμƒν•˜λŠ” 컴파일 였λ₯˜

컴파일 였λ₯˜λŠ” 개발 ν™˜κ²½μ—μ„œ λŒ€λΆ€λΆ„ 원인을 μ•Œ 수 μžˆλ‹€.

2. μ‹€ν–‰ 쀑인 ν”„λ‘œκ·Έλž¨μ΄ μ˜λ„ν•˜μ§€ μ•Šμ€ λ™μž‘μ„ ν•˜κ±°λ‚˜ ν”„λ‘œκ·Έλž¨μ΄ μ€‘μ§€λ˜λŠ” μ‹€ν–‰ 였λ₯˜

μ‹€ν–‰ 였λ₯˜ 쀑 ν”„λ‘œκ·Έλž¨μ„ 잘λͺ» κ΅¬ν˜„ν•˜μ—¬ μ˜λ„ν•œ 바와 λ‹€λ₯΄κ²Œ μ‹€ν–‰λ˜μ–΄ μƒκΈ°λŠ” 였λ₯˜λ₯Ό '버그​'라고 ν•œλ‹€.

​

​

​

*였λ₯˜μ™€ μ˜ˆμ™Έ

μ‹€ν–‰ 였λ₯˜λŠ” 크게 두 가지가 μžˆλŠ”λ°, ν•˜λ‚˜λŠ” μžλ°” 가상 λ¨Έμ‹ μ—μ„œ λ°œμƒν•˜λŠ” μ‹œμŠ€ν…œ 였λ₯˜(error)이고 λ‹€λ₯Έ ν•˜λ‚˜λŠ” μ˜ˆμ™Έ(exception)이닀. μ‹œμŠ€ν…œ 였λ₯˜μ˜ μ˜ˆλ‘œλŠ” μ‚¬μš© κ°€λŠ₯ν•œ 동적 λ©”λͺ¨λ¦¬κ°€ μ—†λŠ” κ²½μš°λ‚˜ μŠ€νƒ λ©”λͺ¨λ¦¬μ˜ μ˜€λ²„ν”Œλ‘œκ°€ λ°œμƒν•œ 경우 등을 λ“€ 수 μžˆλ‹€. → 이런 μ‹œμŠ€ν…œ 였λ₯˜λŠ” ν”„λ‘œκ·Έλž¨μ—μ„œ μ œμ–΄ν•  수 μ—†μŒ.

반면 μ˜ˆμ™ΈλŠ” ν”„λ‘œκ·Έλž¨μ—μ„œ μ œμ–΄ν•  수 μžˆλ‹€. 예λ₯Ό λ“€μ–΄ ν”„λ‘œκ·Έλž¨μ—μ„œ νŒŒμΌμ„ 읽어 μ‚¬μš©ν•˜λ €λŠ”λ° 파일이 μ—†λŠ” 경우, λ„€νŠΈμ›Œν¬λ‘œ 데이터λ₯Ό μ „μ†‘ν•˜λ €λŠ”λ° 연결이 μ•ˆ 된 경우, λ°°μ—΄ 값을 좜λ ₯ν•˜λ €λŠ”λ° λ°°μ—΄ μš”μ†Œκ°€ μ—†λŠ” 경우 등이닀.

​

​

​

*μ˜ˆμ™Έ 클래슀의 μ’…λ₯˜

ν”„λ‘œκ·Έλž¨μ—μ„œ μ²˜λ¦¬ν•˜λŠ” μ˜ˆμ™Έ 클래슀의 μ΅œμƒμœ„ ν΄λž˜μŠ€λŠ” Exception ν΄λž˜μŠ€μ΄λ‹€.

Exception ν•˜μœ„ 클래슀 쀑 IOException ν΄λž˜μŠ€λŠ” μž…μΆœλ ₯에 λŒ€ν•œ μ˜ˆμ™Έλ₯Ό μ²˜λ¦¬ν•˜κ³ , RuntimeExceptionλŠ” ν”„λ‘œκ·Έλž¨ μ‹€ν–‰ 쀑 λ°œμƒν•  수 μžˆλŠ” 였λ₯˜μ— λŒ€ν•œ μ˜ˆμ™Έλ₯Ό μ²˜λ¦¬ν•œλ‹€.

β€»Exception ν•˜μœ„ 클래슀 쀑 RuntimeException은 try-catch문을 μ‚¬μš©ν•˜μ—¬ μ˜ˆμ™Έ 처리λ₯Ό ν•˜μ§€ μ•Šμ•„λ„ 컴파일 였λ₯˜κ°€ λ‚˜μ§€ μ•ŠλŠ”λ‹€. 예λ₯Ό λ“€μ–΄ RuntimeException ν•˜μœ„ 클래슀 쀑 ArithmeticException은 μ‚°μˆ  μ—°μ‚° 쀑 λ°œμƒν•  수 μžˆλŠ” μ˜ˆμ™Έ, 즉 '0으둜 숫자 λ‚˜λˆ„κΈ°'와 같은 κ²½μš°μ— λ°œμƒν•˜λŠ” μ˜ˆμ™Έμ΄λ‹€. μ΄λŸ¬ν•œ μ»΄νŒŒμΌλŸ¬μ— μ˜ν•΄ μ²΄ν¬λ˜μ§€ μ•ŠλŠ” μ˜ˆμ™ΈλŠ” ν”„λ‘œκ·Έλž˜λ¨Έκ°€ μ•Œμ•„μ„œ μ²˜λ¦¬ν•΄μ•Ό ν•˜λ―€λ‘œ μ£Όμ˜ν•΄μ•Ό ν•œλ‹€.

​

​

​

*μ˜ˆμ™Έ μ²˜λ¦¬ν•˜κΈ°

​

-try-catch문

μ˜ˆμ™Έλ₯Ό μ²˜λ¦¬ν•˜λŠ” κ°€μž₯ κΈ°λ³Έ 문법.

try λΈ”λ‘μ—λŠ” μ˜ˆμ™Έκ°€ λ°œμƒν•  κ°€λŠ₯성이 μžˆλŠ” μ½”λ“œλ₯Ό μž‘μ„±ν•œλ‹€. λ§Œμ•½ try 블둝 μ•ˆμ—μ„œ μ˜ˆμ™Έκ°€ λ°œμƒν•˜λ©΄ λ°”λ‘œ catch 블둝이 μˆ˜ν–‰λœλ‹€.

 

<κ·Έλƒ₯ μ μ—ˆμ„λ•Œ>

package exception;

public class ArrayExceptionHandling {
	public static void main(String[] args) {
		int[] arr = new int[5];

	    for (int i = 0; i <= 5; i++) {
				arr[i] = i;
				System.out.println(arr[i]);
			}
		} 
		System.out.println("ν”„λ‘œκ·Έλž¨ μ’…λ£Œ");
	}
}

​<μ‹€ν–‰ κ²°κ³Ό>

μ΄λŸ°μ‹μœΌλ‘œ 였λ₯˜κ°€ λ‚˜λŠ”μ§€ μ²˜μŒμ— ν™•μΈν•΄μ€˜μ•Όλœλ‹€.

 

​

<try-catchλ¬Έ μ‚¬μš©>

package exception;

public class ArrayExceptionHandling {
	public static void main(String[] args) {
		int[] arr = new int[5];

		try { // μ˜ˆμ™Έκ°€ λ°œμƒν•  수 μžˆμœΌλ―€λ‘œ try 블둝에 μž‘μ„±
			for (int i = 0; i <= 5; i++) {
				arr[i] = i;
				System.out.println(arr[i]);
			}
		} catch (ArrayIndexOutOfBoundsException e) { // μ˜ˆμ™Έκ°€ λ°œμƒν•˜λ©΄ catch 블둝 μˆ˜ν–‰
			System.out.println(e);
			System.out.println("μ˜ˆμ™Έ 처리 λΆ€λΆ„");
		}
		System.out.println("ν”„λ‘œκ·Έλž¨ μ’…λ£Œ");
	}
}

​<μ‹€ν–‰ κ²°κ³Ό>

-μ˜ˆμ™Έ μ²˜λ¦¬λŠ” ν”„λ‘œκ·Έλž¨μ΄ 비정상 μ’…λ₯˜λ˜λŠ” 것을 방지할 수 μžˆμœΌλ―€λ‘œ 맀우 μ€‘μš”ν•˜λ‹€.

λ°˜μ‘ν˜•

λŒ“κΈ€