ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 예외처리 예시(Kotlin)
    Android_Kotlin/Kotlin_공부 2023. 8. 1. 01:00
    728x90

    메뉴 운영을 위한 간단한 코드에서 예외처리를 활용한 예시코드 입니다.

    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
Designed by Tistory.