Kotlin 사전캠프 TIL 7일차

노재원·2024년 3월 27일
0

내일배움캠프

목록 보기
7/90

벌써 일주일, 벌써 두 번째 발표

어제까지 준비해둔 웹 용어 설명 2탄, 그 중에서도 나는 SDK와 IDE를 같이 조사해서 발표했다.
다만 오전부터 돕던 일이 안끝나서 발표에 지각하는 불상사가 있었는데 매니저님이나 팀원 분들께서 이해해주셔서 정말 감사했다.


SDK, IDE 발표

보통 필수적인 SDK는 IDE에서 내장이든 설치든 지원해줄 때가 많고 하니 두 개를 묶어서 가져오겠다고 하긴 했는데 두 개를 묶어서 설명하는 건 꽤 생각이 많이 필요했지만 요약을 하면 간단하게 설명이 가능한 포인트가 많아 개념은 요약하고 가급적이면 이해를 돕는 예시를 많이 가져오며 지루하지 않게 들으실 수 있도록 했다.

물론 이렇게 조사해놓고 발표에선 마이크도 내가 실수해서 모니터에 달린걸 쓰느라 음질도 너프먹고 말은 여전히 빠르고 무슨 내용 생각하고 적었었는데 발표중에 섬망 증세 와서 빼먹기도 하고 하여튼 발표 실력은 쉬이 늘지를 않는다.
이렇게 발표해놓고 나중에 전체 발표때 이걸 또 발표하게 될 것 같다는 매니저님 말씀을 들어버렸으니 발표 실력으로 안쪽팔릴 방법부터 생각해놔야겠다.

이번 웹 용어 조사도 Notion 으로 작성해서 게시했다.
SDK와 IDE

어쨌든 1시간 지각하고 1시간 발표해서 시간이 은근 부족했다. 오늘 강의는 아직 듣고 있는데 노력하면 오늘 캠프 마감 전에는 다 듣고 갈 것 같다.


가운데 글자 가져오기

단어 s의 가운데 글자를 반환하는 함수, solution을 만들어 보세요. 단어의 길이가 짝수라면 가운데 두글자를 반환하면 됩니다.

문제 링크

fun solution(s: String): String {
        val mid = s.length / 2
        
        return if (s.length % 2 == 1) {
            s.substring(mid, mid + 1)
        } else {
            s.substring(mid - 1, mid + 1)
        }
    }

문제를 보자마자 중간 값 가져오는 함수가 있었던 것 같아 찾아봤는데 착각이었다. 그냥 곱게 나눠서 substring으로 반환했다.

s.length의 잦은 호출을 방지하기 위해 변수를 선언하다보니 단일 표현식 함수로 제출을 못한게 내심 아쉬워서 줄여보기 위해 또 다른 분들의 풀이를 참고했다.

fun solution(s: String) =
    // with로 s 문자열을 수신 객체로 지정해 람다 안에서 객체를 추가로 명시하지 않아 간결함
    // substring 을 index가 아닌 IntRange를 사용해서 length의 홀/짝을 구분하지 않음
      with(s) { substring(length / 2 - 1 + (length % 2) .. length / 2) }

with를 채택해서 람다로 중복 호출로 인한 코드의 지저분함을 깔끔하게 하고 substring은 IntRange로 인자를 넣어서 단어의 길이 홀/짝 여부 판단을 깔끔하게 했다. 나도 이런 번뜩임이 있었다면 좋았을 것을!




추가로 withrun 모두 람다를 위해 썼던 기억이 있어 생각난 김에 두 개의 차이를 조사했다.

fun <T, R> with(receiver: T, block: T.() -> R): R
fun <T, R> T.run(block: T.() -> R): R

fun <R> run(block: () -> R): R

사실 위에 있는 두 개의 with, run은 각각 써보긴 했는데 자세히 찾아보니 사용의 목적은 같다고 볼 수 있었다. 차이라면 with보단 run으로 호출해 사용시 type과 nullable에 대한 처리가 쉽다는 것과 사용 방법의 차이를 들 수 있겠다.

밑에 있는 run의 사용은 처음 봤는데 예시를 하나 가져왔다.

val builder: Builder = run {
    val string = "text"
    val number = "1"
    
    Builder(string, number) 
}

인자를 아예 받지 않고 람다를 객체 생성을 위한 방식으로 써서 scope 관리도 가능하고 가독성을 늘릴 수 있게 채택이 가능하다고 한다.

0개의 댓글