Kotlin guessing game 개발 내용 정리
📌 사용 프로그램: IntelliJ
📌 사용 언어: Kotlin
📌 규칙
![]() | ![]() |
---|
우선, 개발 시 가장 중요하게 생각한 부분은 MVC 패턴을 사용하여 패키지를 구성한 것이다. View는 InputView와 OutputView로 나누어 작성하였다.
package main.kotlin.View
object InputView {
fun getInput(current:Int): Int {
println("현재 숫자: $current. 동작을 입력해주세요(0: 더하기, 1: 빼기, 2: 확인)")
return readLine()?.toIntOrNull() ?: -1
}
}
InputView는 입력을 받는다.
package main.kotlin.View
object OutputView {
fun showCurrentNumber(current: Int) {
println("현재 숫자: $current")
}
fun showIncorrectMessage() {
println("틀렸습니다.")
}
fun showCorrectMessage() {
println("정답입니다. 게임이 종료되었습니다.")
}
}
OutputView는 출력을 한다.
InputView와 OutputView를 class가 아닌 obejct로 선언한 이유는, 현재 숫자인 current가 선언되지 않아서이다.. 이 점은 수정 예정....🤷🏻♀️
package Model
import kotlin.random.Random
class Count {
var currentNumber: Int = 0
val targetNumber: Int = Random.nextInt(0, 11)
fun increaseNumber() {
if (currentNumber < 10) {
currentNumber++
}
}
fun decreaseNumber() {
if (currentNumber > 0) {
currentNumber--
}
}
fun isCorrect(): Boolean {
return currentNumber == targetNumber
}
}
현재 숫자인 currentNumber는 가변, 맞춰야 하는 랜덤 숫자인 targetNumber는 불변 객체로 선언하였는데, 이 또한 모두 불변 객체로 수정 예정이다.
(사실 수정했는데 실행이 안돼서 실패......🧎🏻♀️)
increaseNumber 0을 입력하였을 때, 10보다 작은 숫자까지 1씩 증가시킨다.
decreaseNumber 1을 입력하였을 때, 0보다 큰 숫자까지 1씩 감소시킨다.
isCorrect True와 Flase를 비교하는 Boolean 자료형을 적용시켜, currentNumber와 targetNumber를 비교한 값을 반환한다.
package main.kotlin.controller
import Model.Count
import main.kotlin.View.InputView
import main.kotlin.View.OutputView
class GameController(private val model: Count) {
fun startGame() {
while (true) {
val input = InputView.getInput(model.currentNumber)
when (input) {
0 -> model.increaseNumber()
1 -> model.decreaseNumber()
2 -> {
if (model.isCorrect()) {
OutputView.showCorrectMessage()
break
} else {
OutputView.showIncorrectMessage()
}
}
else -> println("잘못된 입력입니다. 0, 1, 2 중 하나를 입력해주세요.\n")
}
}
}
}
GameController에서 count 객체를 model 이라는 이름으로 사용하였는데, 이 부분 역시 수정 예정이다.
게임을 시작하면 InputView를 통해 currentNumber를 입력 받고,
0 입력시 증가,
1 입력시 감소,
2 입력시 정답일 경우 OutputView에서 정답 메세지를 출력,
오답일 경우 오답 메세지를 출력한다.
0, 1, 2가 아닌 다른 숫자를 입력할 경우, 예외 메세지를 출력한다.
개발 이후 '02' 라는 숫자를 입력했을 때, 예외 메세지가 아닌 오답 메세지가 출력되어 이 부분 역시 수정 예정이다.
package main.kotlin.View
import Model.Count
import main.kotlin.controller.GameController
fun main() {
val model = Count()
val controller = GameController(model)
println("숫자 맞추기 게임을 시작합니다.\n")
controller.startGame()
}
마지막으로 main class이다.
설명하기 전에, 게임은 main이 시작할까? controller가 시작할까?
Application(main)은, 게임의 실행을 관리하며 시스템 초기화, 인스턴스 생성 등의 주요 역할을 맡는다.
Controller는 일반적으로 게임의 핵심 로직이나 사용자와의 상호작용을 처리한다.
또, 독립적인 실행보다는 Application이나 Main 클래스에서 호출되어 실행된다.
🔎 결국, 게임의 흐름은 Application(main)에서 시작된다.
다시 코드를 설명하자면,
Count 객체의 메서드를 호출해 상태를 변경하고, isCorrect() 메서드로 정답 여부를 확인한다.
main 함수는 게임을 시작하는 출력 메세지를 출력하고, 게임 로직을 시작한다.
사실 숫자 맞추기 게임은 매우매우 기본적인 개발 실습이지만, 가변 객체와 불변 객체의 사용, class와 object의 사용 등에 더 많은 공부와 수정이 필요하다는걸 느꼈다.