오늘은 Kotlin의 프린트 함수를 사용하는 방법과 콘솔에서 사용자 입력을 받고 파싱하는 방법을 배울 것입니다. 또한 Kotlin REPL에 대해서도 알아볼 것입니다.
Kotlin 프린트 함수
화면에 무언가를 출력하기 위해 다음 두 가지 메서드를 사용합니다:
- print()
- println()
print
문은 그 안에 있는 모든 내용을 화면에 출력합니다. println
문은 출력 끝에 개행을 추가합니다. 프린트 문은 내부적으로 System.out.print
를 호출합니다. 다음 코드는 프린트 문이 작동하는 것을 보여줍니다:
fun main(args: Array<String>) {
var x = 5
print(x++)
println("Hello World")
print("Do dinasours still exist?\n")
print(false)
print("\nx is $x.")
println(" x Got Updated!!")
print("Is x equal to 6?: ${x == 6}\n")
}
프린트 문 안에서 변수를 출력하려면, 변수/상수 이름 뒤에 이중 따옴표로 둘러싸인 문자열 리터럴 내부에 달러 기호($)를 사용해야 합니다. 식의 결과를 출력하려면 ${ //식이 여기에 들어갑니다 }
를 사용합니다. 위의 코드를 Kotlin 온라인 컴파일러에서 실행한 결과는 아래와 같습니다.
이스케이프 리터럴과 표현식
달러 기호를 이스케이프하고 ${expression}을 문자열로만 처리하고 계산하지 않도록 하려면, 이스케이프할 수 있습니다.
fun main(args: Array<String>) {
val y = "\${2 == 5}"
println("y = ${y}")
println("Do we use $ to get variables in Python or PHP? Example: ${'$'}x and ${'$'}y")
val z = 5
var str = "$z"
println("z is $str")
str = "\$z"
println("str is $str")
}
간단한
$
는 변수나 표현식 없이 사용되면 이스케이프 처리되어 문자열의 일부로 취급됩니다.
함수 값 출력
fun sumOfTwo(a: Int, b: Int) : Int{
return a + b
}
fun main(args: Array<String>) {
val a = 2
val b = 3
println("Value of ${'$'}a and ${'$'}b is : ${sumOfTwo(a,b)}")
println(println("Printing Value of ${'$'}a and ${'$'}b is : ${sumOfTwo(a,b)}"))
}
다음 출력이 표시됩니다: 참고: 내부에 print를 전달하면 재귀처럼 동작합니다. 가장 내부에 있는 것이 먼저 출력됩니다. print 문은
Unit
(Java의 void에 해당)을 반환합니다.
Kotlin 사용자 입력
사용자 입력을 받으려면 다음 두 가지 방법을 사용할 수 있습니다:
- readLine()
- Scanner 클래스
참고: 사용자 입력은 명령 줄 도구가 필요합니다. REPL 또는 IntelliJ를 사용할 수 있습니다. 여기서는 IntelliJ를 사용하겠습니다.
readLine() 사용
readLine()
은 null 값이 발생할 수 있는 경우에 대비하여 String? 타입의 값을 반환합니다. 다음 코드는 readLine()
을 사용한 예제를 보여줍니다.
fun main(args: Array<String>) {
println("Enter your name:")
var name = readLine()
print("Length is ${name?.length}")
}
보시다시피 우리는 속성에 대한 String 타입 함수를 사용하기 위해 nullable 타입을 언래핑해야 합니다. 값이 null이 아닐 경우에만 String?을 String으로 강제 변환하려면 !!를 사용하세요. 그렇지 않으면 프로그램이 충돌할 수 있습니다. 입력을 정수로 변환 입력 String을 Int로 변환하려면 다음과 같이 합니다:
fun main(args: Array<String>) {
var number = readLine()
try {
println("Number multiply by 5 is ${number?.toInt()?.times(5)}")
} catch (ex: NumberFormatException) {
println("Number not valid")
}
}
다시 한 번 ?.
연산자를 사용하여 nullable 타입을 우선적으로 Int로 변환합니다. 그런 다음 5로 곱합니다. 연속적인 입력 읽기 아래와 같이 do while 루프를 사용하여 연속적인 입력을 읽을 수 있습니다.
do {
line = readLine()
if (line == "quit") {
println("Closing Program")
break
}
println("Echo $line")
} while (true)
}
위 코드의 IntelliJ Command Line 출력은 아래와 같습니다.
split 연산자를 사용하여 여러 값 읽기
구분 기호로 구분된 여러 값을 읽고 아래와 같이 튜플 형식으로 저장할 수 있습니다.
fun readIntegers(separator: Char = ',')
= readLine()!!.split(separator).map(String::toInt)
fun main(args: Array<String>) {
println("Enter your values:")
try {
val (a, b, c) = readLine()!!.split(' ')
println("Values are $a $b and $c")
} catch (ex: IndexOutOfBoundsException) {
println("Invalid. Missing values")
}
try {
val (x, y, z) = readIntegers()
println("x is $x y is $y z is $z")
} catch (ex: IndexOutOfBoundsException) {
println("Invalid. Missing values")
}
catch (ex: NumberFormatException) {
println("Number not valid")
}
}
split
함수는 구분 기호가 될 문자를 취합니다. readIntegers()
함수는 각 값을 Int로 변환하기 위해 split에 대한 맵을 사용합니다. 튜플에서 지정된 값보다 작은 값을 입력하면 IndexOutOfBoundsException이 발생합니다. 우리는 두 입력 모두에 try-catch를 사용했습니다. 출력은 다음과 같습니다: 대안으로 튜플 대신 아래에 표시된 대로 리스트를 사용할 수도 있습니다.
val ints: List<String>? = readLine()?.split("|".toRegex())
println(ints)
Kotlin Scanner Class
입력을 받기 위해 Scanner(System.`in`)
을 사용할 수 있습니다. 이는 표준 입력 키보드에서 입력을 받습니다. 다음 코드는 동일한 것을 보여줍니다:
fun main(args: Array) {
val reader = Scanner(System.`in`)
print("Enter a number: ")
// nextInt()는 다음 정수를 읽습니다. next()는 문자열을 읽습니다
var integer:Int = reader.nextInt()
println("You entered: $integer")
reader.nextInt()
는 다음 정수를 읽습니다. reader.next()
는 다음 문자열을 읽습니다. reader.nextFloat()는 다음 float를 읽고 이와 같이 계속됩니다. reader.nextLine()
은 Scanner를 nextLine으로 전달하고 버퍼를 지웁니다. 다음 코드는 print 문 안에서 다양한 유형의 입력을 읽는 것을 보여줍니다.
import java.util.*
fun main(args: Array) {
val reader = Scanner(System.`in`)
print("Enter a number: ")
try {
var integer: Int = reader.nextInt()
println("You entered: $integer")
} catch (ex: InputMismatchException) {
println("Enter valid number")
}
enterValues(reader)
//스캐너를 다음 줄로 이동시켜야만 다음에 버퍼 입력이 읽히지 않습니다.
reader.nextLine()
enterValues(reader)
}
fun enterValues(reader: Scanner) {
println("Enter a float/boolean :")
try {
print("Values: ${reader.nextFloat()}, ${reader.nextBoolean()}")
} catch (ex: InputMismatchException) {
println("First value should be a float, second should be a boolean. (Separated by enter key)")
}
}
InputMismatchException은 입력이 요청된 유형과 다른 유형일 때 발생합니다. 출력은 아래와 같습니다.
Kotlin REPL
REPL은 Read-Eval-Print-Loop의 약자로, 코드 일부를 대화형 셸에서 직접 실행하는 데 사용됩니다. 이를 위해 코틀린 컴파일러를 터미널/명령 줄에서 시작하여 수행할 수 있습니다.
명령 줄 컴파일러 설치
Mac/Windows/Ubuntu에서 명령 줄 컴파일러를 설치할 수 있습니다. 여기에서 설명한 대로 일반적으로 맥에서는 터미널에서 HomeBrew를 사용하여 코틀린 컴파일러를 설치할 수 있습니다.
brew update
brew install kotlin
설치가 완료되면 터미널/명령 프롬프트에서 kotlinc
를 입력하여 REPL을 시작할 수 있습니다. 다음은 REPL에서의 첫 번째 코드입니다. 이것으로 코틀린 출력 함수와 코틀린 REPL에 대한 간단한 소개를 마치겠습니다.
Source:
https://www.digitalocean.com/community/tutorials/kotlin-print-println-readline-scanner-repl