본문 바로가기

Diary

(8)
[Kotlin Coroutine] ViewModelScope에 delay가 포함된 Unit test 삽질, Delay controller 22.02.23 최근에 릴리즈된 1.6.0 버전에서 이 포스팅에서 사용했던 TestCoroutineDispatcher 가 Deprecated 되어서 업데이트함 --- class ViewModel { fun loadData() { viewModelScope.launch { delay(5000L) // 여기를 집중 _state.value = doSomething() // suspend function } } } 위와 같은 뷰모델과 @Test fun `test loadData()`() = runBlockingTest { // given .. viewModel.loadData() assertEquals(expected, viewModel.state.data) } 테스트코드를 작성하고 수행하면 null-excep..
비전공자를 위한 이해할 수 있는 IT 지식 (최원영) 책 정보 비전공자를 위한 이해할 수 있는 IT 지식 IT 시대의 필수 교양서우리는 매일 스마트폰으로 메시지를 보내고, 컴퓨터로 일을 합니다. 또 음식점에서 키오스크로 주문하고, 가상현실에서 게임을 즐깁니다. IT는 더 이상 전문가들만의 이야 book.naver.com 총평 ★★★★☆ 한줄평 실무에 필요한 컴퓨터공학 관련 이론을 이해하기 쉽게 풀어 설명한, 비전공자 입장에서 개발자의 외계어를 어느정도 해석한 책 이 책을 추천하고 싶은 사람 개발자랑 대화할 때 외계어들 때문에 너무 답답한 신입 기획자/디자이너, 이 업계에서 일하고싶은 취준생 ----- 밀리의 서재에서 어떤 책을 읽어볼까~ 찾아보다가 [비전공자를 위한 이해할 수 있는 IT 지식] ebook 이 있어서 낼름 읽어보게 되었다(PDF 버전이라서 큰..
[Android] TextView Typeface 관련 궁금증 - 미해결 Typeface 클래스에 대한 궁금증이 생겼다. 문제 해결은 했지만 이유를 아직 모르겠다. 달력 데이터를 표시하는 리사이클러뷰 하나가 있고, 오늘 날짜에는 bold 처리, 아닌 날짜에는 노말로 표시한다. 그래서 RecyclerViewAdapter.onBindViewHolder() 에서 아래와 같이 그려지도록 작성했다. tv_holder_day.setTypeface(tv_holder_day, getTextTypeface(data.date.time.isToday())) fun getTextTypeface(isToday): Typeface = if (isToday) Typeface.BOLD else Typeface.NORMAL 그런데 위와같이 설정하면 오늘 날짜는 제대로 볼드처리돼서 그려지는데, 오늘 날짜(2..
[Android] Thread-safe 하지 않은 SimpleDateFormat 프로젝트를 작업하는 중에 서버에서 날짜의 형태를 UTC 포맷으로 내려주고있어서 변환이 필요했다. 대부분 UTC 포맷으로 내려오고 자주 사용될 여지가 있다고 생각해서 Dateutils.kt 파일에 global function 으로 UTC 관련 유틸을 만들어 사용하고있었다. typealias UTC = String private const val defaultUTCFormat = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'" private val utcDateFormat = SimpleDateFormat(defaultUTCFormat, Locale.ROOT).apply { timeZone = TimeZone.getTimeZone("UTC") } private const val defaultKSTFo..
[2019.01.01-02] 뉴스 크롤링 앱을 만들면서..(3) 오늘 구현한 것- 두개의 리사이클러뷰 각각에 Progress bar 로 데이터 로드 상태 보여줌- swipe represh 추가. 참고 : https://medium.com/@bluesh55/android-당겨서-새로고침-간단하게-구현하기-a42846c14c23- 위젯 기능 추가하는 중. 일단 위젯이 생각보다 까다로운 녀석이라는 것을 이번에 처음 알게됐다.기존 방식과는 다르게 위젯은 다른 프로세스에서 뷰를 인플레이트 하는 과정을 거치는, 기생(?)하고 있는 구조라고 한다. (참고 : http://itmir.tistory.com/551)그리고 브로드캐스트를 받아 처리하는 방식으로 위젯 데이터가 갱신되는 것 같다.또한 위젯을 만드는 과정이 은근히 복잡하다...!! 아래 순서는 내가 마음대로 매겨봤다.1. r..
[18.12.30] 뉴스 크롤링 앱을 만들면서...(2) 구현하려고 했던 네이버, 다음 실시간 검색어 10개씩 보여주기 기능을 추가했다.하나의 액티비티에 두개의 리사이클러뷰 어댑터가 있다.MVP 패턴으로 짜놓은거라 어거지로 맞춰놨는데... 약간 이상한부분은 내 맘대로 바꿔버렸다. ㅋㅋㅋㅋ그리고 첫번째 삽질기로, 기존에 있는 Contract 인터페이스를 이용하려고 List 로 바꿔서 Any 자리에 IssueItem, NewsItem 을 대입하려고했으나, 코드에 빨간 밑줄이 생겼다. 방법으로 코틀린의 기능인 스타 프로젝션 이라는 것을 알게되었는데, 이게 뭔지 이해를 못했다. 일단 공식 문서 번역글을 포스팅 해놓긴 했는데.... 이걸 참고하자. https://kotlinlang.org/docs/reference/generics.html 오늘 바꾼 내용(구현한 것)-..
[18.12.26-27] 뉴스 크롤링 앱을 만들면서... 홈 화면에 네이버, 다음의 실시간 검색어를 10개씩 보여주려고 구현중이다.2개의 리사이클러뷰를 띄워주려고 했는데 생각해보니 리사이클러뷰와 어댑터는 1대1 매핑해야하는걸까?아직 리사이클러뷰를 확실하게 이해한 것 같지 않다. 그냥 되니까, 쓸줄만 알 뿐...서버에서 받고 어댑터에 set 하기까지, 무작정 코딩하는게 아니라 우선 생각을 좀 해봐야겠다지금 계속 바꾸는중인데,,, 설계 과정 없이 하다보니 진짜 중구난방으로 코딩하고 커밋도 애매해진다 ㅠㅠ시간이 너무 늦어져서 글로 정리하는중. 나는 급한 불을 꺼야할게있어서...^^ 바꾼 내용- 패키지 정리(어댑터 클래스에서 뷰홀더 분리, 어댑터 패키징)- BaseViewHolder 의 추상메소드 bind 파라미터 NewsItem -> Any 로 변경. 다형성을 이용..
[18.12.21] 깃헙블로그를 잃다 원래 처음엔 티스토리에 블로그를 시작했었다.사실 티스토리는 글쓸 때 네이버 블로그보다 좀 불편하다는 생각이 들었는데, 복붙하면 서식도 그대로 따라오고 뭔가 개발자들이 많이 쓰고 스킨도 괜찮아서 선택했었다.근데 깃허브에 잔디밭좀 심어보려고 깃헙블로그로 옮겼다. 포스팅만 해도 초록초록해져서 좋았다. hexo 테마도 적용하고 내 맘에 드는 블로그를 만들 수 있었다. 100% 만족하진 못했지만 반응형 웹에다가 마크다운 서식이 적용돼서 너무 편했다.근데 노트북을 바꾸면서 로컬 저장소를 밀어버렸는데 치명적인 실수를 했다. 깃헙에 올라가있는것만 있으면 되는줄 알았는데 그게 아니었다. clone 을 해보니 내가 원래 쓰던 로컬 저장소와는 다른 것을 알 수 있었다.그때야 깨달았다. deploy는 hexo에서 해주는거였고..