분류 전체보기

들어가기 전에 이 글은 MVP 패턴 적용이나 단위 테스트에 대한 경험이 없다면 이해하는데 어려움이 있을 수 있습니다. 테스트가 필요한가? 장바구니 주문 미션 2단계 제출할 때까지 Presenter 테스트 의 필요성을 인지하지 못했다. 리팩터링 할 때마다 테스트 리팩터링이 계속해서 필요했다. 또한, 기능을 다 구현했는데 하나하나 테스트를 짜야한다는 것이 그저 숙제로 느껴졌다. 시간이 부족하다는 이유로 기존에 작성했던 테스트를 전부 주석 처리하고 제출하는 만행을 저질렀다. 리뷰어님이 다음과 같은 메세지 를 남겨주셨다. 도메인 관련 클래스를 잘 분리하고 테스트 코드까지 잘 작성해주셨습니다. 다만 안드로이드와 관련된 코드들은 테스트가 작성되지 않은게 아쉬웠습니다. 그러자 내가 테스트를 잘 못짜서 필요성을 인지하..
· Android
Fragment 인스턴스는 자체 생명 주기를 갖는다! 사용자가 앱을 탐색하고 상호 작용할 때 프래그먼트는 add, remove, 되고 화면으로 들어가거나 나갈 때 수명 주기가 전환된다. 생명 주기를 관리하기 위해 Fragment 는 LifecycleOwner 를 구현한다. 이 오브젝트를 통해 getLifecycle() 메서드로 접근 가능하다. Fragment 생명 주기 은 다음과 같이 enum 으로 구성된다. 1. INITIALIZED 2. CREATED 3. STARTED 4. RESUMED 5. DESTROYED Fragment 생명주기 콜백함수와 Fragment 생명주기는 다르다. 1. onAttach() 및 onDetach() 프래그먼트가 인스턴스화 되면 INITIALIZED 상태에서 시작. 프래..
· Android
로컬 DB 를 사용 상당한 양의 데이터를 처리하는 앱은 데이터를 로컬에 저장하여 매우 큰 이익을 얻을 수 있습니다. 예시로 네트워크에 액세스할 수 없을 때도 사용자가 오프라인 상태로 콘텐츠를 탐색할 수 있도록 캐시 Room DB란Room 의 장점 SQL 쿼리의 컴파일 시간 확인 반복적이고 오류가 발생하기 쉬운 boilerplate 코드를 최소화할 수 있는 편리한 어노테이션 제공 간소화된 DB 이전 경로 SQLite API를 직접 사용하지 않고 Room 을 사용할 것을 Docs 에서 공식적으로 권장하고 있음 Room 지속성 라이브러리는 SQLite 를 활용하면서 데이터베이스에 쉽게 접근할 수 있도록 추상화 계층을 제공 Room 의 주요 구성요소 Database class DB 를 보유하고 앱의 영구 데이터..
· Android
Fragment 란? 테블릿처럼 큰 화면에서 기존엔 Activity 두개를 띄우거나 했지만 서로 다른 생명주기를 가져서 관리가 힘들었다..!! 그래서, 동일한 액티비티 생명주기를 공유하지만 화면을 서로 다르게 사용하기 위해 Fragment 가 탄생했다. Fragment 는 FragmentActivity 내의 어떤 동작 또는 사용자 인터페이스 일부를 나타낸다. Activity 와 결합하여 창이 여러개인 UI 를 빌드할 수 있으며 하나의 Fragment 여러 Activity 에서 재사용할 수 있다. 자체적인 생명 주기를 가지며 자체 입력 이벤트를 수신하고 Activity 실행 중에 추가 및 삭제가 가능하다. Fragment 는 항상 액티비티 내에서 호스팅되어야 하며 액티비티의 생명 주기에 직접적인 영향을 받..
· Android
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 가 맞지 않아야 한..
테스트 주도 개발 (Test-driven development TDD) 여기서 가장 중요한 단어는 development 이다. d가 들어간 단어가 많은데 Development 인지 design 인지 구분해야한다. TDD 는 development 이므로 TDD로 넘어가기 전에 설계(design) 을 끝내야 한다. design에 대한 고민을 안하고 TDD 를 하려고 하면 어렵다. TDD를 사용하면 자신감을 불어 넣어 준다. TDD = TFD(Test First Development) + 리팩터링 클래스 설계, 명세, 기능 요구사항 분석은 사전에 수행 TDD의 사이클 실패 테스트 작성 테스트가 빨리 통과 되게끔 만든다. -> 죄악을 저지른다. 밑에 나오는 예시를 보면 죄악이 어떤건지 알게될 것이다ㅎㅎ 리팩터링..
이전 글에 이어서 현직자 분의 step2 리뷰 입니다. 반복되는 리뷰는 앞 글에서 묶어서 이미 정리하였습니다. 1. 재사용 가능하게 만들어라 class RaceTime(private var time: Int) { ... fun reduceTime(): Boolean { if (time Unit) { repeat(time) { func() } } } repeatTimes는 함수를 인자로 받아 time 만큼 반복한다. 컨트롤러에서 반복하고 싶은 함수를 전달한다. 기존 var time 은 이제 불변 변수 val 로 변경한다. class Controller(){ private fun race(cars: List, raceTime: RaceTime) { outputView.printExecutionResult()..
베르_최성훈
'분류 전체보기' 카테고리의 글 목록 (4 Page)