Notice
Recent Posts
Recent Comments
Link
«   2024/07   »
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 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

WON.dev

chapter19 : exception 본문

JAVA

chapter19 : exception

GAWON 2023. 5. 16. 18:35
1.1 예외 (exception)
 - 오류(error)의 일종이며 프로그램이 수행시 또는 컴파일시에 불능 상태를 말한다.
	1) 오류 : 에러, 개발자가 손 못대는 수준
	2) 예외 : 개발자가 회피 할 수 있는 수준
	3) 예외클래스의 계층 구조
		Object - Throwable - Exception - RuntimeException
									   - IOException
									   - ClassNotFoundException
									   - ...
									   - 사용자 정의 예외
	4) 모든 예외는 java.lang.Exception 클래스로 처리 할 수 있다.

1.2 예외 처리 형식
★	try {
		...
		예외가 발생 할 가능성이 있는 구역
		...
★	} catch (예외를 받는 매개변수) {
		받은 예외를 처리하는 구역
	} finally {
		예외유무를 떠나 무조건 실행되는 구역
  }
1.3 예외 종류
 - 일반 예외(Exception) - java.lang.Exception
 	컴파일 시 발생하는 Exception
 - 실행 예외(Runtime Exception) - java.lang.RuntimeException
 	실행 시 발생하는 Exception
 	*Exception>RuntimeException

1.4 주로 발생하는 예외
 - NullPointerException				:	객체 참조가 없는 상태,
                                즉 null 값을 갖는 객체를 사용하는 경우 예외 발생
 - ArrayIndexOutOfBoundsException	:	배열에서 인덱스 범위를 초과할 경우 예외 발생
 - ArithmeticException					:정수를 0으로 나눌 경우 예외 발생
 - NumberFormatException			:주어진 문자열을 정수 및 실수로 변환하지 못할 경우 예외 발생
 - ClassCastException				:클래스간의 타입 변환을 할 수 없을 경우 예외 발생
Q2. Test02.java
사용자로부터 10이상의 정수를 입력 받아 난수 (0 ~ 9)로 나눈결과를 출력하시오.
위과정을 100번 반복하여 출력하며, 나눌 수없는 경우에는 나눈 결과를 0으로 대신출력한다.

import java.util.Random;
import java.util.Scanner;

public class Test02 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        // 10 이상의 정수를 입력 받음
        int n;
        do {
            System.out.print("10 이상의 정수를 입력하세요: ");
            n = scanner.nextInt();
        } while (n < 10);

        Random rand = new Random();

        for (int i = 1; i <= 100; i++) {
            int randNum = rand.nextInt(10);  // 0~9 사이의 난수 생성
            int result = 0;
            if (randNum != 0) {  // 0으로 나눌 수 없는 경우에만 나누기 진행
                result = n / randNum;
            }
            System.out.println(i + ": " + result);
        }
    }
}

Q3. Test03.java
나이를 입력 받아 출력하시오.
나이가 0 ~ 150 사이의 범위를벗어나면 AgeException 클래스를 이용하여 예외를 처리하시오.
나이를 입력 받기 위해 getAge() 메소드를 이용하시오.
import java.util.Scanner;

class AgeException extends Exception {
    public AgeException(String message) {
        super(message);
    }
}

public class Test03 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int age = 0;

        try {
            age = getAge(scanner);
            System.out.println("입력하신 나이는 " + age + "살입니다.");
        } catch (AgeException e) {
            System.out.println(e.getMessage());
        }
    }

    public static int getAge(Scanner scanner) throws AgeException {
        System.out.print("나이를 입력하세요: ");
        int age = scanner.nextInt();

        if (age < 0 || age > 150) {
            throw new AgeException("나이는 0살 이상 150살 이하로 입력해주세요.");
        }

        return age;
    }
}

Q4. Test04.java
주민등록 번호 (하이픈 포함)를 입력 받아 출력하시오.
주민등록번호가 14글자가 아니면 PerIDException 클래스를 이용하여 예외를 처리하시오.
주민등록번호를 입력받기 위해 getPerID() 메소드를 이용하시오.
import java.util.Scanner;

class PerIDException extends Exception {
    public PerIDException(String message) {
        super(message);
    }
}

public class Test04 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String perID = "";

        try {
            perID = getPerID(scanner);
            System.out.println("입력하신 주민등록번호는 " + perID + "입니다.");
        } catch (PerIDException e) {
            System.out.println(e.getMessage());
        }
    }

    public static String getPerID(Scanner scanner) throws PerIDException {
        System.out.print("주민등록번호를 입력하세요: ");
        String perID = scanner.nextLine();

        if (perID.length() != 14) {
            throw new PerIDException("주민등록번호는 14자리로 입력해주세요.");
        }

        return perID;
    }
}

Q5. Test05.java
Up-Down 게임
1 ~ 100 사이의 난수를 발생시켜 해당 값을 맞출때까지 게임을 진행하시오.
다음의 경우 예외를 발생시키시오.
1) 사용자가 1 ~ 100 이외의 값을 입력한 경우 NumberOutOfBoundsException 클래스를 이용하여 예외 처리
2) 정수대신 다른 데이터 (예: 실수, 문자) 등을 입력한 경우
import java.util.InputMismatchException;
import java.util.Random;
import java.util.Scanner;

class NumberOutOfBoundsException extends Exception {
    public NumberOutOfBoundsException(String message) {
        super(message);
    }
}

public class Test05 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        Random random = new Random();
        int answer = random.nextInt(100) + 1; // 1 ~ 100 사이의 난수 발생
        int guess = 0;

        while (true) {
            System.out.print("1부터 100까지의 숫자 중 하나를 입력하세요: ");

            try {
                guess = scanner.nextInt();

                if (guess < 1 || guess > 100) {
                    throw new NumberOutOfBoundsException("숫자는 1부터 100까지의 범위 내에서 입력해주세요.");
                }

                if (guess == answer) {
                    System.out.println("정답입니다!");
                    break;
                } else if (guess < answer) {
                    System.out.println("Up!");
                } else {
                    System.out.println("Down!");
                }
            } catch (InputMismatchException e) {
                System.out.println("잘못된 입력입니다. 숫자를 입력해주세요.");
                scanner.nextLine(); // 입력 버퍼 비우기
            } catch (NumberOutOfBoundsException e) {
                System.out.println(e.getMessage());
                scanner.nextLine(); // 입력 버퍼 비우기
            }
        }
    }
}

'JAVA' 카테고리의 다른 글

chapter21 : thread  (0) 2023.05.16
chapter20 : api  (0) 2023.05.16
chapter18 : interface  (0) 2023.05.16
chapter17 : abstract  (0) 2023.05.16
chapter16 : polymorphism  (0) 2023.05.16