오늘 배운 것

24-05-02 Kotlin split(), 스코프 함수 also

무무11 2024. 5. 2. 21:46

오늘은 알고리즘 풀이를 하다가 알게된 것들을 몇 개 적어보았다. 바로 사용해 볼 수 있는 것들을 정리해보았다. 물론 함수들에 대해 자세히 공부를 더 해보고 싶었지만 내용이 생각보다 어려워 일단 이런 것들이 있구나 알아보는 정도로 마무리 해보았다.

 

나중에 아래 함수들과 관련된 것들을 더 자세히 공부해보아야겠다.

 

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. 오늘 배운 것

- 코틀린에서 활용할 수 있는 컬렉션들에 대해 조금 더 자세히 공부해보았다.

- 문자열에 관련된 알고리즘 문제풀이를 해보며 새로 함수를 여러개 알게 되었다. 나중에 잘 써먹을 수 있었으면 좋겠다.

- 만들어둔 야구 게임도 다시 살펴보면서 더 간단하게 만들 수 있는 부분들도 수정해보았다.