[Kotlin][6]코틀린 타이머 만드는 방법[강좌]

코틀린 타이머 만들기 메인 이미지

안녕하세요. 오늘은 지난 포스팅까지 배운 코틀린의 기초 내용을 바탕으로, 사용자로부터 입력받은 시간만큼 작동하는 초시계(타이머)를 직접 만들어 보겠습니다.

실제로 작동하는 코드를 작성해 보면서 타이머 함수와 입력 처리 로직을 익혀보도록 하죠. 그럼 바로 시작해 보겠습니다.

코틀린 타이머 만드는 방법

본격적인 설명에 앞서 제가 미리 작성한 타이머 전체 코드를 보여드리겠습니다. 먼저 코드를 가볍게 훑어본 뒤, 각 줄이 어떤 역할을 하는지 상세히 설명해 드릴게요.

import kotlin.concurrent.timer

fun main() {
    var inputtedData : String?
    var minute = 0
    var second = 0

    do {
        print("시간을 입력해주세요.(분) : ")
        inputtedData = readLine()
    } while (inputtedData!!.isEmpty() || inputtedData.toInt() < 0 || inputtedData.toInt() >= 60)

    minute = inputtedData.toInt()

    timer(period = 1000) {
        print(String.format("\n%02d : %02d", minute, second))

        if (second == 0 && minute == 0) {
            println("\n타이머 종료")
            cancel()
        }

        if (second == 0) {
            minute--
            second = 60
        }
        second--
    }
}

위 코드는 사용자로부터 1분에서 60분 사이의 숫자를 입력받아 1초씩 감소시키며 작동하는 간단한 타이머 프로그램입니다. 이제 주요 코드 블록을 나누어 분석해 보겠습니다.

import kotlin.concurrent.timer
fun main()

코틀린에서 timer 함수를 사용하기 위해서는 kotlin.concurrent.timer 라이브러리를 임포트(Import)해야 합니다. 라이브러리를 추가한 뒤 프로그램의 시작점인 메인 함수를 선언했습니다.

    var inputtedData : String?
    var minute = 0
    var second = 0

사용자가 입력한 값을 저장할 변수 inputtedData를 생성합니다. 자료형 뒤에 ?를 붙인 이유는 readLine()을 통해 null 값이 들어올 가능성에 대비하기 위해서입니다. 이어서 분(minute)과 초(second)를 저장할 변수를 정수형(Int)으로 초기화합니다.

    do {
        print("시간을 입력해주세요.(분) : ")
        inputtedData = readLine()
    } while (inputtedData!!.isEmpty() || inputtedData.toInt() < 0 || inputtedData.toInt() >= 60)

    minute = inputtedData.toInt()

do-while 반복문을 사용하여 올바른 값이 입력될 때까지 입력을 받습니다. isEmpty() 함수를 사용하여 문자열이 비어있는지 확인하고, 입력된 숫자가 음수이거나 60을 초과하지 않는지 검사하는 조건을 추가했습니다. 검증이 완료된 데이터는 정수형으로 변환하여 minute 변수에 할당합니다.

timer(period = 1000) {
        print(String.format("\n%02d : %02d", minute, second))
        if (second == 0 && minute == 0) {
            println("\n타이머 종료")
            cancel()
        }
        if (second == 0) {
            minute--
            second = 60
        }
        second--
    }

이제 timer 함수를 호출합니다. 주기(period)를 1000ms(1초)로 설정하여 1초마다 블록 내부의 코드가 실행되도록 합니다. String.format()을 활용하면 C언어의 printf처럼 형식을 지정할 수 있는데, %02d를 사용해 한 자리 숫자라도 ’00’의 형태로 출력되게 만들었습니다.

조건문을 통해 분과 초가 모두 0이 되면 cancel()을 호출해 타이머를 종료하고, 초가 0이 될 때마다 분을 1 감소시키며 초를 60으로 초기화하는 로직을 구현했습니다.

이 과정을 모두 마치면 코틀린 기반의 간단한 타이머가 완성됩니다. 아래는 프로그램 실행 결과와 종료 시의 모습입니다.

코틀린 타이머 코드 실행 사진
코틀린 타이머 종료 사진

오늘은 코틀린을 활용하여 실무에서도 응용 가능한 타이머 프로그램을 만들어 보았습니다. 다음 포스팅에서는 이번에 배운 로직을 안드로이드 환경으로 옮겨, 실제 스마트폰에서 작동하는 ‘타이머 어플리케이션’을 만드는 과정을 다뤄보겠습니다.

긴 글 읽어주셔서 감사합니다. 궁금한 점은 댓글로 남겨주세요!

관련 강좌 다시 보기


이 글의 저작권은 전적으로 작성자인 P_Emblem에게 있으며, 허락 없는 무단 전재 및 재배포를 금합니다.

위로 스크롤