본문 바로가기

분류 전체보기

(173)
[Android] MVC, MVP, MVVM 기본 개념 MVC 패턴 Model + View + Controller Model : 데이터와 데이터를 처리하는 부분 View : UI Controller : 사용자의 입력(Action)을 받고 처리하는 부분 MVC 패턴의 동작 순서 Controller에 사용자의 입력(Action)을 받는다. Controller에서 Action을 확인하고 Model을 업데이트(조작)한다. Controller에서 해당 Data를 보여줄 View를 선택 View는 Model을 사용하여 화면에 보여준다. 이 때, Controller는 View를 선택만하고 업데이트를 시켜주지 않기 때문에 View는 Model을 이용하여 업데이트 하게 된다. View가 업데이트 하는 방법으로는 Model을 직접 사용한다. Model에서 VIew에게 Noti..
[Mockito] Mock 객체 란? Mock 이란? 실제 객체를 다양한 조건으로 인해 제대로 구현하기 어려울 경우 가짜 객체를 만들어 사용하는데, 이를 Mock 객체라 한다. Mock 객체가 필요한 경우. 테스트 작성을 위한 환경 구축이 어려운 경우. 테스트가 특정 경우나 순간에 의존적인 경우. 시간이 걸리는 경우 Mock에 대한 기본적인 분류 개념. 1. 테스트 더블 테스트를 진행하기 어려운 경우 대신해 테스트를 진행할 수 있도록 만들어주는 객체. Mock객체와 유사한 의미, 테스트 더블이 좀더 상위 의미로 사용. 2. 더미 객체(Dummy Object) 단순히 인스턴스화될 수 있는 수준으로만 객체를 구현. 객체가 필요할 뿐 객체의 기능까지는 필요하지 않은 경우에 사용. 3. 테스트 스텁(Test Stub) 더미 객체가 실제로 동작하는 ..
[RxJava] 5장. 스케줄러 스케줄러 비동기로 동작할 수 있도록 이용한다. subscribeOn, observeOn에 스케줄러를 지정하여 데이터의 흐름이 발생하는 스레드와, 처리된 결과를 구독자에게 전달하는 스레드를 분리할 수 있다. String[] data = {"1", "2", "3"}; Observable source = Observable.fromArray(data) .doOnNext(data -> Log.d("Original data = " + data)) .subscribeOn(Schedulers.newThread()) .observeOn(Schedulers.newThread()) .map(data -> "#" + data); source.subscribe(Log::i); CommonUtils.sleep(1000); //..
백준 알고리즘 https://blog.naver.com/fhskf94kr Heeg's Log : 네이버 블로그 Heeg's Log https://heegs.tistory.com/ blog.naver.com 백준알고리즘은 네이버 블로그에 작성된 것들이 있으므로 필요시 참고. 333개 문제. 코드 및 풀이.
[RxJava] 4장. 리액티브 연산자의 활용 4 - 조건 연산자 및 기타 연산자 조건 연산자 Observable의 흐름을 제어하는 역할. amb() : 둘 중 어느 것이든 먼저 나오는 Observable을 채택 takeUntil(other) : other Observable에서 데이터가 발행되기 전까지만 현재 Observable을 채택 skipUntil(other) : other Observable에서 데이터가 발행될 때 까지 현재 Observable을 무시 all() : Observable에 입력되는 값이 모두 특정 조건에 맞을 때만 true를 발행. 조건에 맞지 않는 값이 있으면 바로 false를 발행. amb() 함수 여러 개의 Observable 중 하나의 Observable을 선택하는데, 선택 조건은 가장 먼저 데이터를 발행하는 Observable이다. String[] nu..
[RxJava] 4장. 리액티브 연산자의 활용 3 - 결합 연산자 결합 연산자 여러개의 Observable을 내가 원하는 Observable로 결합하는데 사용하는 연산자. zip : Observable에서 데이터를 모두 새로 발행했을 때 그것을 합해준다. combineLatest : 처음에 각 Observable에서 데이터를 발행한 후에는 어디에서 값을 발행하던 항상 최신 값으로 갱신. merge : 최신 데이터 여부와 상관없이 각 Observable에서 발행하는 데이터를 그대로 출력. concat : 입력된 Observable을 Observable 단위로 이어 붙여준다. zip() 함수 각각의 Observable을 모두 확용해 2개 혹은 그 이상의 Observable을 결합한다. 최대 9개의 Observable을 결합할 수 있다. A, B 2개의 Observable을..
[RxJava] 4장. 리액티브 연산자의 활용 2 - 변환 연산자 변환 연산자 만들어진 데이터 흐름을 원하는 대로 변형할 수 있는 연산자. concatMap() 함수 flatMap() 과 매우 비슷하다. flatMap의 경우 인터리빙(interleaving) 현상이 발생할 수 있기 때문에 데이터의 처리가 순차적으로 진행되지 않을 가능성이 있다. 하지만, concatMap의 경우 먼저 들어온 데이터 순서대로 처리하여 결과를 낼 수 있도록 보장해준다. String[] num = {"1", "2", "3"}; Observable source = Observable.interval(100L, TimeUnit.MILLISECONDS) .map(Long::intValue) // interval에서 발행되는 값은 Long 타입이므로, Integer 객체로 변환 .map(index ..
[RxJava] 4장. 리액티브 연산자의 활용 1 - 생성 연산자 생성 연산자 : just(), fromXXX(), create() ... 변환 연산자 : map(), flatMap(), groupBy(), buffer() ... 필터 연산자 : filter(), take(), skip() ... 결합 연산자 : zip(), concat(), merge(), combineLatest() 조건 연산자 : takeUntil(), all() ... 에러 처리 연산자 : onErrorReturn(), retry() ... 기타 연산자 : subscribe(), reduce(), observeOn() ... 생성 연산자 데이터 흐름을 만드는 연산자. Observable을 만드는 연산자라고 생각하면 된다. interval() 함수 일정 시간 간격으로 데이터 흐름을 생성하며, 현재..