전체 글 29

10/17 박성철님 강연 (레벨 4)

https://lnkd.in/p/ghV5vKEy “요즘 우테코 사람들 다 똑같다더라.” 최근 이런 말을 들었습니다. 꽤 충격이었고, 마음이 조“요즘 우테코 사람들 다 똑같다더라.” 최근 이런 말을 들었습니다. 꽤 충격이었고, 마음이 조급해지기도 했습니다. 나는 뭐가 다른지, 취업 시장에서 내세울 만한 내 강점은 뭔지 생각해 보게kr.linkedin.com 한번은 코로구가 이런 글을 링크드인에 올린 적이 있었다. 대략적으로 "우테코 사람들 다 비슷하더라" 라는 말을 많이 들으셨고, 그 얘기에 충격이여서 본인은 뭐가 다른지 생각해보게 되었다는 뜻이였다. 그리고 크루들 모두 같은 교육을 받았지만 다 다른 개성을 갖고 있는 사람들이여서 왜 그렇게 생각하는지 궁금하다고 했다.나도 코로구의 말에 동감했다. (사실 ..

우테코 8기 2026.10.18

ANR (Application Not Responding)

ANR앱의 메인 스레드가 너무 오랫동안 (일반적으로 5초) 이상 차단(blocking)될 때 발생하는 안드로이드 시스템 오류.ANR 발생의 주된 원인아래와 같은 다양한 요인에 의해 발생한다.메인스레드에서 5초 이상 걸리는 무거운 작업장시간 실행되는 네트워크, DB 등의 I/O 작업UI 스레드 차단 작업 (ex. UI 스레드에서의 동기 작업)공식문서에서는 아래와 같은 경우 까지 포함해서 설명하고 있다.서비스서비스는 기본적으로 메인스레드에서 실행된다.실행: 앱에서 선언한 서비스가 몇 초 이내에 onCreate 및 onStartCommand, onBind 실행을 완료할 수 없는 경우인텐트 브로드캐스트: BroadcastReceiver가 설정된 시간 내에 실행을 완료하지 못한 경우. 앱에 포그라운드 활동이 있는..

약간의 우테기 (우테코 권태기)

갈수록 할 일은 쌓이는데 할 일을 쳐내지 못하고 있다. 의식적으로 뭔가를 하는 것 같지도 않다. 기계적인 행동을 하는 듯한 느낌도 받는다. 지친다 지쳐~~~~~나는 내가 좋아하는 일을 하고 있는가 -> 그렇다.내가 좋아하는 일이 해야하는 일이 되었을 때 나는 즐거운가? -> 흠냐링.... 그래도 내가 정말 다행이라고 생각하는건, 사람때문에 생긴 정병은 아니고 걍 혼자 생긴 게 다행이다? (근데 혼자 생긴게 더 위험한가?)주변에 좋은 사람들 밖에 없어서, 좋은 팀원들을 만나서 적당히 행복하고 적당히 살만한..가끔 지치는 순간들이 오면 팀원들이나 리뷰어, 페어가 남겼던 피드백을 보면서 좀 힘을 내는데 다들 칭찬을 정말 잘한다. 볼때마다 마음은 따뜻해지는 것 같다.근데 가끔 팀원들이 적어준 피드백이랑 내가 다..

우테코 8기 2026.10.17

Flow, StateFlow, SharedFlow

Stream시간의 흐름에 따라 여러 값이 전달되는 데이터의 흐름이다.함수가 값 하나를 반환하는 것과 달리, 여러 값을 순차적으로 전달한다ex. 검색어 입력, 위치 변경, 서버 응답Hot Stream vs Cold StreamCold Stream구독자가 수집을 시작할 때 각자 새로운 생산 작업이 시작됨구독자가 독립적으로 스트림이 실행됨일반적인 flow {} 가 대표적이다val numbers = flow { println("Flow 시작") emit(1) emit(2)}numbers.collect { println("A: $it") }numbers.collect { println("B: $it") }// "Flow 시작"이 두 번 출력된다. 각 collect가 별도의 실행을 시작해서이다.Ho..

Kotlin coroutine - suspend 함수

suspend 함수코루틴 실행을 일시정지 할 수 있는 함수이다. 대표적으로 delay 함수가 지정한 시간만큼 코루틴을 일시정지 하는 함수이다. (delay가 사실 suspend 함수 종류중 하나이다.)코루틴 라이브러리에서는 delay 뿐만 아니라 다양한 suspend 함수를 지원한다.suspend 함수는 코루틴 또는 다른 suspend 함수에서만 호출해야한다 예시우리는 1초가 걸리는 A 작업과 B 작업을 하고싶다. A 와 B는 시간이 많이 걸리는 작업이므로, 다른 코루틴에게 맡겨놓고 다른 작업을 처리하고자 한다.대략적인 순서는 아래와 같다.오래 걸리는 A와 B 작업을 먼저 실행시켜 놓는다. 다른 코루틴에게 해당 작업을 시켜놓고, 나는 다른 작업을 실행한다. 이를 코드로 표현하면 아래와 같다.fun mai..

함수형 프로그래밍

프로그래밍 패러다임과 함수형 프로그래밍컴퓨터 프로그램의 구현을 개념화 하고 구조화 하는 방법. 하나의 언어는 하나 또는 여러 개의 패러다임을 지원하는 것으로 분류 가능하다. 프로그래머에게 프로그래밍의 관점을 갖게 하고, 코드를 어떻게 작성할지 결정하는 역할을 한다.최근의 프로그래밍 패러다임은 아래와 같이 분류된다.명령형 프로그래밍: 무엇(What)을 할 것 인지보다 어떻게(How) 할 것인지를 설명하는 방식,컴퓨터에게 절차와 순서를 하나하나 명령함.절차 지향 프로그래밍: 수행되어야 할 순차적인 처리 과정을 포함하는 방식객체 지향 프로그래밍: 객체들의 집합으로 프로그램의 상호작용을 표현선언형 프로그래밍: 어떻게(How) 보다 무엇(What)을 할 건지 설명하는 방식함수형 프로그래밍: 순수 함수를 조합하고 ..

우테코 8기 2026.08.30

Instrumented Test (계측 테스트)

프로젝트를 진행하면서 선택 프로그래밍 요구사항 중 하나가 “자동화 된 테스트” 였다. 그 중 키워드 하나로, 계측 테스트가 있었다.계측 테스트계측 테스트는 일반적으로 안드로이드 종속성이 있는 코드를 테스트 한다. 실제 안드로이드 에뮬레이터나 디바이스에서 실행된다.계측 테스트는 실 기기에서만 테스트 해야하는 기능에 대해서 하는 것을 추천한다.대표적인 라이브러리로는 Espresso, Robotium 등등이 있다. 우리 팀의 경우엔 JUnit 으로도 가능했다.단위 테스트 vs 계측 테스트단위 테스트는 격리된 상태에서 테스트 해야할 대상에 집중한다. 해당 클래스의 작은 기능들이 제대로 동작하는지, 도메인 규칙을 지키고 있는지 등등을 확인하기 위해서 사용한다. 독립된 상태를 유지하기 위해서 외부에서 Mock 객체..

expect / actual 키워드 (Kotlin Multiplatform, KMP)

expect / actual 키워드는 KMP에서 제공된다. 원래는 KMP를 쓰면서 많이 사용했었는데, 최근들어서 Android ViewModel에서도 코드를 타고 들어가다보면 expect/actual 이 나오기도 한다.멀티 플랫폼을 지원하면서 안드로이드, ios 모두의 비즈니스로직을 구현하기 위해 kotlin 함수에 붙일 수 있는 키워드이다.함수, 프로퍼티, 클래스, 인터페이스, 열거형, 어노테이션에 해당 키워드를 적용할 수 있다.일종의 인터페이스나 추상클래스와 비슷한 역할을 한다. 다만 의도는 다르다. abstract class 의 경우 자신을 상속하는 클래스가 추상체로 포함된 함수, 변수를 구현하도록 하지만, expect는 KMP 내 공통 모듈에서 선언된 선언체가 Android 나 iOS 각각에서 구..

Dagger 기본 개념과 @Inject, @Component

Dagger를 사용해 의존성을 관리하면 프로젝트가 커져도 복잡도를 낮출 수 있다.Dagger는 개발자가 직접 작성해야 하는 코드를 자동으로 생성해준다. 코드가 컴파일 시점에 생성되므로 추적이 가능하고, Guice(Java DI 도구) 같은 리플렉션 기반 보다 성능이 뛰어나다Dagger의 장점Dagger를 통해 보일러플레이트 코드를 줄일 수 있다.수동 의존성 주입 섹션에서 직접 구현한 AppContainer 코드(어플리케이션 그래프)를 자동으로 생성해준다.어플리케이션 그래프에서 사용할 수 있는 클래스의 팩토리를 생성한다. 이를 통해 내부적으로 의존성이 충족된다범위(scope)를 사용해 의존성을 재사용할지 새로운 인스턴스를 생성할지 결정한다Dagger 서브컴포넌트를 사용해 특정 화면 흐름에 맞는 컨테이너를 ..

반응형