일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 책
- 알게되는
- Kotlin
- 코틀린
- Rxjava
- 디자인패턴
- 스레드
- mockito
- k8s
- Gradle
- 안드로이드스튜디오
- kotlin강좌
- 안드로이드강좌
- 코루틴
- 커스텀상태
- 병럴프로그래밍
- 자바
- ReactiveProgramming
- viewmodel
- 병렬프로그래밍
- 안드로이드
- android
- g 단위테스트
- theming
- 회고
- 알고리즘
- 테스트
- Coroutine
- Compose
- 글또
- Today
- Total
목록일상 (61)
선생님, 개발을 잘하고 싶어요.
왜 단위 테스트를 해야할까? 모든 소프트웨어 개발 방법론의 목표는 무엇일까? 확장성 있고 지속 가능한 소프트웨어를 만드는 것이다. 단위 테스트를 해야하는 이유도 다르지 않다. 그렇다면 단위 테스트만 작성하면 지속 가능한 소프트웨어가 되나? 단위 테스트를 운영하는 프로젝트는 새로운 기능을 추가해도 회귀 문제가 발생하지 않나? 당연히 그렇지 않다. 단위 테스트는 지속 가능한 소프트웨어를 만들기 하나의 도구일 뿐이다. 우리는 이 도구를 잘 사용하는 법을 배워야 한다. 단위 테스트의 목적이 지속가능성에 있는 만큼 테스트를 작성할 때 불필요한 코드를 버려야한다. 단순하게 100% 코드 커버리지를 달성한다고 좋은 테스트가 아니라는 뜻이다. 좋은 테스트라고 하면 다음 세가지 속성을 만족해야 한다. 개발 주기에 통합 ..
성능에 대해 성능을 높인다? 👉 더 적은 자원으로 더 많은 일을 하도록 한다. 자원 👉 CPU, 메모리, 네트웍 속도, 디스크 속도, DB 속도, 디스크 용량 … 멀티 스레드에 내제된 성능상 비용 스레드 간 작업 조율 시 오버헤드 (락 걸기, 신호 보내기, 메모리 동기화) 컨텍스트 스위칭 스레드 생성 및 제거 여러 스레드를 효율적 스케줄링 더 나은 성능을 위해 병렬 프로그래밍 한다면 프로그램이 확보할 수 있는 자원 최대한 활용 가능한가 체크 남는 자원이 생길 때, 그 자원 역시 최대한 활용 가능한가 체크 🌟 부족한 리소스는 무엇인가? 성능 대 확장성 얼마나 빠르냐, 얼마나 많은 양의 일을 하냐 두 가지 관점에서 생각하기 얼마나 빠르냐 👉 서비스 시간, 대기 시간 얼마나 많은 👉 용량, 처리량 🌟 확장성 ..
안전성(safety)과 활동성(liveness)의 상관 관계 활동성에 문제가 되는 상황을 알아보자. 문제가 되는 사항을 미연에 방지하는 방법을 알아보자. 데드락 식사하는 철학자 문제 원형 테이블에 둘러 앉은 철학자 자기 왼쪽에 있는 젓가락을 집은 다음, 오른쪽 젓가락을 사용할 수 있을 때까지 기다린 후, 오른쪽 젓가락을 집어서 식사를 한다고 하자. 모든 철학자가 자기가 확보한 왼쪽 젓가락을 놓지 않고 오른쪽 젓가락을 기다리다가 식사를 하지 못하게됨 JVM은 데이터베이스 서버와 같이 데드락 상태를 추적하는 기능 ❌ 데드락은 시스템에 부하가 걸리는 최악의 상황에서 모습을 드러낸다. 락 순서에 의한 데드락 두 개의 스레드가 서로 다른 순서로 동일한 락을 확보하려 할 때 발생 같은 순서로 락을 확보하도록 돼 있..
모든 GUI 툴킷은 GUI 관련 작업이 모두 단일 스레드에서 일어나는 단일 스레드 서브시스템으로 구현돼 있다. 단일 스레드 서브시스템 👉 말 그대로, 하나의 스레드 위에서 동작하는 시스템 현실적으로 프로그램이 하나의 스레드만 사용하며 동작하는 건 말이 안되고, 작업 중 일부는 이벤트 스레드, 일부는 일반 애플리케이션 스레드에서 실행된다. 🤔 GUI를 그리는 안드로이드도 이러한 제약이 있다. 안드로이드에서 메인 스레드는 GUI에 접근하고 수정할 수 있는 유일한 스레드를 말하지만, 이 책에서 말하는 그런 역할을 하는 스레드는 이벤트 스레드다. GUI는 왜 단일 스레드로 동작하는가? 터치 이벤트 등 OS → App 방향 수정, 컴포넌트 배경색 설정 등 App → OS 방향 수정으로 하나의 GUI 컴포넌트를 두..