사용이 목적이라면 쉽지만 이해하긴 어려운 코루틴을 공부해보자 킹갓 제이슨은 말씀하셨다. 어떻게 코어를 효율적이고 효과적으로 사용할 것인가?코어나 프로세서가 추가됨에 따라 실행시간이 항상 빨라지는가? 코루틴 학습을 통해 이해해보도록 하자. 학습 로드맵Philipp Lackner 의 KOTLIN COROUTINEShttps://www.youtube.com/playlist?list=PLQkwcJG4YTCQcFEPuYGuv54nYai_lwil_ Android Kotlin 코루틴https://developer.android.com/kotlin/coroutines?hl=ko Kotlin Docs 코루틴https://kotlinlang.org/docs/coroutines-overview.html 용어 정리- 프..
분류 전체보기
MVP 패턴으로 작성한 단순한 화면을 MVVM 패턴으로 바꿔보자! + 버튼을 누르면 1씩 증가하고 - 버튼을 누르면 1씩 감소하는 단순한 앱을 만들어보자. 먼저 xml 파일을 작성해서 화면을 그렸다. MVP 패턴 Counter 작성 먼저 도메인 Model 부터 만들어 보자 count 를 프로퍼티로 가지며 add 나 sub 를 호출할 경우 현재 count 를 return 한다. class Counter { private var count = 0 fun add(): Int { return ++count } fun sub(): Int { return --count } } MainContract 작성 MVP 패턴은 View 와 Presenter 의 1대1 계약과 비슷하다. 그러니 Contract interfac..
들어가기 전에 이 글은 MVP 패턴 적용이나 단위 테스트에 대한 경험이 없다면 이해하는데 어려움이 있을 수 있습니다. 테스트가 필요한가? 장바구니 주문 미션 2단계 제출할 때까지 Presenter 테스트 의 필요성을 인지하지 못했다. 리팩터링 할 때마다 테스트 리팩터링이 계속해서 필요했다. 또한, 기능을 다 구현했는데 하나하나 테스트를 짜야한다는 것이 그저 숙제로 느껴졌다. 시간이 부족하다는 이유로 기존에 작성했던 테스트를 전부 주석 처리하고 제출하는 만행을 저질렀다. 리뷰어님이 다음과 같은 메세지 를 남겨주셨다. 도메인 관련 클래스를 잘 분리하고 테스트 코드까지 잘 작성해주셨습니다. 다만 안드로이드와 관련된 코드들은 테스트가 작성되지 않은게 아쉬웠습니다. 그러자 내가 테스트를 잘 못짜서 필요성을 인지하..
Fragment 인스턴스는 자체 생명 주기를 갖는다! 사용자가 앱을 탐색하고 상호 작용할 때 프래그먼트는 add, remove, 되고 화면으로 들어가거나 나갈 때 수명 주기가 전환된다. 생명 주기를 관리하기 위해 Fragment 는 LifecycleOwner 를 구현한다. 이 오브젝트를 통해 getLifecycle() 메서드로 접근 가능하다. Fragment 생명 주기 은 다음과 같이 enum 으로 구성된다. 1. INITIALIZED 2. CREATED 3. STARTED 4. RESUMED 5. DESTROYED Fragment 생명주기 콜백함수와 Fragment 생명주기는 다르다. 1. onAttach() 및 onDetach() 프래그먼트가 인스턴스화 되면 INITIALIZED 상태에서 시작. 프래..
로컬 DB 를 사용 상당한 양의 데이터를 처리하는 앱은 데이터를 로컬에 저장하여 매우 큰 이익을 얻을 수 있습니다. 예시로 네트워크에 액세스할 수 없을 때도 사용자가 오프라인 상태로 콘텐츠를 탐색할 수 있도록 캐시 Room DB란Room 의 장점 SQL 쿼리의 컴파일 시간 확인 반복적이고 오류가 발생하기 쉬운 boilerplate 코드를 최소화할 수 있는 편리한 어노테이션 제공 간소화된 DB 이전 경로 SQLite API를 직접 사용하지 않고 Room 을 사용할 것을 Docs 에서 공식적으로 권장하고 있음 Room 지속성 라이브러리는 SQLite 를 활용하면서 데이터베이스에 쉽게 접근할 수 있도록 추상화 계층을 제공 Room 의 주요 구성요소 Database class DB 를 보유하고 앱의 영구 데이터..
Fragment 란? 테블릿처럼 큰 화면에서 기존엔 Activity 두개를 띄우거나 했지만 서로 다른 생명주기를 가져서 관리가 힘들었다..!! 그래서, 동일한 액티비티 생명주기를 공유하지만 화면을 서로 다르게 사용하기 위해 Fragment 가 탄생했다. Fragment 는 FragmentActivity 내의 어떤 동작 또는 사용자 인터페이스 일부를 나타낸다. Activity 와 결합하여 창이 여러개인 UI 를 빌드할 수 있으며 하나의 Fragment 여러 Activity 에서 재사용할 수 있다. 자체적인 생명 주기를 가지며 자체 입력 이벤트를 수신하고 Activity 실행 중에 추가 및 삭제가 가능하다. Fragment 는 항상 액티비티 내에서 호스팅되어야 하며 액티비티의 생명 주기에 직접적인 영향을 받..
Activity 란?안드로이드 4대 컴포넌트 중 하나이자 사용자들과 상호작용하기 위한 진입점. Activity LifeCycle 란?사용자가 앱을 켜고 끄고 다른 앱을 켜는 등의 활동을 할때액티비티 인스턴스는 수명 주기 안에서 서로 다른 상태를 통해 전환된다. 이때 Acticity 클래스는 활동이 상태 변화를 알아차릴 수 있는 여러 콜백을 제공한다. 이 생명 주기 콜백을 잘 구현하면 앱에서 문제가 발생하지 않게 예방할 수 있다! 기본 Activity LifeCycle 종류* 기본 6개만 명시되어 있으며 onSaveInstanceState(), onRestoreInstanceState() 도 존재한다. 1. onCreate()2. onStart()3. onResume()4. onPause()5. on..
오목 미션을 진행하면서 렌주룰의 금수를 처음 알게 되었다. 렌주룰의 금수 : 먼저 시작하는 흑돌이 무조건 유리하기 때문에 흑목은 3-3, 4-4, 장목 등을 금지한다. 예를 들어 다음과 같은 경우가 3-3 이고 가운데에 흑돌을 놓을 수 없다. 3-3, 4-4 는 다른 사람의 코드를 사용했고 장목은 직접 만들어 사용했다. override fun isForbidden(location: Location) = OmokForbiddenRuleAdapter(board, stone).isForbidden(location) || OmokLongForbidden.isForbidden(board, location, stone) 그러다보니 위와 같이 코드를 작성했다. 가독성도 떨어지고 확장성이 떨어져서 좋지 못한 구조이다...
step1 에서 블랙잭 미션을 진행하면서 코드가 점점 복잡해지고 마음에 들지 않았다! step1 미션 PR https://github.com/woowacourse/kotlin-blackjack/pull/16 [베르] 1단계 블랙잭 제출합니다. by SeongHoonC · Pull Request #16 · woowacourse/kotlin-blackjack 안녕하세요! 우테코 5기 베르입니다! 리뷰 잘부탁드립니다! github.com step2 에서 상태 패턴을 알게 되었고 적용해 보았다. 상태 패턴 : 객체지향 관점으로 유한 상태 기계를 구현하는 디자인 패턴 그럼 유한 상태 기계는 뭘까? 유한 상태 기계는 유한한 개수의 상태를 가질 수 있는 기계이다. 한 번에 오로지 하나의 상태만을 가지게 되며, 어떠한..
리뷰 1 Rank 의 convertToGrade 메서드는 matchCount 와 bonusMatch 를 입력받아 해당하는 Rank 를 반환한다. 해당 코드에 대한 리뷰 현재 요구사항에서 2, 3등에서만 bonusMatch 가 필요하다. 하지만 요구사항이 추가되어 bonusMatch 가 다른 등수에서도 필요해 진다면 위의 로직에서 if 문이 계속 추가되거나 when 을 사용하여 조건을 추가해 줘야한다. 그렇다면 해당 메서드 로직은 변경하지 않으면서 다른 등수를 추가할 수 있게 만드는 방법은 무엇일까? 해결 방법 내가 사용한 방법은 enum class 추가이다. 각 등수는 bonus 에 대해 3 가지 분기를 갖는다. 1. bonus 가 맞아야한다. (BONUS_MATCH) 2. bonus 가 맞지 않아야 한..