24-05-02 Kotlin split(), 스코프 함수 also
오늘은 알고리즘 풀이를 하다가 알게된 것들을 몇 개 적어보았다. 바로 사용해 볼 수 있는 것들을 정리해보았다. 물론 함수들에 대해 자세히 공부를 더 해보고 싶었지만 내용이 생각보다 어려워 일단 이런 것들이 있구나 알아보는 정도로 마무리 해보았다.
나중에 아래 함수들과 관련된 것들을 더 자세히 공부해보아야겠다.
1. 문제풀이 하다가 알게된 것들
1-1. split() 함수의 파라미터들
split() 함수는 특정 문자열을 기준으로 문자열을 분리할 때 사용한다. 분리된 문자열들은 리스트로 반환되게 된다.
띄어쓰기(" ")를 기준으로 문자열을 나누는 코드를 작성해보았다.
fun main(){
val a = "문장1. 아버지가 방에 들어가신다."
val stringList = a.split(" ")
println(stringList)
// [문장1., 아버지가, 방에, 들어가신다.]
}
그런데 split() 함수에는 인자로 넣을 수 있는 것들이 더 있다. 맨 앞에 들어가는 구분자가 가변길이 인자로 정의되어 있기 때문에 나머지 인자들은 반드시 이름을 지정해서 넣어줘야 한다.
그 중에서 문제를 풀며 사용해보고 알게된 것은 limit이다. limit 에다가 숫자를 지정해주면 문자열이 그 숫자 만큼만 분리된다.(limit이 반환된 리스트의 요소의 갯수가 된다.) split(" ", limit = 2) 이렇게 사용하면 문자열에서 처음 띄어쓰기가 나오는 곳에서만 분리되고 리스트의 요소는 2개가 될 것이다.
직접 코드로 쳐서 확인해보는 것이 이해에 가장 도움이 된다.
fun main(){
val a = "문장1. 아버지가 방에 들어가신다."
val stringList = a.split(" ", limit = 2)
val stringList2 = a.split(" ",limit = 3)
println(stringList)
// [문장1., 아버지가 방에 들어가신다.]
println(stringList2)
// [문장1., 아버지가, 방에 들어가신다.]
}
위처럼 limit으로 반환받을 리스트의 요소의 갯수를 지정해줄 수 있다. 만약 어떤 문자열의 앞부분이 일종의 기본키 같은 것이고 뒷 부분은 하나로 묶어서 사용해야 한다면 유용하게 사용할 수 있을 것이다.
1-2. also를 활용하여 치환 간단하게 하기
두 변수에 들어있는 값을 서로 바꿔주고 싶을 때가 있다. 이런 경우에는 새로 변수를 하나 선언해주고 값을 하나 저장해 둔뒤 변수에 들어있는 값을 바꿔주면 쉽게 치환 작업을 할 수 있다.
fun main(){
var a = 10
var b = 20
val c = a
a = b
b = c
println("$a $b") // 20 10
}
위와 같은 방법만 알고 있었는데 오늘 코틀린에 있는 스코프 함수인 also를 이용하면 조금 더 간결하게 코드를 작성하여 해결할 수 있다는 것을 알게 되었다.
fun main(){
var a = 10
var b = 20
a = b.also { b = a }
println("a:$a, b:$b") // a:20, b:10
}
also 함수는 자기자신을 그대로 반환한다. 그리고 람다 블록이 실행된다. 따라서 b에 a의 값이 들어감과 동시에 블록이 실행되기 전 b 자기자신이 a에 들어가게 된다. 따라서 a와 b의 값이 바뀌게 된다.
스코프 함수들의 정확한 사용법을 알기 위해 더 자세히 찾아보긴 했는데 지금 단계에서는 다소 이해하기 어려운 내용들이었다. 나중에 다시 정리할 시간이 있었으면 좋겠다.
2. 오늘 배운 것
- 코틀린에서 활용할 수 있는 컬렉션들에 대해 조금 더 자세히 공부해보았다.
- 문자열에 관련된 알고리즘 문제풀이를 해보며 새로 함수를 여러개 알게 되었다. 나중에 잘 써먹을 수 있었으면 좋겠다.
- 만들어둔 야구 게임도 다시 살펴보면서 더 간단하게 만들 수 있는 부분들도 수정해보았다.