본문 바로가기

Android39

Kotest 알아보기 Kotest Index Kotest Index KoTest란 테스트 스타일 Fun Spec String Spec Should Spec Describe Spec Behavior Spec Word Spec Free Spec Feature Spec Expect Spec Annotation Spec 조건부로 테스트 실행하기 Config Focus Bang X-Method @Ignored @EnabledIf Gradle에서 필터링하기 Isolation Modes SingleInstance InstancePerTest InstancePerLeaf Global Isolation Mode Assertions Style Core Matchers 범용 타입 비교 Iterator Map String Integer, Long.. 2021. 9. 27.
Kotlin DSL + buildSrc 으로 의존성 관리 Kotlin DSL + buildSrc으로 의존성 관리 Kotlin DSL이란? DSL이란 Domain Specific Language의 약어로 특정 분야에 최적화된 프로그래밍 언어를 뜻한다. 상용구 코드를 최소화 하기 위해 명령형 코드 대신 선언적 코드 형식을 따른다. Kotlin DSL은 코틀린의 언어적인 특징으로 가독성이 좋고 간략한 코드를 사용하여 Gradle 스크립팅을 하는 것을 목적으로 하는 DSL이다. Kotlin DSL 장, 단점 장점 IDE 지원 향상된 편집환경 Code highlighting 자동완성 지원 코드 탐색 오류 코드 강조 변수 리펙토링 가능 익숙한 Kotlin언어 사용 러닝 커브 낮음 멀티 모듈 사용 시 중복 의존성 선언 필요 없어짐 단점 빌드 캐시가 Invalidation .. 2021. 9. 27.
Paging3 알아보기 Paging3 Index Paging3 Index Paging3란? 기존 Paging 구현 방식 Paging3 기능 및 장점 핵심 개념 PagingSource load 함수 getRefreshKey 함수 PagingData Paging.flow PagingDataAdapter LoadStateAdapter를 사용하여 Header, Footer 추가하기 구분자(Separator) 추가하기 네트워크 및 데이터베이스에서 페이징(RemoteMediator) Room 설정 Entity 추가 Dao 추가 Database 정의 RemoteMediator 구현 load 함수 구현 Pager 빌더로 PageData flow 생성 Paging3란? 로컬 저장소에서나 네트워크를 통해 대규모 데이터 세트의 데이터 페이지를 로.. 2021. 9. 27.
ConstraintLayout 알아보기 ConstraintLayout 알아보기 ConstraintLayout에 대하여 샘플 코드와 함께 알아보도록 하겠습니다. 목차 Table of Contents ConstraintLayout이란? 복잡한 레이아웃을 단순한 계층 구조를 이용하여 표현할 수 있는 ViewGroup입니다. 즉 복잡한 계층구조로 레이아웃을 구성하는 방식에서 자유로워질 수 있습니다. 형제 View들과 관계를 정의해서 레이아웃을 구성한다는 점이 RelativeLayout과 비슷하지만, 보다 유연하고 다양한 기능을 제공합니다. ConstrinatLayout을 사용하면 어떤점이 좋을까?? 복잡한레이아웃 계측구조를 단순히 구성하여 작성할 수 있습니다. 자식뷰 간의 상호관계를 정의가능합니다 ex) 두 View를 위 아래로 컨테이너 중앙에 배치.. 2019. 11. 16.
@BeforeClass, @AfterClass ,@Before,@After 순서 알아보기 @BeforeClass, @AfterClass ,@Before,@After 순서 알아보기 Junit에 @BeforeClass, @AfterClass ,@Before,@After 어노테이션이 있습니다. 이전 이후..? 뭐지 어떻게 호출되는건지 알아보도록 하겠습니다. Example class BeforeAfterTest { @Before @Throws(Exception::class) fun setUp() { println("@Before") } @After @Throws(Exception::class) fun tearDown() { println("@After") } @Test @Throws(Exception::class) fun testCase1() { println("testCase1") } @Test .. 2019. 11. 1.
JUnit 테스트 순서 제어하기 JUnit 테스트 순서 제어하기 @FixMethodOrder는 3가지 정렬 옵션을 가지고 있습니다. 속성 설명 MethodSorters.DEFAULT HashCode를 기반으로 순서가 결정되기 때문에 사용자가 예측하기 힘듭니다. MethodSorters.JVM JVM에서 리턴되는 순으로 실행됩니다. 때에 따라서 실행시 변경됩니다. MethodSorters.NAME_ASCENDING 메소드 명을 오름차순으로 정렬한 순서대로 실행됩니다. @FixMethodOrder(MethodSorters.SORT방식) MethodSorters.DEFAULT MethodSorters.JVM MethodSorters.NAME_ASCENDING 2019. 11. 1.
JUnit Test Rule 알아보기 JUnit Test Rule 알아보기 JUnit Test Rule에 대하여 알아보도록 하겠습니다. JUnit의 Rule이란?? Rule은 테스트 클래스에서 동작 방식을 재정의하거나 쉽게 추가하는 것을 말합니다. 사용자는 기존의 Rule을 재사용하거나 확장하는 것이 가능합니다. JUnit Rule 종류 JUnit은 사용할 수 있는 여러 가지 Rule이 존재합니다. (아래의 표 참고) 여러 가지 Rule에 대하여 자세히 알아보겠습니다. 기본 Rule 클래스 규칙 이름 설명 Rule Description TemporaryFolder 임시폴더 관리. 테스트 후 삭제 ExternalResources 자원(DB, 파일, 소켓) 관리 ErrorCollector 지속적 테스트 실패 수집 Verifier 별개 조건 확인.. 2019. 11. 1.
Mockito-Kotlin Sample로 자세히 알아보기 Mockito-Kotlin Sample로 자세히 알아보기 #Mockito Features에 대한 문서를 글쓴이가 Kotlin으로 해석한 샘플입니다. 틀린 것이나 좀 더 나은 코드가 있다면 댓글로 남겨주시면 감사하겠습니다 :) #Mockito Features 원문 https://www.javadoc.io/static/org.mockito/mockito-core/3.1.0/org/mockito/Mockito.html contents 1. Mock객체의 동작(Behavior)을 검증해보기 @Test fun `mock_will_memorize_all_interaction`() { val mockedList = mock() mockedList.add("one") mockedList.clear() //검증하기 , .. 2019. 10. 28.
Mockito-Kotlin 알아보기 Mockito-Kotlin 알아보기 Mockito는 유닛 테스트를 위한 Java mocking framework입니다. Mockito를 사용하여 쉽게 Mock Object를 만들어 관리할 수 있습니다. Mockito는 현재 Kotlin과 함께 작동하지만 구문이 최적이 아닙니다. Kotlin에서는 모든 클래스가 기본적으로 final로 선언되어있어 Mockito는 기본적으로 mocking을 할 수 없는 등의 여러 문제가 있습니다. 그래서 Niek Haarman이 유지 관리하는 mockito-kotlin 라이브러리를 사용하도록 하겠습니다. (글 쓴 시점으로는 Mockito lib는 kotlin을 공식 지원하지는 않지만 추후 제공 계획이 있다고 합니다.) Mockito-Kotlin 기본 사용법 dependenc.. 2019. 10. 28.
Test Double(테스트 더블)알아보기 Test Double(테스트 더블) 알아보기 xUnit Test Patterns의 저자인 제라드 메스자로스(Gerard Meszaros)가 만든 용어로, 스턴트 더블(영화 촬영에서 말하는 스턴트 대역 배우)에서 아이디어를 얻어서 만든 용어입니다. Test Double소개 제라드 메스자로스는 아래와 같이 Test Double을 소개합니다. When we are writing a test in which we cannot (or chose not to) use a real depended-on component (DOC), we can replace it with a Test Double. The Test Double doesn’t have to behave exactly like the real DOC; .. 2019. 10. 28.
Test Stub이란 ? Test Stub이란 ? stub에 대하여 알아보도록 하겠습니다 stub이란 ? stub이란 토막,꽁초,남은부분,몽당연필.. 이라는 뜻으로 dummy객체가 마치 실제로 동작하는 것 처럼 보이도록 만들어놓은 것입니다. https://en.wikipedia.org/wiki/Test_stub Test stub - Wikipedia In computer science, test stubs are programs that simulate the behaviours of software components (or modules) that a module undergoing tests depends on. “ Test stubs provide canned answers to calls made during the t.. 2019. 10. 28.
TDD알아보기 TDD알아보기 TDD의 란? (Test Driven Development) 테스트 주도 개발: 테스트가 개발을 이끌어 나가는 개발방법론 구체적인 행동 레벨에서의 TDD의 개념은? 테스트를 먼저 만들고 테스트를 통과하기 위한 것을 짜는 것 즉, 만드는 과정에서 우선 테스트를 작성하고 그걸 통과하는 코드를 만들고를 반복하면서 제대로 동작하는지에 대한 피드백을 적극적으로 받는 것입니다. TDD가 어려운이유는뭘까 ?? 개발 시간이 증가합니다. 많은 기업들이 단기적인 성과에 집중해 있습니다. 전체 개발 시간을 줄이는 것보다 오늘 일을 끝내는 것을 강조하기 때문에 TDD 도입이 어렵습니다. 단기적인 것에 집중되어 있으니.. 그때까서 또 고치면 되니까.. 고객이 화내면 안되니까.. 급한 불을 끄면서 허덕이면서 살기 .. 2019. 10. 4.
assertThat assertThat알아보기 JUnit을 활용한 테스트에서는 assertThat 구문을 활용하여 코드의 길이를 줄이면서도 읽혀지는 코드를 작성할 수 있도록 도와줍니다. 즉 assertThat을 잘 사용하면 개발자의 의도를 보다 명확하게 드러낼 수 있는 큰 장점을 얻어갈 수 있을 것입니다. assertThat사용법 assertThat은 assertThat(T actual, Matcher 2019. 10. 4.
View가 그려지는 과정 알아보기 View가 그려지는 과정 알아보기 view는 포커스를 얻으면 레이아웃을 그리도록 요청합니다. 이때 레이아웃의 계층 구조중에 rootView를 제공해야합니다. 따라서 그리기는 루트 노드에서 시작되어 전위 순회방식으로 그려집니다. 부모뷰는 자식뷰가 그려지기전에 그려지고, 형제뷰는 전위방식에 따라 순서대로 그려지게 됩니다. 레이아웃을 그리는 과정은 measure단계와 layout 단계를 통해 그려지게 됩니다. LifeCycle 알아보기 addView 함수를 호출했을때 위 그림과 같은 순서로 콜백함수가 실행되게 됩니다. 1. Constructor 모든 뷰는 생성자에서 출발하게됩니다. 생성자에서 초기화하고 ,default값을 설정합니다. 뷰는 초기설정을 쉽게 세팅하기 위해서 AttributeSet 이라는 인터페이.. 2019. 10. 2.
OOM Killer ,LMK OOM Killer ,Low Memory Killer OOM Killer와 LOM Killer에 대하여 알아보고 , 어떤것이 더 안드로이드 환경에 적합한지도 알아보도록 하겠습니다. OOM Killer - linux kernel의 메모리 부족시 메모리 확보를 하는 process - src 위치 : mm/oom_kill.c 시스템 구동중 메모리가 부족하면 운영체제 내부의 우선순위 알고리즘에 의해 프로세스를 죽입니다. 리눅스 커널은 프로세스의 메모리 할당시 남은 메모리가 없는 상황을 처리하기 위해 OOM(Out of Memory) Killer 를 가지고 있습니다. 그 것은 모든 프로세스를 어떤 제약으로 점수를 매겨 init을 제외한 최고 점수의 프로세스는 죽여 메모리를 확보한다. 따라서 일반적으로 서버를 운영.. 2019. 9. 10.
AppBundle 알아보기 AppBundle 알아보기 App Bundle이란 ?? 모든 코드 , 리소스 CPU 아키텍처와 메타데이터를 압축한 ZIP파일입니다. App Bundle을 빌드하면 .aab파일이 생성됩니다. 빌드된 aab 파일을 Play Store에 업로드하면 Play Store가 각 기기에 최적화된 APK 를 빌드합니다.(Dynamic Delivery) 즉 앱을 실행하는데 필요한 코드와 리소스만 다운르도하여 사용합니다(Dynamic Delivery) App Bundle 구조 살펴보기 App Bundle은 코드(dex) , 라이브러리(lib) , 리소스(res)..등 모든 데이터가 포함되어있습니다. 개발자가 App Bundle 파일을 PlayStore에 업로드 하면 , PlayStore는 미리 aab파일에서 아키텍처, D.. 2019. 9. 5.
AAC - viewModel AAC(Andorid Architecture Component) - viewModel viewModel알아보기! 안드로이드 아키텍처 컴포넌트 viewModel은 UI관련 데이터를 저장하고 관리하기 위하여 설계되었습니다. 스크린 회전 같은 상태 변화에도 데이터가 보존될 수 있도록 합니다. 안드로이드기기를 회전한다면 안드로이드 생명주기는 위 그림의 왼쪽처럼 화면이 Destroy되고 다시 Create되는 과정을 거치게됩니다. 위같은 회전에대하여 간단한 데이터같은 경우 onSaveInstanceState()메소드를 이용하여 저장하고 다시 onCreate()에서 다시 데이터를 받을 수 있지만, serialize가 가능한 간단한데이터만 가능합니다. bitmap같은 많은양에 데이터는 부적합합니다. 또한 화면회전의 상.. 2019. 9. 2.
Clean Architecture Clean Architecture 좋은코드란 무었을까요? 가독성이 좋은코드 ? 테스트커버리지가 높은코드 ? 여러가지 기준이 있겠지만 그중하나인 유지보수하기쉬운 코드(변화에 잘 대응할 수 있는 코드) 또한 좋은코드의 기준중 하나일 것입니다. 유지보수하기 쉬운코드는 변화에따른 코드변경이 적다는 것일것입니다. 그러기 위해서는 코드가 잘 분리되어있어야 합니다. 그방법중 하나인 Clean Architecture에 대하여 알아보도록 하겠습니다. Clean Architecture 알아보기 Robert Martin이 소개한 CleanArchitecture 다이어그램입니다. 양파모양의 4개의 Layer가 존재합니다. 가장 바깥쪽의 Frameworks & Drivers 가 사용자와 접점에 있는 Presentation이고,.. 2019. 8. 26.
MVP 패턴을 알아보기 MVP 패턴을 알아보기 MVP란?? MVC에서 파생된 디자인 패턴으로 안드로이드에서 주로 사용하고 있습니다. MVP가 나오게 된 이유는, View와 Model을 완전히 분리해서 사용하기 위함입니다. MVP는 Model의 역할인 비지니스 로직을 독립적으로 테스트할 수 있습니다. MVP 패턴의 각 구성에 대해서 자세히 알아보도록 하겠습니다. MVP 패턴정의 MVP는 위에서 말한대로 Model, View ,Presenter의 앞글자를 따서 이름이 지어졌습니다. 이 패턴의 핵심 아이디어는 사용자 인터페이스(view)와 비즈니스로직(model)을 분리하고, 서로간에 상호작용을 다른객체(Presenter)에 위임해 서로의 영향을 최소화 하는 것에 있습니다. Model 내부적으로 쓰이는 데이터를 저장, 처리 비즈니스.. 2019. 8. 19.
Jetpack - LiveData Jetpack - LiveData AAC LiveData란 ?? ( Android Architecture Components) LiveData관찰 가능한 데이터 홀더 클래스입니다. 일반 관찰 가능과 달리 LiveData는 수명주기를 인식하므로 활동, 프래그먼트 또는 서비스와 같은 다른 앱 구성 요소의 수명주기를 존중합니다. 이 인식은 LiveData가 활성 수명주기 상태 인 앱 구성 요소 관찰자 만 업데이트하도록합니다. 즉, LiveCycle을 알고있는 DataType이라고 할 수 있습니다. liveData는 observer pattern입니다.즉 데이터의 변경이 일어났을때 ,그 변경을 받아 처리합니다 . 하지만 liveData는 거기다 수명주기를 알고 있습니다. 그래서 liveData는 수명주기를 존중.. 2019. 8. 13.
Jetpack - Paging Library (1) Jetpack - Paging Library (1) 페이징이란? 페이징은 데이터베이스의 데이터를 일정한 덩어리로 나눠서 제공하는 것을 의미합니다. Android라는 키워드를 입력했을 때, 구글은 약 28억 개에 해당하는 모든 검색 결과를 클라이언트로 내려주는 대신 상위 10개의 결과만을 보여줍니다. 이렇게 함으로써 구글은 사용자에게 원하는 결과를 빠르고 제공할 수 있고, 클라이언트에서는 이를 통해 성능, 메모리, 네트워크 비용을 효과적으로 다룰 수 있습니다. 안드로이드에서는 바로 스크롤을 이용해 데이터를 점진적으로 불러오는 무한 스크롤링 기법으로 사용할 수 있습니다. 개념 정리 PagedList: DataSource로 부터 가져온 불변 데이터 및 페이지에 대한 정보를 들고 있으면서, PagedListAd.. 2019. 8. 13.
Junit - Assert 메소드 단정 메소드(assert method) · JUnit에서 가장 많이 이용되는 단정(assert) 메소드입니다. · 단정 메서드로 테스트 케이스의 수행 결과를 판별합니다. 메소드 설명 assertEquals(x, y) · 객체 x와 y가 일치함을 확인합니다. · x(예상 값)와 y(실제 값)가 같으면 테스트 통과 assertArrayEquals(a, b); · 배열 A와 B가 일치함을 확인합니다. assertFalse(x) · x가 false 인지 확인합니다. assertTrue(x) · x가 true 인지 확인합니다. assertTrue(message, condition) · condition이 true이면 message표시 assertNull(o) · 객체o가 null인지 확인합니다. assertNot.. 2019. 7. 10.
Jetpack - Workmanager (2) Jetpack - Workmanager (2) 워크매니저 자세히 살펴보기 1. 작업상태 확인 완료 된 작업에 대해 사용자에게 알림을 통보해 주거나, 화면에 표시된 프로그래스바를 감춰야 하기도 하고,다시 새로운 작업을 실행 해야 하기도 합니다. WorkManager.getInstance().getWorkInfoByIdLiveData(work.id) .observe(lifecycleOwner, Observer { workInfo -> if (workInfo != null && workInfo.state == WorkInfo.State.SUCCEEDED) { // 작업 완료 } }) work 는 request입니다. Requst에서 아이디를 가져와 라이브데이터로 관찰할 수 있습니다. 지정된 Observer 에.. 2019. 5. 6.
Jetpack - Workmanager (1) Jetpack - WorkManager jetpack의 Architecture의 일부인 Workmanager에 대하여 알아보도록 하겠습니다. 안드로이드 초기에는 백그라운드 작업이 수월했었습니다. 서비스 하나를 생성하여 쉽게 사용자 뒤에서 백그라운드 작업을 수행할 수 있었습니다. 브로드캐스트 리시버를 사용하여 개발자가 원하는 시점에 앱을 깨워서 작업할 수도 있었습니다. workmanager 이전의 안드로이드 백그라운드 작업 자세히 알아보기 - https://beomseok95.tistory.com/192 Workmanager 이전의 안드로이드 백그라운드작업 Workmanager 이전의 안드로이드 백그라운드작업 Jetpack의 workmanager에대하여 알아보기 전에 이전의 안드로이드 백그라운드작업을 어떻.. 2019. 5. 6.