분류 전체보기
RxBus - Rxjava로 전역 callback으로 구현하기
앱을 개발하다 보면 콜백함수를 활용해서 구현할 일이 많다. 예를들어 사용자가 설정화면에서 로그인을 하는 과정을 생각해보자. 처음에는 프로필사진도 비어있을테고 유저 이름도 '게스트'로 되어있을 것이다. 로그인을 완료했으면 이러한 UI들을 사용자 정보에 맞게 변경해주어야 한다. Activity간에 Intent도 넘기며 다양하게 구현할수 있지만 클래스간 의존성이 강하게 생긴다. 어느 클래스간 원할때 콜백을 쉽게 하는 방법을 알아보자. 구현 app.gradle 내에 다음과 같이 rxjava 라이브러리를 추가해준다. dependencies { // reactiveX Programming implementation 'io.reactivex.rxjava2:rxjava:2.2.13' } 이후에 다음과 같이 객체를 생성..
[Android] Firebase Remote Config 사용하기
Firebase 내에 Remote Config라는 기능이 존재합니다. 이를 활용하여 업데이트될 필요가 있는 정적 데이터에 대해 서버 없이 저장할 수 있습니다. 초기화 앱내에 remote_config_defaults.xml을 만들어줍니다. 파일 존재 이유는 아래서 다시 설명하겠습니다. 경로는 res > xml에 생성합니다. Application 클래스 onCreate() 함수 부분에 다음과 같이 초기화를 해줍니다. class MyAppApplication : android.app.Application() { override fun onCreate() { super.onCreate() Firebase.remoteConfig.run { setDefaultsAsync(R.xml.remote_config_defa..
Activity / Fragment ViewBinding Boilerplate Class
현업에서 다양한 개발자와 명세를 맞추어 개발하는 것은 매우 중요하다. 파편화된 코드 스타일은 곧 가독성을 해치고, 버그가 발생하거나 기능을 추가할 때 자칫하면 개발 효율성을 크게 저하시킬 수 있다. MVVM 패턴을 사용할때 다음은 ViewBinding을 강제하는 Activity, Fragment BoilerPlate Class이다. Generic을 활용하기 때문에 모든 하위 클래스는 이를 상속받아 보다 쉽게 ViewBinding을 강제한 코드를 빠르게 구현할 수 있다. 뷰 바인딩 https://developer.android.com/topic/libraries/view-binding?hl=ko 뷰 결합 | Android 개발자 | Android Developers 뷰 결합 뷰 결합 기능을 사용하면 뷰와 ..
좋은 개발자란?
개발자란? 다음부터는 이해를 돕기 위해 건물과 건설 현장에 프로그래밍을 빗대어 설명하겠습니다. 기업에서는 사소한 버그 하나가 큰 스노볼(눈밭에서 주먹만 한 눈을 굴리면 큰 눈사람이 완성되듯이, 작은 실수 하나가 나중에는 걷잡을 수 없이 커진다는 뜻) 이 되어, 막대한 경제적인 손실을 안겨줄뿐더러 유저에게 매우 좋지 않은 경험을 줄 수 있습니다. 이를 줄이기 위해 개발자는 다양한 노력을 기울여야 하며, 단순히 건설 현장에서 벽돌을 쌓아 올리는 사람인 프로그램 코더(Coder)가 아닌, 어떻게 하면 벽돌을 효율적으로 쌓아야 건물이 무너지지 않을지 고민하고 설계하는 프로그램 설계자(Architect)가 되어야 함을 명심해야 합니다. 프로그래밍? 프로그래밍은 크게 두 가지로 구분할 수 있습니다 추상화, 프로그램..
SwiftUI Navigation View To Root - 네비게이션 뷰 관리하기
뷰를 만들다 보면 뷰 1에서 뷰 2로 이동하고, 뷰 2에서 뷰 3으로 이동하는 등 그 깊이와 복잡도가 올라갈 수밖에 없다. 이번에는 swiftUI에서 1->2->3->4 뷰로 이동했다고 가정할 때, 다시 뷰 1(root view)로 돌아오는 방법에 대해 알아보자. 기본적으로 다음과 같이 NavigationView와 NavigationLink를 활용해 뷰를 이동하게 된다. struct View1: View { @State var gotoView2 = false var body: some View { NavigationView { Button("Goto View 2") { gotoView2 = true } .navigationTitle("View 1") .background( NavigationLink( d..
SwiftUI + CoreData FetchRequest Predicate 사용법
swiftUI 기반 환경에서 CoreData를 사용시 데이터를 필터하여 보여주어야 할 때가 있다. 차근차근 알아보자 데이터 불러오기 먼저 FoodEntity라는 데이터를 사용한다고 가정해보자. 다음과 같이 CoreData로 부터 데이터를 불러올 것이다. @FetchRequest( sortDescriptors: [NSSortDescriptor(keyPath: \FoodEntity.timestamp, ascending: true)], animation: .default ) private var foods: FetchedResults 필터 적용하기 여기에 predicate인자를 통해 필터를 적용할수 있다 @State var filterKey = "한식" @FetchRequest( sortDescriptors:..
Google Admob 보상형 광고 적용 및 최적화 하기
Google Admob 광고는 전면광고, 배너광고등 다양한 API가 존재하지만 이번 포스팅 에서는 보상형 광고만 다룰 예정이다. 보상형 광고 Google(구글 공식 Reference) Admob SDK를 이용하기 위해서는 Gradle에 추가 해주고 앱 실행시점에 초기화를 해주어야 하지만 이 글에서 다룰 새로운 보상형 광고 API 는 굳이 초기화를 해주지 않아도 되는것 같다.. 나중에 실험해보야겠지만 일단 PASS 2020/05/04 - [Android] - Google Admob 광고 사용하기 Google Admob 광고 사용하기 먼저 Gradle에 Google Admob 광고를 Import 해주자 Project-level allprojects { repositories { google() } } App..
Google Admob 광고 사용하기
먼저 Gradle에 Google Admob 광고를 Import 해주자 Project-level allprojects { repositories { google() } } App-level dependencies { implementation 'com.google.android.gms:play-services-ads:19.1.0' } Manifest.xml 내에도 다음과 같이 등록해 주어야한다. 위 "@string/admob_app_id"는 가독성을 위해 String 내에 정의해 두었다. 직접 쓰든 String 내에 정의하든 발급 받은 Admob App ID를 적어주면 된다. 주의할 점은 광고 단위 ID가 아니라 앱 ID 이다. 그 다음 애드몹 광고를 사용하기 위해서는 앱 실행 시점에 초기화를 해주어야 한..