문제 5 는 아래 코드에서 함수 isOperatingHours()를 완성하면 됩니다. 수학 문제 풀 때 어떻게 합니까? "이런 문제 유형은 이렇게 풀어야지" 하는 생각이 머리에 떠올라야죠. 코딩도 마찬가지입니다. "머릿 속에 떠올려야 하는 내용들을 중심으로" 순서대로 하나씩 알아보겠습니다.
enum class MallInfo(val opens: Int, val closes: Int) {
HYUNDAI(10, 20),
LOTTE(11, 21),
SHINSEGYE(9, 19)
}
fun main() {
println(isOperatingHours(MallInfo.LOTTE, 9))
println(isOperatingHours(MallInfo.HYUNDAI, 21))
}
fun isOperatingHours(mall: MallInfo, h: Int): Boolean { // 미완성 코드
}
■ 단계 1: 함수 isOperatingHours()
fun isOperatingHours(mall: MallInfo, h: Int): Boolean 에서 함수 signature를 보면 형식 인자가 2개입니다. "이 파라미터는 왜 필요하며 어떻게 사용할까" 생각해야 합니다. 함수의 반환 타입은 Boolean입니다. 따라서 함수 본문에 return 문이 필요합니다.
fun isOperatingHours(mall: MallInfo, h: Int): Boolean {
return answer
}
■ 단계 2: when 문의 조건
when 문에서 조건(when 다음에 오는 괄호 식)으로 판별해야 하는 것은 어느 백화점인가 입니다. 어느 백화점인지 알려면 함수의 형식 인자 mall: MallInfo 를 사용하면 됩니다. 또, when 문과 enum class를 같이 사용할 때는 else 를 사용하지 않아도 됩니다(책 91쪽에 설명이 있습니다).
when (mall) {
MallInfo.HYUNDAI ->
MallInfo.LOTTE ->
MallInfo.SHINSEGYE ->
}
■ 단계 3: 개장 시간인지 확인
백화점마다 개장 시간(opens) 및 폐장 시간(closes)이 다릅니다. 함수의 형식 인자 h: Int(현재 시간)가 개장 시간 및 폐장 시간 범위 안에 있는지 확인해야 합니다(시간을 다루는 타입이 따로 있지만, 여기서는 간단히 Int 타입을 사용합니다). 범위를 지정할 수 있는 in 연산자를 사용하는 게 좋습니다.
fun isOperatingHours(mall: MallInfo, h: Int): Boolean {
var answer = false
when (mall) {
MallInfo.HYUNDAI -> answer = h in MallInfo.HYUNDAI.opens..MallInfo.HYUNDAI.closes
MallInfo.LOTTE -> answer = h in MallInfo.LOTTE.opens..MallInfo.LOTTE.closes
MallInfo.SHINSEGYE -> answer = h in MallInfo.SHINSEGYE.opens..MallInfo.SHINSEGYE.closes
}
return answer
}
■ 단계 4: when 문을 when 식으로 수정
위 코드가 틀리진 않았지만, 뭔가 어색하죠. when 문을 when 식으로 바꾸면 코드가 깔끔합니다. 어디가 어떻게 바뀌었는지 확인해 보세요. 몇 번 연습하다 보면 이런 스타일의 코드를 쉽게 작성할 수 있습니다.
fun isOperatingHours(mall: MallInfo, h: Int) =
when (mall) {
MallInfo.HYUNDAI -> h in MallInfo.HYUNDAI.opens..MallInfo.HYUNDAI.closes
MallInfo.LOTTE -> h in MallInfo.LOTTE.opens..MallInfo.LOTTE.closes
MallInfo.SHINSEGYE -> h in MallInfo.SHINSEGYE.opens..MallInfo.SHINSEGYE.closes
}
'코틀린' 카테고리의 다른 글
코틀린: 함수형 프로그래밍과 일급 객체 (0) | 2024.09.30 |
---|---|
코틀린 : 2장 테스트에 도전해 보세요(6번 정답 해설) (0) | 2024.09.30 |
코틀린 : 2장 테스트에 도전해 보세요 (0) | 2024.09.14 |
코틀린: in과 범위 연산 (0) | 2024.09.14 |
1장 - 테스트에 도전해 보세요(정답 해설) (0) | 2024.09.14 |