-
[코틀린] 03.Kotlin/Native - 첫 컴파일과 숫자야구 게임안드로이드/코틀린 2019. 12. 2. 14:54
이 블로그에서 사용하는 몇가지 IT 용어 정리.
compile (컴파일)은 (주로 영어단어로 이루어진) 고급 프로그래밍 언어 소스(if, for, ...)를 컴퓨터가 알 수 있는 기계어(01000010, 10011000, ...)로 번역하는 것을 의미한다. 이 때, 번역을 처리하는 프로그램을 compiler(컴파일러)라고 한다.
윈도우의 폴더 (folder)는 디렉토리 (directory)와 동일한 의미로 사용한다.이전 블로그에서 윈도우 '명령 프롬프트' 창에서 코틀린 소스를 컴파일 할 수 있는 Kotlin/Native를 설치 해 보았다.
2019/11/28 - [안드로이드/코틀린+안드로이드 스튜디오] - [코틀린] 01.소개와 맛보기
2019/11/28 - [안드로이드/코틀린+안드로이드 스튜디오] - [코틀린] 02.Kotlin/Native - 설치하기
코틀린/네이티브 설치 – 3. 첫 컴파일
이 블로그에서는 "Hello, Kotlin/Native!!"를 화면에 출력하기 위해 아래 순서로 진행할 것이다.
1) 윈도우 '명령 프롬프트' 창 열기
2) 코틀린 소스가 저장될 폴더 생성하기 (kotlin_test 폴더 생성)
3) 코틀린 소스 만들기 (test1.kt 파일 생성)
4) 컴파일 하기 (이 때 .konan 이라는 컴파일용 파일 2.8GB가 자동 설치 된다)
5) 실행하여 확인 하기
차근차근 따라 해 보자.
1) 코틀린 소스를 컴파일 하기 위해 윈도우의 '명령 프롬프트' 창을 연다.
윈도우 하단 작업표시줄의 '검색' 창에서 'cmd' 명령어를 입력 후 엔터키를 치거나, 화면에 나타나는 '명령 프롬프트'를 선택한다.
2) 코틀린 소스가 저장될 폴더를 생성한다.
폴더 생성은 탐색기에서 '새로 만들기 > 폴더'로 생성해도 된다. 하지만, 험난한 길을 선택했으니 커맨드 명령어로 폴더를 생성 해 보자.
① 탐색기 좌측에서 자신의 컴퓨터에 드라이브 'C:' 나 'D:' 가 있는지 확인 하고 코틀린 소스를 저장할 곳을 정한다.
가능하면 윈도우 드라이브는 최소 2개 이상으로 나누어 프로그램 저장 공간(C:)과 자료 저장 공간(D:)으로 분리하는 것이 좋다. 프로그램 저장 공간은 USB나 인터넷으로 언제든지 프로그램을 찾아 설치할 수 있는 공간으로 복구가 불가능한 상황이 와도 당황하지(?) 않는 것들을 저장하고, 자료 저장 공간은 나만의 자료가 모여 있는 곳으로 백업의 필요성이 높은 곳이다. ② 코틀린 소스를 저장하기 위한 폴더를 만든다.
(이 블로그는 D드라이브에 ‘D:\kotlin_test’ 폴더를 만들었다.)
-
d: : D드라이브로 이동하는 명령어
-
mkdir kotlin_test : kotlin_test라는 폴더를 만드는 명령어 (mkdir = make directory)
-
cd kotlin_test : kotlin_test라는 폴더로 이동하는 명령어 (cd = change directory)
③ 윈도우 메모장(notepad)을 열어 코틀린 소스를 입력하는 파일(test1.kt)을 생성한다.
-
notepad test1.kt : 코틀린 소스의 확장자는 .kt 이다.
④ 메모장이 나타나고 '새 파일을 만드시겠습니까?' 하면 '예'를 클릭한다.
⑤ 아래 코틀린 소스를 입력한 후 '메뉴 파일 > 저장' 또는 단축키 'Ctrl+S'로 저장한다.
fun main() { println("Hello, Kotlin/Native!!") }
다른 방법으로는 'copy con test1.kt' 명령어를 사용하여 일수불퇴 정신으로 한 땀, 한 땀 입력하는 방법이 있다. (Ctrl+Z 로 저장 후 빠져나옴) ⑥ '명령 프롬프트' 창에서 'kotlinc-native test1.kt –o test1'을 입력하여 엔터키를 친다.
-
kotlinc-native : Kotlin/Native 컴파일러를 실행하는 윈도우 스크립트
-
test1.kt : 코틀린 소스 파일
-
-o test1 : 컴파일된 파일명 (test1.exe가 생성된다. test1을 기억하자.)
⑦ Kotlin/Native를 처음으로 컴파일하면 최초 1회만 아래와 같이 .konon 이라는 2.8GB 분량의 파일을 다운로드 받는다. 잠시 기다리자.
⑧ 다운로드 후 정상적으로 컴파일 되면 아래와 같이 프롬프트가 나타난다.
⑨ 컴파일된 test1.exe 파일을 실행한다.
(이 블로그에서는 '명령 프롬프트' 창의 화면을 깨끗이 지운 다음 생성된 파일을 확인하고 실행했다.)
-
cls : '명령 프롬프트' 창의 화면을 지우는 명령어 (cls = clear screen)
-
dir : 폴더 내의 파일 목록을 보는 명령어 (dir = directory)
-
test1 : 윈도우에서 실행 가능한 파일 확장자는 '.exe, .bat' 이다. 따라서, 파일명만 입력하면 해당 확장자를 가진 파일을 찾아서 실행한다.
"Hello, Kotlin/Native!!"가 출력 되었다.
이 한 줄을 보기 위해 많은 과정을 거쳤다.
잠시 머리를 식히기 위해 ‘숫자야구 게임’을 만들어 보겠다.
코틀린/네이티브 - 숫자야구 게임
'숫자야구' 게임은 컴퓨터가 추출한 0~9 까지 중복 없는 숫자 3개를 플레이어가 맞추는 커맨드 라인 기반 게임이다. (외국에서는 Bulls and cows라 하며, 중복 없는 숫자 4개를 추출 한다.)
숫자야구 게임은 '명령 프로프트' 창에서 (중복 없는) 3개의 숫자를 입력하여 컴퓨터가 생성한 숫자를 맞추는 게임이다. 실행을 중지하고 싶으면 'Ctrl+C' 를 눌러 빠져 나온다. [게임 방식]
1) 컴퓨터가 0~9 사이 숫자 중 난수 3개를 만든다.
2) 플레이어가 생각하는 (중복 없는) 3자리 숫자를 입력한다.
3) 플레이어 숫자와 컴퓨터 숫자 간 위치와 숫자가 맞으면 맞은 숫자만큼 '스트라이크'가 된다.
4) 플레이어 숫자와 컴퓨터 숫자 간 숫자는 맞는데 위치가 다르면 맞은 숫자만큼 '볼'이 된다.
[예시]
>컴퓨터 숫자 : 592
>플레이어 추측 : 123 (0스트라이크 1볼)
>플레이어 추측 : 567 (1스트라이크 0볼)
>...
>플레이어 추측 : 592 (3스트라이크 0볼) - 정답입니다.
컴파일 순서는 아래와 같다. 위 '3. 첫 컴파일' 항목과 비슷하니 비교하면서 실습해 보시길 바란다.
① 윈도우 메모장(notepad)을 열어 코틀린 소스를 입력하는 파일(game1.kt)을 생성한다.
② 메모장이 나타나고 '새 파일을 만드시겠습니까?' 하면 '예'를 클릭한다.
③ 아래 코틀린 소스를 입력(또는 복사)한 후 '메뉴 파일 > 저장' 또는 단축키 'Ctrl+S'로 저장한다.
④ '명령 프롬프트' 창에서 'kotlinc-native game1.kt –o game1'을 입력하여 엔터키를 친다.
('3. 첫 컴파일' 항목에서 .konon을 다운로드 받았으므로 바로 컴파일이 된다.)
⑤ 컴파일된 game1.exe 파일을 실행한다.
숫자야구 게임 전체 소스는 아래와 같다.
// game1.kt fun main() { // ----- ----- ----- ----- ----- ----- ----- ----- // 012~987 사이 중복 없는 3자리 난수 생성 var 컴숫자: String var 컴숫자_임시 = Array(3, {0}) 컴숫자_임시[0] = (0..9).random() do { 컴숫자_임시[1] = (0..9).random() } while ( 컴숫자_임시[1] == 컴숫자_임시[0] ) do { 컴숫자_임시[2] = (0..9).random() } while ( 컴숫자_임시[2] == 컴숫자_임시[0] || 컴숫자_임시[2] == 컴숫자_임시[1] ) 컴숫자 = "${컴숫자_임시[0]}${컴숫자_임시[1]}${컴숫자_임시[2]}" // ----- ----- ----- ----- ----- ----- ----- ----- // 게임 시작 val 입력기회 = 9 var 내숫자: String var 입력횟수 = 0 println("\n0~9 사이 (중복 없는) 숫자 3개를 추측해 보세요.") println("최대 ${입력기회} 번의 기회가 있습니다.\n") while (true) { // 플레이어 숫자 입력 print("추측 숫자는? : ") 내숫자 = readLine()!! // ----- ----- ----- ----- ----- ----- ----- ----- // 입력값 검증 val 검증 = """^\d{3}$""".toRegex() if (검증.find(내숫자) == null || 내숫자.toSet().size < 3) println("\n 중복 없는 3자리 숫자를 넣으세요.\n") // ----- ----- ----- ----- ----- ----- ----- ----- // 판정 else { var 스트라이크 = 0 var 볼 = 0 for ((i, v) in 내숫자.withIndex()) { if (컴숫자[i] == v) 스트라이크++ else if (v in 컴숫자) 볼++ } println("\n 판정 결과 : 스트라이크 = ${스트라이크} 볼 = ${볼}\n") 입력횟수++ // ----- ----- ----- ----- ----- ----- ----- ----- // 입력기회 초과 시 처리 if (입력횟수 == 입력기회) { print("\n 도전 가능 횟수 ${입력횟수} 번을 넘었습니다. ") println("정답은 ${컴숫자} 입니다. 다시 도전하세요.\n") return } } // ----- ----- ----- ----- ----- ----- ----- ----- // 성공 메시지 if (내숫자 == 컴숫자) { when { 입력횟수 <= 3 -> print("\n 놀랍습니다!!! ") 입력횟수 <= 5 -> print("\n 매우 좋습니다!!! ") else -> print("\n 축하합니다!!! ") } println("${입력횟수} 번 만에 맞추었습니다!\n") return } } // end while } // end main
어디까지나 머리를 식히는 용도이므로 그냥 즐기면 좋겠지만 궁금하신 분들을 위해 소스를 간략하게 설명하자면...
1) 코틀린은 한글 변수 선언이 가능하다. (안드로이드 스튜디오도 마찬가로 한글 변수 선언이 가능함)
2) '컴숫자_임시[0] = (0..9).random()' : 0~9 사이의 숫자 중 난수를 생성하여 첫 번째 배열에 넣음. 두 번째, 세 번째 배열도 난수를 생성하지만, 이전 배열과 같은 숫자가 나오면 다시 난수를 생성 함.
3) '내숫자 = readLine()!!' : '명령 프롬프트' 창에서 엔터키를 칠때까지 키보드 입력 받음
4) 'val 검증 = """^\d{3}$""".toRegex()' : 키보드로 입력 받은 값을 검증하기 위한 정규식. '처음(^)에서 숫자(\d) 3자리({3})로 끝($)'인 값을 찾음.
5) '내숫자.toSet().size < 3' : 변수 '내숫자'에 입력된 값의 요소 집합 크기를 비교하여 중복된 숫자가 있는지 확인 (예, '122'의 요소 집합은 '1, 2'로 크기는 2임)
6) 'for ((i, v) in 내숫자.withIndex()) { ... }' : 변수 '내숫자'와 '컴숫자'의 숫자를 하나하나 비교하기 위한 for문. 아래 for문과 같음.
for (i in 내숫자.indices) { if (컴숫자[i] == 내숫자[i]) 스트라이크++ else for (j in 컴숫자.indices) { if (컴숫자[j] == 내숫자[i]) 볼++ } }
7) 'when { 입력횟수 <= 3 -> print(...) ...}' : if문을 좀 더 보기 좋게 만든 when문. 아래 if문과 같음. (코틀린에서는 좀 더 다양한 형태의 when문이 지원 된다)
if (입력횟수 <= 3) print("\n 놀랍습니다!!! ") else if (입력횟수 <= 5) print("\n 매우 좋습니다!!! ") else print("\n 축하합니다!!! ")
윈도우 메모장(notepad)으로 2개의 코틀린 소스(test1.kt, game1.kt)를 입력하고 컴파일 해 보았다.
많이 답답하지 않은가?
소문에 의하면 윈도우 메모장만으로 프로그래밍을 하는 고수 개발자가 있다고 한다.
개인 취미로는 괜찮지만 업무상으로는 글쎄요...
다음 회에서는 윈도우 메모장보다 기능이 많은 '노트패드++'를 이용한 Kotlin/Native 개발 환경을 만들어, 윈도우 메모장보다는 쾌적한 개발 환경을 구성해 보겠다.
한 번 더 이야기 하지만, 'IntelliJ IDEA Community Edition'을 설치하면 매우~ 쾌적한 개발 환경에서 실습할 수 있다.
'안드로이드 > 코틀린' 카테고리의 다른 글
[코틀린] 05.Kotlin/Native - 노트패트++로 개발환경 만들기 (2/3) (0) 2020.02.14 [코틀린] 04.Kotlin/Native - 노트패드++로 개발환경 만들기 (1/3) (0) 2020.02.13 [코틀린] 02.Kotlin/Native - 설치하기 (0) 2019.11.28 [코틀린] 01.소개와 맛보기 (0) 2019.11.28 -