본문 바로가기

Language

(35)
[Kotlin] 2장. 변수와 자료형, 연산자 1 - 코틀린 패키지 Kotlin 파일 생성 파일 이름과 생성한 class 이름이 같은 경우 Project 창에서 파일의 확장자를 표시하지 않는다. 하지만, 파일 이름과 생성한 class 이름이 다르거나, 파일 이름과 같은 class가 존재하지만, 다른 class 도 함께 존재하는 경우에는 Project 창에서 파일의 확장자를 표시한다. 위의 이미지의 경우 File1 파일은 Person Class만 구현했기 때문에 좌측의 Project 화면에서 .kt가 붙어서 나오는 것을 확인할 수 있다. File1.kt 안에 class File1(val nem: String) 과 같이 파일 이름과 일치하는 class를 작성해도 마찬가지로 .kt 확장자를 확인할 수 있다. 사용자 클래스 가져오기 Kotlin에서는 다른 패키지의 요소를 imp..
[Kotlin] 1장. 코틀린 시작하기 Kotlin 공부 시작. 사용 교재 아주 기본적인 내용은 건너뛰고 정리하여 게시글을 작성할 예정. 책에 나와있는 개발 툴을 사용하여 진행. JetBrains사의 IntelliJ IDEA를 사용. https://www.jetbrains.com/idea/download/#section=windows Download IntelliJ IDEA: The Java IDE for Professional Developers by JetBrains Download the latest version of IntelliJ IDEA for Windows, macOS or Linux. www.jetbrains.com 1장은 개발환경 세팅에 대한 내용만 있으므로, 필요하다 생각되는 것만 작성하도록 한다. Tool > Kotlin..
[RxJava] 8장. 테스팅과 Flowable - Flowable 클래스 Flowable 클래스 RxJava 2.x에 새로 도입된 클래스. 배압(backpressure) 이슈를 위해 별도 분리된 클래스. Observable 클래스의 성능을 향상시키기 위해서 도입된 클래스로, 기존의 Observable 클래스에서 배압 처리가 불필요한 경우, 초기 로딩에 약간의 오버헤드가 존재했는데 이것을 제거함. Flowable의 활용은 기본적으로 Observable과 동일하다. toObservable(), toFlowable() 함수를 사용하여 Observable과 Flowable을 서로 변환한다. Flowable.just("Hello flowable").subscribe(System.out::println); Flowable.fromCallable(() -> { Thread.sleep(10..
[RxJava] 7장. 디버깅과 예외 처리 3 - 흐름 제어 흐름 제어 Observable이 데이터를 발행하는 속도와 옵서버가 데이터를 받아서 처리하는 속도 사이의 차이가 발생할 때 사용하는 함수. 주로 데이터를 받아서 처리하는 속도가 발행되는 속도보다 느릴 경우에 발생한다. sample() 함수 특정 시간 동안 가장 최근에 발행된 데이터만 걸러준다. 즉, 아무리 많은 데이터가 들어와도 해당 시간 구간의 마지막 데이터만 발행하고 나머지는 무시한다. String[] data = {"1", "2", "3", "4", "5"}; // 시간 측정용 CommonUtils.exampleStart(); Observable source100 = Observable.fromArray(data) .take(4) .zipWith(Observable.interval(100L, Time..
[RxJava] 7장. 디버깅과 예외 처리 2 - 예외 처리 예외처리 RxJava에서는 try-catch 문을 사용해서 예외처리를 할 수 없다. onError 이벤트는 데이터 흐름이 바로 중단되므로, Out Of Memory 같은 중대한 에러가 발생했을 때만 활용. onErrorReturn() 함수 에러가 발생했을 때 내가 원하는 데이터로 대체하는 함수. onError 이벤트는 발생하지 않는다. String[] val = {"1", "2", "#"}; Observable source = Observable.fromArray(val) .map(data -> Integer.parseInt(data)) .onErrorReturn(e -> { if(e instanceof NumberFormatException) { e.printStackTrace(); } return -..
[RxJava] 7장. 디버깅과 예외 처리 1 - 디버깅(Debugging) 디버깅 RxJava 코드는 로그를 넣을 수 있는 공간이 없다. Observable로 시작하는 업스트림과 그것을 받아서 처리하는 다운스트림이 동일한 문장으로 이루어져 있기 때문. 따라서, doOnXXX() 계열 함수를 이용하여 부수 효과를 일으켜 디버깅을 수행한다. doOnNext(), doOnComplete(), doOnError() 함수 이 3가지 함수는 Observable의 알림 이벤트에 해당한다. doOnNext는 Observable이 어떤 데이터를 발행할 때 발생. doOnComplete는 Observable이 모든 데이터를 발행할 때 발생. doOnError는 중간에 에러가 발생할 때 발생. Observable source = Observable.fromArray(exam); source.doO..
[RxJava] 6장. 안드로이드의 RxJava 활용 4 - 메모리 누수 메모리 누수 메모리 누수(Memory Leak)란 보통 참조가 완료되었지만 할당한 메모리를 해제하지 않았을 때 발생. 특히, 강한 참조의 경우 가비지 컬렉터가 메모리에서 객체를 제거할 수 없으므로 라이프 사이클에 맞게 객체 참조를 끊어주어야 메모리 해제가 가능하다. 메모리 누수는 시스템 전체 성능에 영향을 미친다. * Observable은 안드로이드의 컨텍스트(Context)를 복사하여 유지한다. onComplete(), onError() 함수가 호출되면 내부에서 자동으로 unsubscribe() 함수를 호출하여 메모리를 해제해준다. 하지만, 액티비티가 비정상적으로 종료되면 액티비티가 종료되어도 가비지 컬렉션의 대상이 되지 못하는 경우가 발생할 수 있으며, 이 때 메모리 누수가 발생하게 된다. 메모리 누..
[RxJava] 6장. 안드로이드의 RxJava 활용 3 - Thread 안드로이드는 기본적으로 싱글 스레드 모델. 따라서 처리하는 데 오래 걸리는 작업의 경우 별도 스레드로 분리하여 작업해야 한다. 뷰와 뷰 그룹의 스레드 관리 안드로이드의 뷰나 뷰 그룹은 UI 스레드(메인 스레드)에서만 업데이트할 수 있게 되어있다. 여러 스레드에서 동시에 UI를 업데이트할 때 발생할 수 있는 동기화 문제를 예방하기 위함. Looper와 Handler 클래스를 통해 일반 스레드에서 작업한 결과를 뷰에 업데이트 할 수 있다. * Looper와 Handler 클래스를 사용한 UI스레드 업데이트. Handler 객체가 스레드를 생성. 스레드는 Handler를 이용해 Message를 Messgae Queue에 넣음. UI스레드는 Looper 클래스를 이용해 Message Queue에 접근. Mess..