Archives
Recent Posts
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
Today
Total
관리 메뉴

안드로이드 개발자의 창고

[8일차 Java] 예외처리(Exception) 본문

Computer/Java

[8일차 Java] 예외처리(Exception)

Wise-99 2023. 5. 6. 23:46

 

 

출처 : 안드로이드 앱스쿨 2기 윤재성 강사님 수업 PPT

 

 

 

📖 예외처리(Exception)란?

  • 프로그램 수행 중에 오류(예외)가 발생하거나 발생할 가능성이 있다면 JVM은 오류가 JVM이나 OS에 전파되는 것을 막기 위해 프로그램을 강제 종료시킨다.
  • 이 때, 강제 종료가 되지 않게 하고 개발자가 준비한 오류 발생시 수행되어야 하는 코드가 수행될 수 있도록 하여 오류를 대비하게 해주는 것이다.

  • 예외 처리
    • 원하는 처리를 수행할 수 있는 코드 중에 예외가 발생할 가능성이 있는 부분을 try로 묶어준다.
    • try : 원하는 처리의 코드
    • catch : 오류가 발생했거나 발생할 가능성이 있을때 동작하는 코드

 

📖 예제 코드

public class MainClass {
	public static void main(String[] args) {
		try {
			// 0으로 나눈다.
			// int a1 = 10 / 0;
            
			// 객체의 아이디를 가지고 있지 않은 변수를 통해 객체 접근을 시도한다.
			// TestClass1 t1 = null;
			// t1.testMethod1();
            
			int [] array1 = new int[10];
			array1[20] = 200;
			System.out.println("오류 발생 시점 이후의 try 코드");
            
		} catch(ArithmeticException e){
			System.out.println("수학연산 오류가 발생했습니다");
            
		} catch(NullPointerException e) {
			System.out.println("객체 참조 오류가 발생했습니다");
            
		} catch(Exception e) {
			// 오류가 발생했을 때 처리될 코드는 catch 부분에 만든다.
			System.out.println("오류가 발생했습니다");
			System.out.println(e);
			e.printStackTrace();
		}

		System.out.println("이 부분이 실행될까요?"); <<< 출력됨
	}
}

✔️ 코드 해석

  • catch(ArithmeticException e){ ... }
    • 산술 계산 관련 코드에서 오류가 났을 때 보여지는 예외이다.
    • 예) int a1 = 10 / 0;
  • catch(NullPointerException e) { ... }
    • 실제 값이 아닌 null을 가지고 있는 객체나 변수를 호출할 때 발생하는 예외이다.
      • 예) TestClass1 t1 = null;
      •       t1.testMethod1();
  • catch(Exception e) { ... }
    • catch 안에 해당 예외 이름을 넣으면 모든 예외를 볼 수 있다.
  • System.out.println("이 부분이 실행될까요?");
    • try... catch를 사용하여 예외처리를 했기 때문에 해당 코드는 실행된다.

📖 throw와 throws?

  • throw : 예외를 발생시고자 할 때 사용한다.
    • 예상치 못한 일이 발생했을 때 Exception을 발생시켜 예외가 처리될 수 있도록 한다.
  • throws : 이 메서드를 수행할 때 지정한 예외가 발생할 가능성이 있다고 알려준다.
    • throws를 사용하면 이 메서드를 호출하는 쪽은 무조건 예외처리를 해야 한다.
    • 여러 오류에 대한 강제성을 넣을 수 있다.
    • 해당 예제 코드에서는 RunTimeException 를 throws 한다.
      • RunTimeException을 상속받은 것들은 throws 해도 예외처리에 대한 강제성을 줄 수 없기 때문에 Exception도 전달한다.

 

📖 예제 코드

public class MainClass {
	public static void main(String[] args) {
    	try {
        	TestClass1 t100 = new TestClass1();
			t100.testMethod2(100);
			t100.testMethod2(-100); <<< 예외 발생
            
		}catch(Exception e) {
			System.out.println("오류발생");
			e.printStackTrace();
		}

		// testMethod3는 예외들을 throws하고 있기 때문에 반드시 예외처리를 해줘야 한다.
		try {
			TestClass1 t200 = new TestClass1();
			t200.testMethod3(100);
			t200.testMethod3(200);
		
		} catch(Exception e) {
			e.printStackTrace();
		}
	}
}

class TestClass1 {
	public void testMethod1() {
		System.out.println("TestClass1의 testMethod1");
	}
	
	public void testMethod2(int a1) {
		// a1에 전달된 값이 양수가 아니면 오류를 발생시킨다.
		if(a1 <= 0) {
			throw new ArithmeticException("양수만 넣어라...");
		}
		System.out.println("a1은 양수입니다");
	}
	
	public void testMethod3(int a1) throws Exception, ArithmeticException, NullPointerException {
		// a1에 전달된 값이 양수가 아니면 오류를 발생시킨다.
		if(a1 <= 0) {
			throw new ArithmeticException("양수만 넣어라...");
		}
		System.out.println("a1은 양수입니다");
	}
}

✔️ 코드 해석

  • t100.testMethod2(-100);
    • testMethod2에서는 매개변수가 0이하이면 throw를 이용하여 예외를 발생시킨다.
    • ArithmeticException를 발생시키고, 오류와 함께 "양수만 넣어라..."가 출력된다.
  • public void testMethod3(int a1) throws Exception, ...
    • throws를 이용하여 예외가 발생할 수 있다는 것을 알려준다.

'Computer > Java' 카테고리의 다른 글

[8일차 Java] Wrapper Class  (0) 2023.05.07
[8일차 Java] Object  (0) 2023.05.06
[8일차 Java] Thread  (0) 2023.05.06
[7일차 Java] Interface(인터페이스)  (0) 2023.05.06
[7일차 Java] Abstract  (2) 2023.05.06