20/11/6

아라·2020년 11월 6일
0

국비교육

목록 보기
19/30

예외

컴파일에서는 발견되지 않지만(문법 오류가 아니기 때문) 실행 중 오류(런타임오류)가 발견되는 경우.

예외처리

전통적인 방식

제어문 사용(조건문)

private static void m1() {
	int num=0;
	if (num!=0) { // 비즈니스코드(업무코드)
		System.out.printf("100 / %d = %d\n", num, 100/num);
	}else { // 예외처리코드
		System.out.println("0을 입력하면 안됩니다.");
	}
}

예외 처리 구문

try catch finally

private static void m1() {
	int num=5;
	try {
		System.out.printf("100 / %d = %d\n", num, 100/num);
	}catch (Exception e){
		System.out.println("0을 입력하면 안됩니다.");
	}
}

전통적 방식과 예외 처리 구문은 작동방식이 다르다.

가독성 좋은 코드 나쁜 코드


// 가독성 좋은 코드
if (num!=0){
	System.out.printf("100 / %d = %d\n", num, 100/num);
}else{
	System.out.println("0을 입력하면 안됩니다.");
}
// 가독성 나쁜 코드
if (num==0){ // 참의 부분에 예외처리해놔서 나쁜 코드.
	System.out.println("0을 입력하면 안됩니다.");
}else{ // 예외에 비즈니스코드
	System.out.printf("100 / %d = %d\n", num, 100/num);
}

예외 e

예외 객체. 예외와 관련된 정보 제공.

예외 각자 처리 vs 묶어서 처리

private static void m4() {
	try {
		int[] nums= {10, 20, 30};
		nums[5]=100;
		Random rnd=null;
		System.out.println(rnd.nextInt());
		Object o1="문자열";
		System.out.println((int)o1);
	}catch(Exception e) {
		System.out.println("예외발생");
	}
		
}
private static void m3() {
	try {
		int[] nums= {10, 20, 30};
		nums[5]=100;
		
	}catch(Exception e) {
		System.out.println("방 번호 오류");
	}
	try {
		Random rnd=null;
		System.out.println(rnd.nextInt());
	} catch (Exception e1) {
		System.out.println("널 참조");
	}
	
	try {
		Object o1="문자열";
		System.out.println((int)o1);
	} catch (Exception e) {
		System.out.println("형변환오류");
	}
		
}

다중캐치문

private static void m5() {
	try {
		int[] nums= {10, 20, 30};
		nums[2]=100; // ArrayIndexOutOfBoundsException
		
		Random rnd=null; //null;
		System.out.println(rnd.nextInt()); //NullPointerException
		Object o1="문자열";
		System.out.println((int)o1); //ClassCastException
		Exception e=new Exception(); // 야구공
		throw e;
	}catch(ArrayIndexOutOfBoundsException e) {
		System.out.println("방번호 오류");
	}catch(NullPointerException e) {
		System.out.println("널참조");
	}catch(ClassCastException e) {
		System.out.println("형변환 오류");
	}catch(Exception e) {
		System.out.println("예외발생");
	}	
}

패턴코드

String data="";
while(scan.hasNext()){
	data=scan.next();
    System.out.println("출력 : " + data);
}

띄어쓰기를 기준으로 한줄씩 출력된다.

Scanner로 쪼개기

Scanner scan=new Scanner(System.in);
	String data=scan.nextLine();
	String[] result=data.split(",");
	for(String str:result) {
		System.out.println(str);
	}

0개의 댓글