본문 바로가기

전체 글174

[Kotlin] scope function let을 디컴파일 하면 생기는 일 1. let은 무엇일까?let이란 Kotlin에서 제공하는 scope function으로 람다에서 context object를 it을 통해 사용할 수 있고, 람다의 반환값을 반환하는 함수이다.val person: Person? = Person("algosketch")fun example() { person?.let { println(it.name) }}(이 예제에서 반환 값은 사용하지 않았다) let을 사용하면 person 객체를 it으로 전달 받아 사용 가능하다. 다만 person 객체는 nullable이지만 ?를 통해 null이 아닐 때에만 실행되도록 작성했으므로 it은 nonnull인 Person 타입으로 추론된다. 이처럼 let은 null 체크를 위해 흔히 사용된다. 2. .. 2026. 8. 16.
[Kotlin] Courutine에서 runCatching을 사용할 때 주의할 점 1. runCatching이란?viewModelScope.launch { runCatching { putUserInfoUseCase( ... ) }.onSuccess { ... }.onFailure { ... }} 지금 일부 프로젝트는 클로드에게 많은 코드를 맡기고 있다. 위 코드는 클로드가 생성해준 코드의 일부이다. 여기서 putUserInfoUser()는 suspend 함수인데, 예외 처리를 위해 runCatching으로 감싸준 모습이다. runCatching은 내부적으로 try catch를 사용하여 반환 타입을 Result로 감싸 개발자가 onSuccess, onFailure와 같은 함수 체이닝으로 예외를 처.. 2026. 8. 9.
쿠팡 인천 14센터 허브 후기 (남자) 퇴사 후 재취업 준비하는데 모아둔 돈이 다 떨어져서 쿠팡 알바를 지원했다. 평소 무릎이 안 좋아서 다리보다는 힘을 쓴다고 하는 허브쪽으로 지원했다. 신청 2시간 만에 출근 확정을 받았고, 현장에서 입출고 지원자 중 3명이 추가로 허브로 전환된 것을 보니 허브쪽 지원자가 적은 것 같다.한가해질 때마다 여기저기 바쁜데로 팔려가긴 했는데, 가장 오래 있었던 곳은 대분류였다.대략 이런 모습이다. 위쪽 레일에서 비닐 포장된 상품들이 쏟아져 나온다. 나는 가장 처음 위치에서 서서, 카트에 있는 미분류 상품들을 추가로 레일 위의 빈 공간에 펼쳐서 올리는 역할을 담당했다. 그러면 다음 사람이 송장 라벨이 보이도록 포장지를 뒤집거나 펼치고, 마지막 2~3명이 라벨을 보고 분류하는 공정이다. 마지막 분류 과정은 일을 여러.. 2026. 6. 9.
[Kotlin] val은 불변(immutable)이 아니다. val vs varKotlin 면접 질문으로 가장 기초적인 질문이다.곧 있을 면접에 대비해 Kotlin 질문을 다시 정리하고 있다. gpt가 추천해준 첫 번째 질문으로 var과 val의 차이를 물어봤다. 이를 구글에 검색하니 약 70% 정도의 블로그가 val을 불변이라고 표현하고 있다. 과거의 나 역시 면접 때 그렇게 답변했고, 이는 "정말로 불변인가요?"라는 꼬리 질문으로 이어졌다. 그래도 꼬리 질문에는 잘 답변했다. 저렇게 답한다고 해서 감점이 되지 않겠지만 정확히 알고 있다면 이점은 될 것 같다.공식 문서에는 위와 같이 표현하고 있다. var를 mutable로 표현했으니 val은 immutable로 표현할 것 같지만 굳이 read-only라고 표현한 데에는 이유가 있다. Backing propert.. 2026. 5. 6.
[Android Compose] ModalBottomSheet에서 BackHandler 사용하기 원래 미디엄으로 블로그를 옮겼으나, 편하게 쓰는 글을 여기에 작성하려고 한다. 문제 상황내가 구현하고자 하는 UI는 바텀 시트 안에 TextField가 있는 구조였다. 바텀 시트가 올라온 뒤 키보드가 TextField 포커스가 되면 키보드가 올라오는 구조이다. 키보드가 올라온 상태에서 뒤로가기를 누르면 예상 동작은 키보드는 닫히고 바텀시트는 살아있어야 한다. 그러나 바텀시트가 먼저 닫히고 키보드가 닫혔다.@Composablefun MyBottomSheet() { val isImeVisible = WindowInsets.isImeVisible BackHandler(isImeVisible) { // 동작 안 함 } ModalBottomSheet) { //.. 2026. 4. 19.
플레이 스토어 심사 거절 (로그인 사용자 인증 정보 세부정보가 영어가 아님) 한국 사용자만을 대상으로 앱을 출시했는데, 아래와 같이 다소 황당한 안내를 받았다.구글에서 제공해준 스크린샷 확인 결과 번역의 문제로 판단된다. 로그인에 필요한 정보가 하나가 아니라 상세 정보를 통해 로그인 방법을 설명했다. 그 과정에서 "길동"과 같이 한글로 된 테스트 계정을 제공했는데, 심사 과정에서 "길동"이 아닌 "Gil-Dong"을 사용하여 문제가 되었다.그래서 내가 제공했던 정보를 영어로 재작성하여 심사를 맡길 예정이다.국제화를 대응할 생각이 없는 앱인데 왜 "모든 로그인 사용자 인증 정보의 연어 버전"을 제공해야 하나 싶긴 하다. 2025. 7. 27.
블로그 이전 공지 미디엄으로 블로그 이사 갑니다.https://medium.com/@sjy_9484 Song Junyoung – MediumRead writing from Song Junyoung on Medium. Every day, Song Junyoung and thousands of other voices read, write, and share important stories on Medium.medium.com 기술 블로그는 이전하게 되었지만, 일상적인 글은 계속 여기에 올릴지도 모르겠네요. 2025. 1. 30.
협업을 위한 GitHub 사용법 GitHub는 Git 원격 저장소를 제공하는 웹 서비스이다. 이 글에서는 그중 협업 관점에서 GitHub를 사용해 왔던 방법을 살펴본다.  HomeRepository에 처음 들어가면 기본적으로 README.md가 노출된다. 우측 패널을 보면 소개와 함께 연관된 링크를 삽입할 수 있다. 그중 Releases라는 메뉴가 있다.릴리즈 노트는 직접 작성해도 되지만, 자동 생성을 원할 경우 PR 제목을 기반으로 만들어 준다. 기본적으로는 해당 버전의 소스코드를 제공하지만, 추가 파일을 첨부하여 각 버전 별 APK(안드로이드 설치 파일)를 제공하기도 한다. 간혹 빌드 관련 파일이 Git의 추적을 받고 있는 Repository를 볼 수 있는데, 별도로 보관하는 것이 좋다. Git의 모든 파일 기록은 삭제하더라도 .g.. 2024. 9. 5.
클라이밍 4개월 후기 올해 3월에 클라이밍을 시작해서 거의 4개월이 지났고, 39회 다녀왔다. 부상은 없었는지?다행히 큰 부상은 없었다. 사소하게 자주 상처 입는 부위는 팔과 다리이다. 팔의 경우 홀드에 쓸려서 난 상처가 많고, 아프다기보다는 작은 흉터가 누적되는 게 더 신경 쓰인다. 물론 긴팔을 입거나 팔 토시를 착용할 경우 쓸리는 상처는 해결할 수 있다. 긴 바지만 입기 때문에 다리에는 쓸리는 상처가 없다. 대신 시선이 손과 발에만 집중하기 때문에 무릎을 튀어 나온 홀드에 박는 경우가 많아 자주 멍 든다.단발성(?)으로 입는 상처는 이정도이지만, 사실 클라이머는 다른 부상도 잦다. 내 경우 큰 부상은 없었지만 1~2주 정도 불편을 겪은 몇 가지가 있다. 클라이밍 1개월차에는 왼팔 전완근 부위 바깥쪽 근육이 아팠고, 얼마 .. 2024. 7. 11.