1. Concat Concatenate : '사슬 같이 잇다' 라는 뜻 A Task와 B Task 가 있다면, A -> B 순으로 작업을 진행한다. val observer1: Observable = Observable.create { emitter -> GlobalScope.launch { delay(1000) Log.i("test_log","obs 1") emitter.onNext("1") emitter.onComplete() } } val observer2: Observable = Observable.create { emitter -> GlobalScope.launch { delay(1000) Log.i("test_log","obs 2") emitter.onNext("2") emitter.onComp..
Flutter의 UI 코드는 백엔드 코드작성를 작성하는 dart 파일 안에 같이 코드를 작성할 수 있게 되어 있습니다. (Android Native의 UI 코드는 xml 파일에 , 백엔드 코드는 Java 또는 Kotlin 파일에 작성합니다.) 그래서 기본 프로젝트 코드를 보면 UI, 비지니스 로직 부분이 더욱 강하게 연결되어 있습니다. 그래서! Business Logic을 분리하게 도와주는 라이브러리 중 Provider 라이브러리를 활용하게 되었습니다. (참고로, Bloc 패턴 라이브러리도 존재합니다. Provider 보다 더욱 비지니스 로직을 분리하기에는 좋지만, 학습량이 더욱 많아 대규모 프로젝트에 적합합니다. ) Provider가 무슨 역할을 하나요? => Provider 라이브러리는 Data Cl..
https://m.post.naver.com/viewer/postView.nhn?volumeNo=6721006&memberNo=34635212 빨리 써먹는 RxJava와 Android [BY 부스트코스] SUMMARYRxJava 와 Android Reactive Programming 은 최근 2년간 유행어처럼 번져 나간 ... m.post.naver.com 간단하게 RxJava란 무엇일까? => '비동기 처리를 효과적으로 할 수 있게 도와주는 라이브러리' 라고 보면 된다. 내가 RxJava를 사용하게 된 이유는, Retrofit api 통신에서 여러 api 작업이 끝나는 시점을 catch 해야 하는데, 성공 시점에 차례차례로 api 들을 호출해야 하는 안좋은 구조를 개선하기 위해서이다. map() : 데..
카메라 캡쳐 및 QR 코드 인식 영역에서 가운데가 뚫린 형태의 뷰가 많이 사용되고 있습니다. 위와 같이 가운데가 뚫린 Overlay 형태의 뷰를 그리는 방법에 대해서 알아보겠습니다. 원래는 xml 단계에서 처리할 수 있을거라 예상했지만, Round Corner 형태의 사각형을 사용하기 때문에 onDraw 단계에서 직접 그려주는 방법으로 방향을 잡았습니다. 안드로이드 뷰를 그리는 LifeCycle 함수 중, Overlay 커스텀 뷰 제작에서 사용할 것들만 간단히 살펴보겠습니다. 1) onMeasure() 에서 사이즈를 측정하고, 2) layout() 뷰의 위치와 크기를 할당합니다. 그리고 3) dispatchDraw() 에서 그립니다. 레이아웃인 뷰는 onDraw() 를 호출하지 않고, onDispatch..
Dialog 안에 ViewPager를 넣는다. 그리고 ViewPager에 FragmentPagerAdapter를 적용시킬때 다음의 에러가 발생한다. vp_space.adapter = PagerAdapter(supportFragmentManager) // 에러 vp_space.adapter = PagerAdapter(childFragmentManager) // 정상 동작 NestedFragment 들은 FragmentManager를 전달할 때 child의 것으로 전달해야 한다. 이걸 몰라서 반나절을.. 흑 https://developer.android.com/about/versions/android-4.2.html#NestedFragments Android 4.2 APIs | Android Develope..
mvc, mvp, mvvm 등 많은 Architecture 들이 있다. 먼저 왜 이러한 구조 방안이 생기게 되었을까? 1. 좋은 유지보수 2. 깔끔한 코드 분리 (특히 view, model 간의 분리) 3. Testing 가능한가 보통 mvc 패턴에서의 코드 사용 class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { fab.setOnClickListener { // 데이터 갱신 요청 코드 // fun getItems(): arrayList() // Model에 접근해서 데이터를 가져옴 // 위의 데이터를 이용해서 View 갱신 } } } Controller는 위의 onClickListen..
간단하게 추상 메소드 한개를 가진 인터페이스를 뜻한다. - Single Abstract Method - lamda 식을 제공 - interface/ abstract 이어야 하고, 1개의 abstract method를 가지고 있어야 함 - setter 가 정의되어 있어야 함 주의사항 JAVA에서 만들어진 interface/ abstract 클래스는 kotlin에서 람다식으로 사용할 수 없다. interface MyOnClickListener { void onClick() } public void setOnMyOnClickListener (MyOnClickListener listener) { this.onClickListener = listener; } tv.setOnMyOnClickListener { } ..
Flutter는 Google의 UI Tool kit으로 웹, 모바일, 데탑을 아름답게 만들게 해준다. 먼저, 아주 간단한 UI 구성의 코드를 보자. 1. 2개의 Widget으로 구성된 예시 2. 3개의 Widget으로 구성된 예시 Flutter의 모든것은 Widget이다. 그리고 Widget은 immutable 하다. Flutter의 렌더링 과정은 3개의 트리 구조이다. 1. Widget 2. Element 3. RenderObject Widget Element RenderObject Docs 설명 Widget은 Element의 설정을 설명한다. (Widget: describes the configuration for an Element) Element는 Widget의 인스턴스이다. (it's an in..