Java - 예외처리

2025. 1. 22. 17:35·Java

1. 예외처리

package basic_html;
import java.util.*;

public class ex1 {
	public static void main(String[] args) {
		try {	//프로세서를 실행하는 범위 파트
			Scanner sc = new Scanner(System.in);
			System.out.println("숫자를 입력해주세요 : ");
			int b = sc.nextInt();
			System.out.println(b);
		}
		//catch : 문제 발생시 실행되는 파트 
		catch (InputMismatchException ime) {
			System.out.println("숫자만 입력하셔야지요");
		}
		catch (NumberFormatException ne) {
			System.out.println("문자를 숫자로 변경하려 했음!!");
		} 
		// Exception 오류는 백가지가 넘기때문에 그냥 이렇게 쓰기
		catch (Exception e) { // Exception : 모든 유형의 오류 체크
			System.out.println(e); // 무슨오류인지 모를땐 직접 찍어보기 -> 종류 확인 
			e.printStackTrace();	//오류 발생한 코드 라인을 체크
			System.out.println("오류발생");
		}
	}
}
      • Exception
        •  1. 사용자가 입력실수로 인하여 잘못된 값을 입력하였을 경우
        • 2. 개발자가 프로그램 오류시 정확한 오류를 파악하기 위한 수단
        • 3. 강제 프로세서에 대한 정보수정 및 오류를 처리하기 위한 수단
        • Exception(부모 클래스), NumberFormatException 등등 (자식 클래스)
      • try ~ catch : 예외 처리 문법
        • try : 프로세서를 실행하는 범위 파트
        • catch : 문제 발생시 실행되는 파트 
        • Exception : 모든 유형의 오류 체크
      • 특정 예외를 처리하고 싶을때는 catch(Exception e) 으로 써두고 직접 오류발생 시켜서 콘솔에 나온 예외를 복사해서 캐치조건문에 넣어서 하면됨

2. finally와 임시조치, 문자열 치환

package basic_html;

import java.util.Scanner;

public class ex2 {

	public static void main(String[] args) {
		ex2_box eb = new ex2_box();
		eb.exbox();		//finally 사용방법
		eb.exbox2();	//해당 오류 문제 발생시 문법에 대한 임시 조치 후 재실행
	}
}

//예외처리 처리방법 
class ex2_box{
	//필드에는 try ~ catch 사용하지 않음
	Scanner sc = null;
	
	public void exbox() {
		this.sc = new Scanner(System.in);
		System.out.println("사용자 이름을 입력하세요 : ");
		
		try {
			String user = this.sc.next();
			if(user.equals("")||user.equals(null)) {
				System.out.println("사용자미입력");
			}else {
				System.out.println("연락처를 입력하세요 ('-' 없이 입력) : ");	// int로 전화번호 받으면 번호 시작 맨앞 0이 없어져버림
				Integer tel = this.sc.nextInt();
				System.out.println(tel);
			}			
		}
		catch(Exception e) {
			System.out.println(e);		
		}
		finally {	//finally는 try와 catch 실행시 무조건 실행되는 프로세서를 마치는 메소드 
			this.sc.close();
			System.out.println("finally는 무조건 작동되는 메소드");
		}
	}
	
	public void exbox2() {
		String word = "abcdeefgABCDEFG";
		//String reword = word.replace("e", "홍");
//		String reword = word.replace("[a-d]", "홍");	//범위는 못잡는다
		String reword = word.replaceAll("[a-dE-Fㄱ-ㅎㅣ-힇]", "홍");	//범위 잡을수있음
		System.out.println(reword);
		
		String a = "500a0";
		int b = 0;
		try {
			b = b + Integer.parseInt(a);
		}
		catch(NumberFormatException ne) {	
			//해당 예외처리 구문이 발생될 경우 임시조치 코드를 작성 후 정상적으로 프로세서가 작동되도록 함 
			a = a.replaceAll("[a-z]","");	//a~z를 null로 바꿈
			b = b + Integer.parseInt(a);
		}
		catch(Exception e) {
			System.out.println(e);
		}
		System.out.println("최종 결과값 : "+b);
	}
}
  • finally : try와 catch 실행시 프로세서를 마치는 무조건 실행되는 메소드
    • try ~ catch와 세트
    • 스캐너 안닫으면 프로그램을 종료해도 계속 돌아감 -> 고스트 프로그램 -> finally로 스캐너 닫아주기
  • catch구문 안에 임시 조치할 코드를 작성해서 프로세서가 작동되도록 함
  • 문자열 치환 : 특정 단어를 다른 단어로 변경하는 기능을 가진 메소드 
    • replace() : 한글자 바꿀때
    • replaceAll() : 글자의 범위를 지정해서 바꿀때

😊응용문제

사용자가 다음과 같이 은행에 금액을 입금하는 프로세서입니다.
 문제가 발생시 숫자만 입력 받을 수 있도록 처리하는 예외처리 코드를 작성
 [결과]
 "입금하실 금액을 입력하세요 : " aaa
 "숫자만 입력하세요"
 "입금하실 금액을 입력하세요 : " 5000
 "입금하신 금액은 5000원 입니다." 
package basic_html;
import java.util.*;

public class ex3 {
	public static void main(String[] args) {
		ex3_bank eb = new ex3_bank();
		eb.deposit();
	}
}

class ex3_bank{
	Scanner sc = null;
	
	public void deposit() {
		this.sc = new Scanner(System.in);
		System.out.println("입금하실 금액을 입력하세요 : ");
		int money = 0;
		try {
			money = this.sc.nextInt();
			//출력이 catch아래에 있을 경우 재귀메소드를 이용했을때 출력이 재귀한만큼 나와버림 출력에 주의 
			System.out.println("입금하신 금액은 "+money+"원 입니다.");
		}catch(InputMismatchException ime) {
			System.out.println("숫자만 입력하세요");
			deposit();	//문제 발생시 재귀메소드로 재호출
		}
		catch(Exception e){
			System.out.println(e);			
		}
		finally {
			this.sc.close();			
		}		
	}
}

⭐️예외처리 주의할점 : 출력 코드가 어디에있냐에 따라 결과가 천차만별 !! 위치에 주의하자 !!

 

3. 범인찾기 throws, throw

package basic_html;
public class ex4 {

	public static void main(String[] args) {
		ex4_box eb = new ex4_box();
		try {
			eb.abc(100, "3 00");
		}
		catch(Exception e) {
			System.out.println("A개발자 코드");
			System.out.println(e);
			try{		//실무에서 활용하는 법 : 다시 트라이해서 데이터 보내서 상대코드는 맞는지 확인함
				eb.abc(500,"600");
			}catch(Exception e2) {
				System.out.println(e2);
			}
		}
		//B개발자 쪽에서 문제가 발생시 확인하는 방법
		try {
			eb.bbb("5000");	//인자값을 태워 bbb메소드 호출
		}catch(Exception e){
			e.printStackTrace();
		}
	}
}

//B개발자 코드
class ex4_box{
	public void bbb(String a) throws Exception, NumberFormatException{
		int k = Integer.valueOf(a)+Integer.valueOf("200a");
		System.out.println(k);
		Exception ep = new Exception();	//Exception 라이브러리 사용
		throw ep;	//throw : return과 비슷한 성격. 가장 아래에 작성   
	}
	public void abc(int no, String z) throws Exception {
			int sum = no + Integer.parseInt(z);
			System.out.println(sum);
	}
}
  • throws, throw : 외부 클래스에 있는 메소드를 호출, 전송 등 데이터 이관을 할 경우 문제점에 대한 정보를 서로 공유할 수 있도록 처리하는 메소드
    • throws Exception : 메소드에 적용하면 해당 메소드 호출시 무조건 예외처리 기준방침을 적용 후 호출을 해야함
    • throw :  예외처리가 발생되면 상대방에게 에러코드를 전송하며, 재전송을 요청할 수 있음
      • return과 비슷한 성격
      • 메소드의 가장 아래에 작성

😊응용문제

 [결과]
 포인트 전체 합계 : 90100
 단, 해당 배열의 값을 전달할 경우 오류발생시 오류 처리에 관한 메세지 출력

 [오류발생시]
 "정상적인 데이터를 변환하지 못하여 서비스 오류가 발생하였습니다."
package basic_html;

public class ex5 {

	public static void main(String[] args) {
		String money[] = { "5,000", "6,500", "70,000", "3,400", "5,200" };

		ex5_box eb = new ex5_box();
		eb.sumPoint(money);
	}
}

class ex5_box {
	int sum = 0;

	public void sumPoint(String[] money) {
		int i = 0;
		try {
			while (i < money.length) {
				this.sum += Integer.valueOf(money[i].replace(",", ""));
				i++;
			}
			System.out.println("포인트 전체 합계 : " + this.sum);
		} catch (Exception e) {
			System.out.println("정상적인 데이터를 변환하지 못하여 서비스 오류가 발생하였습니다.");
		}
	}
}

⭐️⭐️⭐️⭐️⭐️예외처리 주의할점 : 출력 코드가 어디에있냐에 따라 결과가 천차만별 !! 위치에 주의하자 !!

  이 문제 틀렸었다

  틀린 데이터 직접 넣어보고 예외처리가 잘 되는지 체크하기!!!

 

 

 

 

 

저작자표시 비영리 변경금지 (새창열림)
'Java' 카테고리의 다른 글
  • Java - 추상 클래스
  • Java - DTO 응용
  • Java - DTO 활용
  • Java - 클래스 배열
9na0
9na0
응애
  • 9na0
    구나딩
    9na0
  • 전체
    오늘
    어제
    • 분류 전체보기 (210)
      • Web (118)
      • Java (28)
      • 데이터베이스 (14)
      • 세팅 (12)
      • 과제 (3)
      • 쪽지시험 (2)
      • 정보처리기사 (4)
      • 서버 (24)
  • 블로그 메뉴

    • 링크

      • 포폴
      • 구깃
    • 공지사항

    • 인기 글

    • 태그

      spring-boot
      noticewriteok
      ab1
      net2
      macbook pro m4
      file25_t
      re_java10
      file25
      net3
      net4
      java_io1~10
      re2
      exam1_1~10
      net5~10
      io_dto
      Oracle
      net1
      datalist
      file24
      notice_writer
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.3
    9na0
    Java - 예외처리
    상단으로

    티스토리툴바