HOME

[RxJava] RxJava 이해하기 - 2. Observable

Observable Observable이란 RxJava의 가장 핵심적인 요소는 Observable이다. Observable은 데이터 흐름에 맞게 알림을 보내 Observer가 데이터를 사용할 수 있도록 한다. 즉, Observable을 이용해 데이터를 회수하고 변환하는 메커니즘을 정의하고, Observer는 이를 구독해 데이터가 준비되면 이에 반응한다. :bulb: 이 패턴을 Oberver Pattern이라고 하며, Reactive Programming은 이 Oberver Pattern에 기반을 둔다. Observable은 Collections(List, ArrayList, …)를 사용할 때와 같은...

더보기

[RxJava] RxJava 이해하기 - 1. Reactive Programming 이란

Reactive Programing RxJava를 시작하기 앞서, Reactive Programming이 무엇인지에 대해 알아보려 한다. Reactive Programming이란 데이터 흐름과 전달에 관한 프로그래밍 패러다임이다. 우리는 주로 알고리즘 문제와 같이 절차를 명시하여 순서대로 실행되는 Imperative Programming(명령형 프로그래밍)을 한다. 반면 Reactive Programming이란 데이터의 흐름을 먼저 정의하고 데이터가 변경되었을 때 연관된 작업이 실행된다. 즉 프로그래머가 어떠한 기능을 직접 정해서 실행하는 것이 아닌, 시스템에 이벤트가 발생했을 때 알아서 처리되는 것이다. ...

더보기

[Design Pattern] Repository Pattern 이란

개요 발생 배경 비즈니스 로직은 프로그램의 핵심이 되는 요소이며, 비즈니스 로직을 잘 짜야 원하는 결과를 올바르게 도출할 수 있다. 이때 비즈니스 로직은 보통 데이터베이스나 웹서비스 등의 데이터 저장소에 접근하게 되는데 이 과정에서 여러 문제가 발생할 수 있다. 주로 중복되는 코드, 오류를 발생할 가능성이 있는 코드, 오타, 비즈니스 로직 테스트의 어려움 등이 있다. 이에 따라 몇 가지 요구사항이 발생하는데, (1) 비즈니스 로직과 데이터 레이어를 분리해야 하고 (2) 중앙 집중 처리 방식을 통해 일관된 데이터와 로직을 제공해야 한다는 것이다. Solution is Repository 따라서 이...

더보기

[Android] getContext()와 requireContext()의 차이

getContext()와 requireContext() 먼저 메소드의 정의를 보면 다음과 같다. @Nullable public Context getContext() { return mHost == null ? null : mHost.getContext(); } @NonNull public final Context requireContext() { Context context = getContext(); if (context == null) { throw new IllegalStateException("Fragment " + this + " not attached to a ...

더보기

[Android Kotlin] 안드로이드 카카오 SDK V2 로그인

미리보기 1. 애플리케이션 등록 먼저 Kakao Developers 사이트에 들어가 카카오 로그인을 연동할 애플리케이션을 추가한다. 앱 아이콘은 필수 사항이 아니며, 앱 이름과 회사 이름만 입력해주어도 된다. 2. 플랫폼 등록 [내 애플리케이션] > [앱 설정] > [플랫폼] 에서 플랫폼을 등록할 수 있다. Android와 연동할 것이므로 Android 플랫폼 등록을 클릭한다. 패키지명은 Module 수준의 build.gradle 파일이나, AndroidManifest.xml 파일에서 확인할 수 있다. 프로젝트를 처음 만들 때 설정한 패키지명을 등록해준다. 등록할 키 ...

더보기

[Android] Custom Font 적용하기 (+상업용 무료 폰트 추천)

개요 디자이너와 작업을 하게 된다던지, UI에 관심있는 개발자라면 내가 만든 어플리케이션에 예쁜 폰트를 적용하고 싶을 것이다. 이 포스트에서는 사용자 Device의 폰트가 아닌 내가 지정한 폰트를 어플리케이션에 지정할 수 있는 방법을 소개한다. 1. Font 다운로드 먼저, 사용하고 싶은 폰트를 .ttf, .ttc, otf 혹은 .xml 형태로 가지고 있어야 한다. 개인적으로, 상업용 무료인 폰트들을 모아놓은 아주 유용한 사이트를 애용한다. :bulb: 상업적 무료이긴 하나, 혹시 모르니 라이선스를 잘 확인하자! 이번에는 고딕 폰트 중 가장 유명하고 가장 널리 사용되는 Noto Sans를 적용해...

더보기

[Android Kotlin] 안드로이드 가속도 센서의 지구계 변환

안드로이드 가속도 센서의 지구계 변환 개요 안드로이드에는 다양한 센서가 있다. 센서의 좌표계는 Device 기준이며, 이를 World 기준으로 바꾸려면 추가적인 변환이 필요하다. 다행히도 SensorManager의 getRotationMatrix를 통해 World Coordinate 로 바꿔주는 회전행렬을 쉽게 구할 수 있다. 우리는 이를 이용해서 연산만 해주면 된다! Device Coordinate System World Coordinate System 센서 관련 내용과 사용하는 방법은 공식 문...

더보기

[Android] 안드로이드 아키텍쳐 컴포넌트(AAC) - LiveData, Databinding, Room, ViewModel

Android Architecture Component(AAC) 안드로이드 아키텍처 구성요소 는 테스트와 유지관리가 쉬운 앱을 디자인하도록 돕는 라이브러리 모음이다. LiveData 개요 LiveData는 관찰이 가능한(Observable) 데이터 홀더 클래스 이다. Activity, Fragment, Service와 같은 컴포넌트의 LifeCycle을 인식하며 LifeCycle 인식을 통해 활성 상태에 있는 컴포넌트의 Observer만 업데이트한다. Observer는 LiveData의 관찰자 이다. Observer의 Lifecycle이 STARTED 또는 RESUMED 상태이면 LiveData는 Obs...

더보기

[Android] Context란? getContext(), getApplicationContext(), getBaseContext()의 차이점

Context란? 먼저 공식문서에 의하면 다음과 같다. Interface to global information about an application environment. This is an abstract class whose implementation is provided by the Android system. It allows access to application-specific resources and classes, as well as up-calls for application-level operations such as launching activities, broadcasting an...

더보기

[C++ 알고리즘] 백준 7576번 : 토마토

DFS BFS 토마토 문제 철수의 토마토 농장에서는 토마토를 보관하는 큰 창고를 가지고 있다. 토마토는 아래의 그림과 같이 격자 모양 상자의 칸에 하나씩 넣어서 창고에 보관한다. 창고에 보관되는 토마토들 중에는 잘 익은 것도 있지만, 아직 익지 않은 토마토들도 있을 수 있다. 보관 후 하루가 지나면, 익은 토마토들의 인접한 곳에 있는 익지 않은 토마토들은 익은 토마토의 영향을 받아 익게 된다. 하나의 토마토의 인접한 곳은 왼쪽, 오른쪽, 앞, 뒤 네 방향에 있는 토마토를 의미한다. 대각선 방향에 있는 토마토들에게는 영향을 주지 못하며, 토마토가 혼자 저절로 익는 경우는 없다고 가정한다. 철수는 창고에...

더보기