안드로이드

· Android
들어가기 전에 안드로이드에서 DataStore 를 사용할 때 암호화, 복호화를 어떻게 처리해야할지 고민이라 찾다가 이 영상을 먼저 보는게 좋다고 하길래 정리해봅니다. FULL Guide to Encryption & Decryption in Android (Keystore, Ciphers and more) https://www.youtube.com/watch?v=aaSck7jBDbw Encryption & Decryption with KeyStore 예를 들어서 비밀번호를 매번 기억해서 입력하기 힘드니깐 자동 저장한다고 생각해봅시다. 그럼 핸드폰에 접근해서 누군가 비밀번호를 볼 수도 있겠죠..? 그 경우를 방지해서 중요한 정보를 저장할 때 Key 를 사용해 저장합니다. 데이터를 읽거나 쓸 때 Key 가 있..
· Android
우아한테크코스에서 flow 를 배우지 않는다는 소식에 혼자 독학하는 flow deep dive! 시작! https://developer.android.com/kotlin/flow Android의 Kotlin 흐름 | Android Developers Android의 Kotlin 흐름 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 코루틴에서 흐름은 단일 값만 반환하는 정지 함수와 달리 여러 값을 순차적으로 내보낼 developer.android.com Flow 란? Coroutine flow 는 단일 값만 반환하는 suspend function 과 다르게 여러 값을 순차적으로 내보낼 수 있는 type 이다. 예를 들어 이 flow 를 사용하면 데이터베이스의 업데이트를 실시간..
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 테스트 의 필요성을 인지하지 못했다. 리팩터링 할 때마다 테스트 리팩터링이 계속해서 필요했다. 또한, 기능을 다 구현했는데 하나하나 테스트를 짜야한다는 것이 그저 숙제로 느껴졌다. 시간이 부족하다는 이유로 기존에 작성했던 테스트를 전부 주석 처리하고 제출하는 만행을 저질렀다. 리뷰어님이 다음과 같은 메세지 를 남겨주셨다. 도메인 관련 클래스를 잘 분리하고 테스트 코드까지 잘 작성해주셨습니다. 다만 안드로이드와 관련된 코드들은 테스트가 작성되지 않은게 아쉬웠습니다. 그러자 내가 테스트를 잘 못짜서 필요성을 인지하..
· 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
Fragment 란? 테블릿처럼 큰 화면에서 기존엔 Activity 두개를 띄우거나 했지만 서로 다른 생명주기를 가져서 관리가 힘들었다..!! 그래서, 동일한 액티비티 생명주기를 공유하지만 화면을 서로 다르게 사용하기 위해 Fragment 가 탄생했다. Fragment 는 FragmentActivity 내의 어떤 동작 또는 사용자 인터페이스 일부를 나타낸다. Activity 와 결합하여 창이 여러개인 UI 를 빌드할 수 있으며 하나의 Fragment 여러 Activity 에서 재사용할 수 있다. 자체적인 생명 주기를 가지며 자체 입력 이벤트를 수신하고 Activity 실행 중에 추가 및 삭제가 가능하다. Fragment 는 항상 액티비티 내에서 호스팅되어야 하며 액티비티의 생명 주기에 직접적인 영향을 받..
오목 미션을 진행하면서 렌주룰의 금수를 처음 알게 되었다. 렌주룰의 금수 : 먼저 시작하는 흑돌이 무조건 유리하기 때문에 흑목은 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 에서 상태 패턴을 알게 되었고 적용해 보았다. 상태 패턴 : 객체지향 관점으로 유한 상태 기계를 구현하는 디자인 패턴 그럼 유한 상태 기계는 뭘까? 유한 상태 기계는 유한한 개수의 상태를 가질 수 있는 기계이다. 한 번에 오로지 하나의 상태만을 가지게 되며, 어떠한..
이전 글에 이어서 현직자 분의 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()..
현직자 리뷰어 님의 피드백을 바탕으로 정리하였습니다. 페어 프로그래밍 리뷰 페어 프로그래밍을 처음해봐서 아직 제대로 이해하지 못한 코드를 많이 적용하게 되었고 그러다 보니 이해도가 점점 떨어지게 되었다. 리뷰 또한, 당연하게도 제대로 이해하지 못한 것들의 질문을 많이 받게 되었다. 그 질문들에 대한 답을 간단하게 정리해 본다. 1. 스켈레톤 코드 커밋 프리코스 때 부터 시작하기 전에 대략적인 구조를 만들고 그 구조에 맞게 클래스를 미리 정의하고 커밋했다. 기능을 구현하는 과정에서 어떻게 구현을 해 나갈지 모르고 구현 시 코드에 많은 변경이 있을 것이다. 따라서 작성자 본인 외에 알기 어려운 커밋 단위는 좋지 않은 커밋이다. 귀찮음을 피하는 것은 커밋으로 해결해선 안된다. 2. 멤버 변수로 사용할 필요가 ..
베르_최성훈
'안드로이드' 태그의 글 목록