HOME

[Design Pattern] GoF 생성 패턴 - 추상 팩토리 패턴(Abstract Factory Pattern)

추상 팩토리 패턴(Abstract Factory Pattern) GoF 디자인 패턴 중 생성 패턴에 해당한다. 추상 팩토리 패턴은 클래스에서 실제 구현부를 정의하지 않고 팩토리에 인터페이스를 생성하도록 요청하여 인스턴스를 가져온다. 따라서 인터페이스를 구현한 팩토리를 통해 서로 관련성이 있는 객체의 집합을 생성할 수 있다. 대표적인 예로 자바의 GUI 라이브러리인 AWT/Swing의 록앤필 기능이 있다. 운영체제에 따라 다른 디자인의 컴포넌트를 제공한다. 사용법 객체의 생성·표현 방식과 무관하게 시스템을 독립적으로 만들고자 할 때 여러 제품군 중 하나를 선택해 시스템을 설정해야 하고 한번 구성한...

더보기

[IntelliJ, Android Studio] Plugin 추천

JSON To Kotlin Class 가장 많이 쓰는 플러그인이다. 말 그대로 JSON을 Kotlin의 data class로 변환해준다. class의 이름을 포함해 Property, Annotation, Inner Class Model 등 여러 옵션을 추가로 설정할 수 있다. API 요청 시 Model을 만들 때 정말 편리하다. String Manipulation String을 여러 방식으로 조작할 수 있도록 지원하는 플러그인이다. 대표적으로 변수 이름의 Naming Rule을 자동으로 변환해주는 기능이 있다. Snake Case, Pascal Case, Came...

더보기

[Design Pattern] GoF(Gang of Four) 디자인 패턴

디자인 패턴이란 디자인 패턴은 모듈의 세분화된 역할이나 모듈들 간의 인터페이스 구현 방식을 설계할때 참조할 수 있는 전형적인 해결 방식을 말한다. 디자인 패턴을 통해 설계 문제, 해결 방법, 해결 방법을 언제 적용해야 할지, 그 결과는 무엇인지 등을 알 수 있다. 또한 디자인 패턴은 한 패턴에 변형을 가하거나 어떠한 요구사항을 반영하면 다른 패턴으로 변형되는 특징이 있다. 1995년 GoF(Gang of Four)라고 불리는 Erich Gamma, Richard Helm, Ralph Johnson, John Vissides가 처음으로 디자인 패턴을 구체화하였다. GoF의 디자인 패턴은 소프트웨어 공학에서 가장 ...

더보기

[RxJava] RxJava 이해하기 - 7. Backpressure와 Flowable

Backpressure와 Flowable RxJava에는 Backpressure라는 개념과 이를 처리하는 Flowable class가 존재한다. Backpressure가 무엇이고 Flowable은 어떻게 쓰는 것인지 알아보자. 배압(Backpressure) 배압이란 데이터 생산과 소비가 불균형적일 때 일어나는 현상이다. 만약 10,000개의 데이터를 0.1초마다 발행하고, 소비는 10초마다 한다면 소비와 관계없이 데이터는 스트림에 계속 쌓이게 된다. Observable이 데이터를 발행하는 속도를 Observer의 소비 속도가 따라가지 못하는 것이다. 이는 결국 메모리가 overflow되고 OutOfMemo...

더보기

[RxJava] RxJava 이해하기 - 6. subscribeOn과 observeOn의 차이

subscribeOn과 observeOn의 차이 RxJava는 operator를 통해 chaining 기법을 사용할 수 있다. subscribeOn과 observeOn도 마찬가지로 chaining 기법을 적용할 수 있다. 먼저 두 연산자의 역할은 다음과 같다. subscribeOn은 Observable이 데이터 흐름을 발생시키고 연산하는 스레드를 지정할 수 있고, observeOn은 Observable이 Observer에게 알림을 보내는 스레드를 지정할 수 있다. 그럼 두 연산자의 차이는 무엇일까? subscribeOn은 여러번 호출되더라도 맨 처음의 호출만 영향을 주며 어디에 위치하든 상관없다. obse...

더보기

[RxJava] RxJava 이해하기 - 5. 스케줄러

스케줄러 스케줄러란 RxJava의 스케줄러는 RxJava의 코드가 어느 스레드에서 실행될 것인지 지정하는 역할을 한다. RxJava만 사용한다고 비동기 처리가 되는 것이 아니라, 스케줄러를 통해 스레드를 분리해주어야 비동기 작업이 가능한 것이다. 스케줄러의 지정은 RxJava의 subscribeOn 과 observeOn 연산자를 통해 가능하다. subscribeOn은 Observable이 데이터 흐름을 발생시키고 연산하는 스레드를 지정할 수 있고, observeOn은 Observable이 Observer에게 알림을 보내는 스레드를 지정할 수 있다. RxJava의 큰 장점은 특정 스케줄러를 사용하다가 다른 스...

더보기

[Android] IllegalStateException: Can not perform this action after onSaveInstanceState

Caused by: java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState 발생 상황 Fragment의 onStop()에서 transacntion을 실행했을때 위와 같은 Runtime Error가 발생하였다. supportFragmentManager.beginTransaction() .replace(R.id.fragment_container, SomeFragment()) .commit() 원인 에러 메시지를 보면 onSaveInstanceState 이후에 해당 코드를 실행할 수 없다고 한다. 실...

더보기

[RxJava] RxJava 이해하기 - 4. Hot Observable, Cold Observable

Cold Observable Observable에는 Hot Observable과 Cold Observable 두 가지가 있다. 일반적으로 우리가 사용하는 것들은 모두 Cold Observable이라고 한다. Cold Observable은 Observable을 생성하고 Observer가 subscribe를 호출할 때까지 데이터 발행을 하지 않는다. 이 방식을 lazy하다고 한다. :bulb: Cold Observable의 예시로는 데이터베이스 쿼리, 파일 읽기, API 요청 등이 있다. 원하는 시점에 데이터를 요청하고 처음부터 끝까지 결과를 받아온다. Hot Observable 그럼 Hot Obse...

더보기

[RxJava] RxJava 이해하기 - 3. Single, Maybe, Completable

Single 개념 Single은 Observable의 변형된 형태이다. Observable과 비슷하지만, 여러 개의 데이터를 발행할 수 있는 Observable과 달리 Single은 한 개의 데이터(혹은 에러)만을 발행한다. 이전 포스트에서 말한 것처럼 Observable은 3가지 알림을 보내는 반면, Single은 onSuccess, onError 2가지의 알림을 보낸다. onSuccess : 데이터 하나를 발행함과 동시에 종료 onError : 에러가 발생했음을 알림 Marble Diagram을 보면 Single은 데이터 하나를 발행함과 동시에 종료한다. 데이터 발행(onNext)과 완료(o...

더보기

[Github] Private Repository의 Contribution 잔디밭에 보이게 하기

귀찮으신 분들은 본론부터 보세요 개요 한창 1일 1커밋을 하던 나.. (월루하는 내 모습) 어쩌다 로그인하지 않은 상태로 내 깃허브를 구경하게 되는데.. 침착하고 생각을 해보자.. Public Repository의 기록은 다 뜨고 Private Repository만 기록이 안 뜨네.. 그럼 Private Repository에서 한 건 잔디밭에 못 띄우나...? 그동안 내가 했던 커밋들은 무용지물인가..? 모든 Repository를 Public으로 바꿔야하나..? (보여주기 싫은 Repository도 있는데....!) 방법이 있더라구요 ㅎㅎ (나만 몰...

더보기