-
예외처리 예시(Kotlin)Android_Kotlin/Kotlin_공부 2023. 8. 1. 01:00728x90
메뉴 운영을 위한 간단한 코드에서 예외처리를 활용한 예시코드 입니다.
InputMismatchException 예외에 대한 처리코드입니다.
InputMismatchException란?
InputMismatchException은 입력 값이 기대하는 형식과 일치하지 않을 때 발생하는 예외입니다. 예를 들어, 사용자가 문자열 대신에 정수값을 입력해야 하는 상황에서 문자열을 입력하거나, 실수값 대신에 정수값을 입력하는 경우 등이 해당됩니다.
Client.txt
gdhong 홍길동 010-1111-2222 80 gdkim 김길동 010-3333-4444 90 gdlee 이길동 010-5555-6666 75
고객의 아이디와 이름 전화번호 포인트를 갖고있는 Client.txt 파일을 준비합니다.
Client.kt
data class Client (val id: String, val name: String, val tel:String, var point:Int )
고객정보 저장을 위해 데이타 클래스인 Client클래스를 정의 합니다.
ClientManager.kt
import java.io.File import java.util.* class ClientManager { val client = <String, Client>() init { val scan = Scanner(File("client.txt"), "UTF-8") while (scan.hasNext()) { val str = scan.nextLine() val line = str.split(" ") client[line[0]] = Client(line[0], line[1], line[2], line[3].toInt()) } } fun findClient(id: String) = client[id] fun getPoint(c: Client) = c.point fun getNumber(c: Client) = c.tel }
고객 정보를 관리하는 클래스인 ClientManager를 작성합니다.
ClientMain.kt
import java.util.* import java.io.File fun main() { val scanner = Scanner(System.`in`) while (true) { println("1) 포인트 검색 2) 전화번호 검색 3) 종료") print("메뉴를 선택하세요 : ") try { val menuNum: Int? = scanner.nextInt() when (menuNum) { 1 -> { print("\\n회원 아이디를 입력하세요: ") val id = scanner.next() val manager = ClientManager() val client = manager.findClient(id) if (client != null) { val c_point: Int = manager.getPoint(client) println("$id 님의 포인트는 $c_point 입니다.\\n") } else { println("$id 님의 정보가 없습니다.\\n") } } 2 -> { print("\\n회원 아이디를 입력하세요: ") val id = scanner.next() val manager = ClientManager() val client = manager.findClient(id) if (client != null) { val c_tel: String = manager.getNumber(client) println("$id 님의 전화번호는 $c_tel 입니다.\\n") } else { println("$id 님의 정보가 없습니다.\\n") } } 3 -> { println("\\n시스템을 종료합니다. ") return } else -> { println("메뉴를 잘못 입력하셨습니다") } } } catch (e: InputMismatchException) { println("잘못된 입력입니다. 메뉴를 다시 선택해주세요.") scanner.nextLine() } } }
이 코드는 콘솔에서 고객의 포인트나 전화번호를 검색하는 기능을 제공합니다.
예외처리부분
try{ val menuNum: Int? = scanner.nextInt() when (menuNum) { // ... 중략 ... } } catch(e: InputMismatchException) { println("잘못된 입력입니다. 메뉴를 다시 선택해주세요.") scanner.nextLine() // 잘못된 입력이 있을 경우, 스캐너의 버퍼를 비워줌 }
try-catch 구문을 사용하여 **scanner.nextInt()**에서 예외가 발생하는 경우 catch 블록이 실행됩니다. 여기서는 InputMismatchException을 처리하고 있습니다. 즉, 사용자가 정수가 아닌 다른 값을 입력하거나 엔터키만 입력하는 경우 등이 해당합니다.
catch 블록에서는 해당 예외가 발생했을 때 출력할 메시지를 출력하고, **scanner.nextLine()**을 호출하여 스캐너의 버퍼를 비워줍니다. 이는 사용자가 다음에 입력할 값을 받기 전에 이전에 입력한 값을 제거하는 역할을 합니다. 그렇지 않으면 이전에 입력한 값이 계속해서 버퍼에 남아있어 다음 입력값을 받을 때 오류가 발생할 수 있습니다.
예외처리를 한 이유
사용자가 정수 이외의 값을 입력했을 때, scanner.nextInt() 메소드는 InputMismatchException 예외를 발생시키게 됩니다. 이 때, 예외처리를 하지 않으면 프로그램이 강제로 종료됩니다.
따라서 예외처리를 통해 사용자가 잘못된 값을 입력했을 때도 프로그램이 계속 실행될 수 있도록 처리하기 위해 예외처리 구문을 추가했습니다.
'Android_Kotlin > Kotlin_공부' 카테고리의 다른 글
제어문 다루기 1 (0) 2023.03.19 코틀린에서의 입력 다루기 (0) 2023.03.17 Hello world!(출력) (0) 2023.03.16 1.코틀린의 등장 (0) 2023.03.15