본문 바로가기

분류 전체보기

(70)
필드(멤버변수) 초기화는 super 생성자가 모두 끝나야 이루어진다. https://stackoverflow.com/questions/15682457/initialize-field-before-super-constructor-runs
[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..
[Android] Robolectric 을 활용한 유닛테스트 resources 에서 가져온 스트링값, 서버에서 내려준 필드를 조합하여 특정 스트링을 만드는 클래스가 있는데 이에 대한 유닛테스트 코드를 짜려고 한다. 유닛테스트에서는 안드로이드 프레임워크에 의존성이 있는 클래스들을 참조할 수 없다. 이유는 그냥 Robolectric 검색하면 다양한 포스팅이 있으니 참고할 것. 아무튼 위와 같은 이유로 resources 참조를 위해 Robolectric 을 사용하면서 나온 빌드 에러, 해결방법 등을 대충 정리해두려고 한다. (발견하면 추가할 것) 오류1) 빌드 실패 Failed to transform artifact 'bcprov-jdk15on.jar (org.bouncycastle:bcprov-jdk15on:1.68)' to match attributes {artif..
[Android] ExoPlayer2 현재 재생위치 가져오기 ExoPlayer2 에서 currentPosition(현재 재생위치) 가져오는 방법에 대한 포스팅이다. 본문 요약 - ExoPlayer 에서 재생위치를 실시간으로 가져오려면 폴링 방식으로 플레이어에 직접 요청해서 체크해야한다. (주기적으로 상태 체크해서 exoPlayer.getCurrentPosition()) 회사 프로젝트 내 기능중 동영상플레이어 구현을 위해 ExoPlayer2 라이브러리를 사용하고있는데, 현재 재생위치 콜백을 받아야하는 니즈가 생겼다. 당연히 관련 리스너를 등록하면 바로 가져올 수 있을 줄 알았는데 player 에서는 제공하고있는 리스너는 재생상태 뿐이었다. 더보기 더보기 interface EventListener { /** * Called when the timeline and/or..
[Design pattern] Factory method pattern Factory Method Pattern 팩토리 메소드 패턴을 사용하는 이유는 클래스간의 결합도를 낮추기 위한것이다. 결합도라는 것은 간단히 말해 클래스의 변경점이 생겼을 때 얼마나 다른 클래스에도 영향을 주는가이다. 팩토리 메소드 패턴을 사용하는 경우 직접 객체를 생성해 사용하는 것을 방지하고 서브 클래스(팩토리 메소드 클래스)에 위임함으로써 보다 효율적인 코드 제어를 할 수 있고 의존성을 제거한다. 결과적으로 결합도를 낮춰 유지보수가 용이해진다. EX. AAC ViewModel 을 생성할 때 정의하는 ViewModelProvider.Factory 참고 : 팩토리 메소드 패턴(Factory Method Pattern), [Design_Pattern] 팩토리 메서드 패턴(Factory Method Pat..
비전공자를 위한 이해할 수 있는 IT 지식 (최원영) 책 정보 비전공자를 위한 이해할 수 있는 IT 지식 IT 시대의 필수 교양서우리는 매일 스마트폰으로 메시지를 보내고, 컴퓨터로 일을 합니다. 또 음식점에서 키오스크로 주문하고, 가상현실에서 게임을 즐깁니다. IT는 더 이상 전문가들만의 이야 book.naver.com 총평 ★★★★☆ 한줄평 실무에 필요한 컴퓨터공학 관련 이론을 이해하기 쉽게 풀어 설명한, 비전공자 입장에서 개발자의 외계어를 어느정도 해석한 책 이 책을 추천하고 싶은 사람 개발자랑 대화할 때 외계어들 때문에 너무 답답한 신입 기획자/디자이너, 이 업계에서 일하고싶은 취준생 ----- 밀리의 서재에서 어떤 책을 읽어볼까~ 찾아보다가 [비전공자를 위한 이해할 수 있는 IT 지식] ebook 이 있어서 낼름 읽어보게 되었다(PDF 버전이라서 큰..
[Android] CoodinatorLayout 사용시 만났던 에러 app:layout_behavior="app:layout_behavior="@string/appbar_scrolling_view_behavior" not found 그냥 머티리얼 디자인 디펜던시 추가해주면 된다. 해당 스트링 리소스는 기본 탑재가 아니고 머티리얼에 들어가있다. 그냥 Coordinator 랑 같이 있어주면 덧났던걸까..? implementation "androidx.coordinatorlayout:coordinatorlayout:1.1.0" implementation "com.google.android.material:material:1.3.0"
[Android] kotlin extension 관련 compile error 입사 초기에 코틀린 익스텐션 뷰 아이디를 덩그러니 뒀을 때 아래와같은 컴파일 에러가 발생했었다. e: java.lang.IllegalStateException: Backend Internal error: Exception during code generation Cause: Back-end (JVM) Internal error: wrong code generated org.jetbrains.kotlin.codegen.CompilationException Back-end (JVM) Internal error: Couldn't transform method node: ... Cause: Error at instruction #125 GOTO L0: Incompatible stack heights Elemen..