주의! 이글은 개인 공부 목적으로 작성된 포스팅입니다.
잘못된 내용이 있을 수 있음을 주의해주세요.
오늘은 Kotlin 기초 3번째 시간이다.
오늘까지 기초 내용을 다뤄보고 이후에 함수, it, data class와 같은
Kotlin의 핵심적인 내용을 다뤄 볼 예정이다.
우리는 지금까지 if else와 같이 특정 조건에 해당하면 해당 코드를 작동하게 분기를 제어했다.
하지만 아래 코드처럼 if else 문이 많아지면 코드의 가독성이 많이 떨어진다.
if(조건1){
}else if(조건2){
}else if(조건3){
}else if(조건4){
}else{
}
.
.
.
그럼 위와 같은 코드를 좀 더 깔끔하게 작성할 방법은 없을까?
복잡한 조건이 아닌 단순 조건이 "A"일 때와 같이 단순한 경우에는
아래 코드를 쓰는 게 좋다.
var num = 1
when(num){
1 -> {println("1입니다.")}
2 -> {println("2입니다.")}
else -> {println("조건에 해당하지 않는 수입니다.")}
}
위와 같이 간단하게 if else문이 아닌 when으로 간단하게 분기 제어를 할 수 있다.
우리는 지금까지 Kotlin의 기본적인 분기 제어 및 변수의 선언 및 초기화를 배웠다.
그럼 이제 프로그래밍의 핵심인 배열에 대해 배워보자.
배열은 뭘까?
배열은 데이터를 담아놓는 상자들의 집합이다.
위 사진은 NumberList라는 변수에 [1,2,3,4,5]가 저장되있는 상태이다.
위 사진을 코드로 구현하려면 어떻게 해야 할까?
var NumberList : Array<Int> = arrayOf(1,2,3,4,5)
위 코드를 입력하면 사진과 같은 배열이 생성된다.
하지만 우리는 배열에 미리 수를 받아 초기화하는 것보다, 상황에 맞게 데이터를
추가하는 일이 더 많다.
아래와 같이 진행해보자.
var NumberList2 = Array<Int>(size){0}
위 코드에서 Array(size)에 size 부분은 초기화를 위한 Int 형 값을 넣으면 된다.
또한, 괄호 안에 0은 "해당 크기만큼의 공간의 값을 0으로 초기화한다."라는 뜻이다.
우리는 지금까지 변수의 선언, 초기화, 간단한 배열의 선언 등을 배워봤다.
그럼 사용자의 입력을 받아서 변수를 초기화하려면 어떻게 해야 할까?
그럴 때 사용되는게 readln()이다. Kotlin은 Java의 Scanner를 사용할 수 있지만,
더욱 편하게 readln() 한 줄로 사용자의 입력을 받을 수 있다.
var input = readln()
println(input)
해당 코드를 작동시키면 사용자의 입력이 끝날 때까지 프로그램이 종료되지 않고 대기한다.
간단하게 A를 입력해보자.
A가 출력되는걸 볼 수 있을 거다.
그럼 사용자의 입력을 받아 배열에 값을 넣으려면 어떻게 해야 할까?
간단하게 5번의 입력을 받아 배열에 넣어보자.
var list = Array<Int>(5)
for(i in 0 until 5){
list[i] = readln() // 사용자의 입력을 받아 i 번째 배열에 값 삽입.
}
위 코드를 분석해보자.
String 배열을 5개 담을 수 있는 배열을 생성하고, 사용자의 입력을 i 번째 배열에 값을
삽입하는 코드이다.
var list = Array<Int>(5)
for(i in 0 until 5){
list[i] = readln() // 사용자의 입력을 받아 i 번째 배열에 값 삽입.
}
println(list[1])
> input : A,B,C,D,E
> output : B
우리는 지금까지 사용자의 입력을 받아 배열에 값을 삽입하고 출력하는 과정까지 해봤다.
Array이외에도 ArrayList, LinkedList등 여러 배열이 있지만,
오늘은 가장 기본적인 Array만 다뤄봤다. 배열에 대한 상세한 내용은 따로 글을 작성해보겠다.
Tip : 배열은 0번부터 시작합니다! 만약 배열의 크기가 5라면 5를 제외한 [0,1,2,3,4] 5칸의 공간이 생깁니다!
Tip : split()함수를 사용하면 띄어쓰기 입력에 대해 한 번에 받아올 수 있습니다.
ex. readln().split(" ") -> String 문자열의 띄어쓰기를 기준으로 나눈 후 문자열 배열 리턴
readln()을 사용해 사용자의 입력을 받아보면 String 형태로 받아지는 걸 알 수 있을 거다.
만약, 사용자가 Int 형 값을 입력했을 때 String이 아닌 Int 형으로 받으려면 어떻게 해야 할까?
그때 필요한 내용이 바로 형 변환이다.
형 변환?
1. Int -> String
2. char -> String
3. char -> Int
4. double -> Int
위와 같이 기존 자료형에서 다른 자료형으로 데이터를 변환시키는 과정을 형 변환이라 한다.
간단한 예로, String 자료형을 Int 형으로 바꿔보자.
var num = readln()
println("${num.toInt()+1}")
> input : 1
> output : 2
위와 같이 변수.toInt()를 사용하면 간단하게 Int 형 자료로 바꿀 수 있다.
사실, readln().toInt()를 해도 된다.
🛠️ 만약, toInt()를 지우고 코드를 실행하면 어떻게 될까?
var num = readln()
println("${num+1}")
> input : 1
> output : 11
위 코드는 String + String이 된다. 즉 문자열과 문자열이 합쳐지는 덧셈연산이 발생한다.
하지만, 아래와 같은 내용은 주의해서 형 변환을 시도해야 한다.
var num = '1'
println("${num.toInt()+1}")
> output : 50
우린 분명 1을 .toInt()를 사용해 Int 형으로 바꿨다. 하지만 50이 나왔다.
왜 1+1이 아닌 이상한 값이 나왔을까?
정답은 num 변수의 형태가 Char이기 때문이다.
Char변수에 .toInt()를 사용하면 Char의 아스키 코드표상의 10진수가 출력된다.
그래서 IDE를 사용해 Char 변수에 바로 .toInt()를 하면 밑줄이 쫙쫙 그셔 지는걸 확인할 수 있을 거다.
그럼 우리는 Char로 입력된 숫자는 변환할 수 없는 것인가?
그건 아니다. 문자열로 한번 변환해주고 Int 형으로 한 번 더 변환해주면 된다.
var num = '1'
println("${num.toString().toInt() + 1}")
> output : 2
🧨 double, float 자료형을 Int로 바꿀 때도 조심해야 한다.
Kotlin에서 소수점 자리 자료형을 Int로 바꾸면 소수점은 자동으로 빠진다.
즉, 1.234를 Int로 바꾸면 1로 저장된다.
var num = 1.234f
println(num.toInt())
> output : 1
위처럼 우리는 형 변환을 했을 때 자료가 빠지거나 의도치 않게 작용할 수 있다는 점을 알고 코딩해야 한다.
또한, 위 코드를 통해 .to자료형()을 사용하면 간편하게 형 변환을 할 수 있다는 점도 알 수 있다.
오늘은 진짜 정신없이 달려왔다.
when을 사용해 더욱 깔끔한 분기 처리 및 배열의 선언, 사용자의 입력 받기, 형 변환 등
크게 4가지의 기능을 배워봤다.
백준의 간단한 구현 문제를 풀면 지금까지 배운 내용을 복습할 수 있을 것이다.
아래 GitHub에 여러 Kotlin 관련 실습 코드를 확인할 수 있으니 확인해보는 것도 좋은 방법이다.
GitHub : https://github.com/LeeJungHwan-Dev/2022_Kotlin_Study
소중한 시간 사용해 글 읽어주셔 감사합니다.