본문 바로가기
반응형

전체 글362

Coroutine을 이용해 Parallel한 네트워크 호출 #Kotlin Kotlin의 Coroutine을 이용하여서 NetworkCall을 할 경우, 동시에 2개 혹은 3개의 네트워크 API를 호출해야 할 경우 어떻게 해야 할까요? 당연히 A를 먼저하고 끝나면 B를 하는 Sequential한 방법은 사용하지 않을 것이구요. Parallel하게 동시에 호출한 다음 return된 값들을 이용할 텐데요. 오늘은 이것의 방법에 대해서 정리해 보도록 하겠습니다. 1. async와 successHandler Paralllel하게 호출하여 비동기로 결과 값을 받기 위해서는, async 코루틴 빌더를 사용하여야 하는데요. 1-1. async와 successHandler의 사용 동시에 2개의 호출을 한다고 가정해 보겠습니다. 임의의 successHandler를 만들어서 async빌더에서 r.. 2020. 3. 28.
코틀린 Coroutine으로 네트워크 Retry 구현하는 방법 코틀린의 Coroutine으로 네트워크 호출을 할 경우, Retry는 어떻게 구현해야 할 까요. 오늘은 이 방법에 대해서 정리해 보도록 하겠습니다. 1. \ 2020. 3. 24.
undefined 와 null 의 차이점은 무엇인가요? #Javascript Java나 Kotlin같은 언어를 배운 후에, Javascript를 배울경우 생소하게 다가오는 타입이 undefined입니다. 오늘은 이 undefined가 Javascript에서 어떠한 의미를 가지고 있고, null과는 어떻게 다른지 정리해 보겠습니다. 1. undefined 먼저, Undefined에 대해서 알아보겠습니다. 우리말로 정의되지 않았다는 의미인데요. MDN의 공식문서를 참조해 보면, 아래와 같이 primitive타입중의 하나이면서, writable하지 않는 타입이라고 나와있습니다. Javascript의 변수를 선언해 놓고 아무값도 대입하지 않고도 로그를 찍어 보겠습니다. 나오는 값은 null이 아니라 undefined가 됩니다. 2020. 3. 23.
자바스크립트의 var, let, const 를 알아보자 JavaScript에서 ES6로 넘어오면서, let과 const 까지도 알아야하는데요. ES5,6는 거부할 수 없는 대세여서일까요, 예제 코드들을 보면 let과 const를 활용하고 있는 것이 대부분 입니다. 이제 유연한 var만으로는 버티기 어렵습니다. 오늘은 var 와 새롭게 나온 let, const에 대해서 비교, 정리해 보도록 하겠습니다. 1. 유연성의 대명사 var vs 깐깐한 let, const 유연하기로 유명한 var를 먼저 보기로 하겠습니다. 같은 변수에 var를 두번 선언하더라도 가장 마지막에 선언한 변수에 담긴 값으로 에러없이 출력됩니다. 결과는 역시 varTest2로 나오고 있습니다. 하지만 let이나 const를 두번 선언한 경우에는 아래와 같이 에러가 뜨게 됩니다. 2. var와는.. 2020. 3. 22.
NPM 의 package.json 을 이용한 효율적 설치 방법 #NodeJS NPM을 이용해서 express 같은 모듈을 설치하게 되는데요. 프로젝트를 생성할 때마다 자주 쓰는 모듈들을 일일이 설치하는 것이 여간 번거로운 일이 아닙니다. 오늘은 NPM의 기본명령어들을 살펴보고, package.json을 이용해서, 자주 쓰는 모듈을 한 번에 설치하는 방법에 대해서 정리해 보겠습니다. package.json 을 이용한 설치방법을 바로 보고 싶은 분들은, 3번 로 바로 이동하시면 됩니다. 1. npm 기본 명령어들 1-1. 버전 체크 먼저 npm --version 을 통해서, npm버전은 확인해 주시어야 합니다. npm --version 현재 버전은 9.6.7 이 나오는군요. 2020. 3. 21.
Android WebView 를 설정하고 로딩하는 방법을 정리해보자 때로는 안드로이드에서 web의 컨텐츠를 보여주어야 할 경우가 있습니다. 구글의 공식문서에는 가능하면 그냥 크롬같은 웹브라우저를 쓰라는 말도 적혀있지만, 경우에 따라서 유저들에게 해당 앱의 영역을 넘어가서, 관련 컨텐츠를 경험시키는 것이 부담스러울 때가 있기 때문이지요. 오늘은 webView를 구현하는 방법에 관해서 정리해 보도록 하겠습니다. 1. Manifest 선언 본격적으로 WebView에 대해 알아보기 전에 Manifest에 permission에 관해서 선언할 것 이 있습니다. "android.permission.INTERNET"인데요. WebView를 사용하기 전에, Manifest에 이 부분이 명시적으로 선언이 되어 있어야 합니다. 이제 준비가 되었으니, WebView를 사용해 보도록 하겠습니다.. 2020. 3. 19.
RadioButton과 RadioGroup에 대한 정리 #Android 오늘은 Android UI중에서도, RadioButton에 대해 정리해 보도록 하겠습니다. RadioButton은 검색필터 옵션 설정같이, 항상 하나의 옵션이 선택되 있어야 하는 경우에 사용하게 되는데요. 이를 구현하기 위해서는 RadioGroup과 RadioButton을 이용해 주어야 합니다. 1. RadioGroup과 RadioButton RadioButton을 사용하게 위해서는 이것을 감싸는 RadioGroup으로 감싸주어야 하는데요. 그 이유는 여러개의 RadioButton중 하나가 선택되면, 이전에 선택된 RadioButton은 해제해 주어야 하는데요. 이것을 RadioGroup이 해 주기 때문입니다. 그럼 RadioGroup의 HierArchy 를 보도록 하겠습니다. 다루기 쉬운 LinearL.. 2020. 3. 16.
Android Studio 에서 기억해야 하는 핵심 단축키 안드로이드 스튜디오를 사용할 때 코드사용에 큰 도움을 주는 단축키들이 많이 있습니다. 이런것들은 자주사용하면서 기억해두면 생산성이 높아지는데 큰 도움을 주는데요. 이 글에서 정리해 보도록 하겠습니다. 1. 선언 및 Usage 찾기 >> Cmd + B (Usage 찾기) 해당 코드가 선언된 곳이나 사용된 곳을 찾도록 도와줍니다. 2. 관련 Action 보여주기 >> Alt + Enter 예를 들어서, Kotlin에서 if문에서 return을 밖으로 꺼내는 것이나, expression body형태로 고칠 때, Action의 도움을 받아서 쉽게 코드를 수정할 수 있습니다. 2020. 3. 14.
Activity Manifest 설정에 대한 정리(launchMode, screenOrientation, configChanges 등) 안드로이드는 Activity라는 독특한 구조를 가지고 있는데요. 이 Activity를 launch할 때의 환경값이나, stack에 쌓이는 방법등을 정의할 수 있는 TAG가 있습니다. 오늘은 이것들에 대해서 정리해 보도록 할텐데요. 하지만, Manifest에 쓸 수 있는 attribute은 정말 많기 때문에, 그 중 project에 자주 사용할 만한 값들을 중심으로 정리해 보도록 하겠습니다. 1. screenOrientation 화면의 Orientation값을 설정해 줍니다. 보통 개발의 복잡도를 낮추기 위해서, 초기에는 아래와 같이 Portrait모드(세로 모드)를 많이 사용해 줍니다. 하지만, android studio3.6부터는 ignore태그를 아래와 같이 사용하지 않으면, fullSensor 혹은.. 2020. 3. 10.
Coroutine의 Async와 await 사용시 Exception Handling에 관하여 #Kotlin Coroutine을 사용하면서 한가지 주의해야 할 부분이 있는데요. Async와 await메소드를 사용할 때, Exception Handling에 관한 부분입니다. 오늘은 이것에 관해서 정리해 보겠습니다. 1. await와 Exception Handling Async와 await를 사용하면 예상하지 못한 방식으로 Exception이 catch가 되지 않고, app이 Crash가 나는 현상이 발생하는데요. 참고로 이것은 공식문서에서와 같이 GlobalScope를 사용하면 발생하지는 않는 문제입니다. 다만, GlobalScope를 실제 프로덕트에서 사용하는 경우는 많지 않을 것이기 때문에, 이경우는 제외하였습니다. 코드를 보면서 문제를 파악해 보도록 하겠습니다. 아래와 같이 async블록에서 IOExcept.. 2020. 2. 16.
Kotlin Exception 처리 방법 # RunCatching 과 try, catch 오늘은 Kotlin에서의 Exception처리에 대해서 정리해 보도록 하겠습니다. Java에서는 Exception처리를 위해서 Try Catch문을 사용했었는데요. Kotlin에서는 Try Catch 뿐만이 아니라, RunCatching API를 제공해 주고 있습니다. 오늘은 Kotlin의 Exception처리방법들인, Try Catch와 RunCatching에 대해서 정리해 보도록 하고 있습니다. 1. Classic한 Try와 Catch 그리고 finally 아래 이미지는 Java시절부터 사용해왔던 기본적인 try, catch 그리고 finally구조입니다. Try는 Exception 발생할 수 있는 코드를 감싸는 블록이구요. Catch는 Exception이 발생된 후 이를 핸들링 해주는 블록입니다. .. 2020. 2. 13.
WindowManager$BadTokenException 대응하기 Firebase의 CrashLytics에서 BadTokenException리포트를 받은 적이 있는데요. 오늘은 해당 Exception에 대해서 분석하고 대응해 보도록 하겠습니다. 1. 실제로 받은 BadTokenException 실제로 받아보았던 BadTokenException은 아래와 같은데요. 먼저 가운데에 at android.os.Handler.dispatchMessage(Handler.java:102)를 통해서, Handler객체가 Toast를 보여줄려고 했었다는 것을 알 수 있습니다. Toast를 보여주려고 하면서, view를 윈도우매니저에 add 하려고 하는데요. setView를 viewRoot에 하려고 하다가 BadTokenException을 받게 된 것이지요. 힌트를 더욱 얻기 위해서, E.. 2020. 2. 6.
Android 디버깅 방법 및 Tip에 대한 정리 오늘은 안드로이드 스튜디오를 이용하여, Android를 디버깅 하는 방법과 이와 관련한 팁들을 정리해 보도록 하겠습니다. 1. 기본적인 디버깅 툴 아이콘 사용법 안드로이드에서 디버깅을 하기 위해서는 디버깅 포인트를 잡아주어야 하는데요. 아래 이미지와 같이 코드 창 왼쪽에 빨간 점이 표시된 공간을 클릭하면, 브레이크 포인트가 설정 됩니다. 다시한번 클릭하면 사라지게 되구요. 디버깅을 시작하기 위해서는 벌레 모양의 아이콘을 눌러주어야 하는데요. 안드로이드 스튜디오 최상단에서, 아래 이미지에서의 우측 끝에 있는 녹색 벌레 아이콘을 찾아서 클릭해주면 됩니다. 참고로 안드로이드 스튜디오는 아래 이미지의 우측 끝과 같이 벌레 아이콘과 우상향을 가르키는 방향 아이콘이 그려진 것을 고르면, 앱을 실행하는 중에도 바로 .. 2020. 1. 29.
Kotlin에서 try catch finally로 처리하는 Exception Kotlin에서도 Java에서처럼 try catch finally를 이용해서 Exception들을 처리할 수 있는데요. 오늘은 그 기본적인 방법에 대해서 정리해 보도록 하겠습니다. 1. Try, Catch 그리고 Finally Try는 Exception 발생이 예상되는 코드를 감싸는 블록이고, Catch는 Exception이 발생되었을 때 실행되는 블록입니다. Try블록에서 Exception이 발생하고 , Catch블록에서 해당 Exception처리를 해주면, 앱은 Crash하지 않고, 다음 코드를 실행시켜 줍니다. (물론 Catch에서 잡아주지 못한 Exception이 발생한다면 그 때는 Crash가 나겠지요. Try로 감싼다고 무조건 Crash를 막지는 못 합니다.) Finally는 Exception.. 2020. 1. 28.
Android Foreground Service 로 Background 에서 음악 플레이 하기 폰을 사용하다가 음악을 들어보신적이 있죠. 네이버 뮤직 이나 멜론 같은 앱을 실행해서 플레이를 시킨후, 다른앱을 사용해도 꺼지지 않고 플레이가 되는데요. 이렇게 background에서 동작하는 컴포넌트가 바로 Service입니다. 오늘은 이 Service 에 대해서 정리해보도록 하겠습니다. Service는 UI를 가지고 있지 않기 때문에, 인터랙션이 필요한 경우에는 Activity로 연결시켜야 하구요. 쓰레드 관련해서도 주의가 필요한데요. 디폴트로 메인쓰레드에서 동작하므로, cpu를 많이 쓰는 일을 할 때는 ,다른 쓰레드에서 작동될수 있도록 해줘야 합니다. 이 밖에도 여러가지가 있지만 아래에서 관련 요소들을 보시면서 정리해볼께요. Service를 실행시키는 방법에는 두가지가 있는데요. startServi.. 2020. 1. 18.
Android Dialog 구현하는 방법 #Kotlin 버전 다이얼로그 Dialog는 유저에게 결정을 요구하고나 추가적인 정보를 입력받고자 할 때 사용하는데요. 오늘은 이것을 생성하는 방법에 대해서 kotlin을 이용하여서 최근 공식문서에서 추천하는 방법을 정리해 보도록 하겠습니다. 공식문서에서는 Dialog객체를 직접 생성하지 말고, 서브클래스인 AlertDialog를 사용하라고 하고 있습니다. (필요에 따라서 시간이나 날짜를 설정할 경우에는 DatePickerDialog혹은 TimePickerDialog를 사용하구요.) 또한, Dialog의 컨테이너로 DialogFragment를 사용하기를 권유하고 있는데요. 그럼 DialogFragment부터 구현해 보도록 하겠습니다. 1. DialogFragment DialogFragment를 상속받는 Fragment클래스를 먼저 만.. 2020. 1. 17.
KOIN을 이용한 Dependency Injection (DI) 구현하기 DependencyInjection을 구현하는 것을 도와주는 라이브러로 가장 유명한 것은, Square에서 시작해서 Google에서 이어서 만들고 있는, Dagger2인데요. 오늘은 다른 라이브러리인 Koin에 대해서 알아보도록 하겠습니다. 혹시 Dependency Injection에 대한 개념을 이해하지 못하고 계신 분들은 아래 글을 참조해 주세요. >> Dependency Injection(DI)에 대해서 알아보자 1. Implementation 가장 먼저 할 것은 라이브러리를 Implement하는 것 인데요. 아래와 같이 한 줄이면 됩니다. 2. Single과 Factory 먼저 Koin에서 객체를 생성해 주입시켜줄 Module을 생성하기 전에, Module에서 사용되는 중요한 키워드인 Single.. 2020. 1. 6.
Dependency Injection(DI)에 대해서 알아보자 Dependency Injection(DI)은 개발을 해 보신분이라면 어디선가는 결국 듣게 되는 개념입니다. 오늘은 복잡해 보이는 이 개념이 무엇인지 정리해 보도록 하겠습니다. 1. Dependency Injection(DI) 1-1. Dependency 우리말로는 의존 혹은 의존성이라고 할 수 있겠는데요. 그럼 누가 누구에게 의존하는 것일까요? 하나의 클래스가 다른 하나의 클래스에 의존하는 것을 의미합니다. A클래스가 객체를 만들기 위해 B를 필요로 하는 것인데요. B는 A의 의존(Dependency)의 대상이 되는 것이지요. 현실에 비교해 보면, 자동차 회사는 타이어 부품회사에 의존하고 있고, 타이어 부품회사는 의존의 대상,즉 Dependency가 되는 것이지요. 각각 Car클래스와 Tire클래스를 .. 2019. 12. 28.