본문 바로가기

전체 글

(57)
코틀린(Kotlin) - 타입 시스템 null 가능성 safe call(?.) elvis(?:) 코틀린에서 가장 중요한 부분인 타입 시스템(type system)을 살펴보도록 하겠습니다. 자바와 비교했을 때 코틀린의 타입 시스템은 코드의 가독성을 향상시키는 데 도움이 되는 몇 가지 특성이 있습니다. 그런 특성으로, null이 될 수 있는 타입(nullable type) 과 읽기 전용 컬렉션이 있습니다. null 가능성 null 가능성은 NullPointerException(NPE) 을 피할 수 있는 코틀린 타입 시스템의 특성입니다. NullPointerException 은 앱을 중지 시킬 정도로 굉장히 크리티컬 해서 사용자와 개발자 모두를 당황시키는 존재죠...😨😱 코틀린을 비롯한 최신 언어에서는 이런 null에 대한 이슈를 해결하기 위해, null이 될 수 있는 여부를 타입 시스템에 추가함으로써 ..
코틀린(Kotlin) - lambda with receiver(수신 객체 지정 람다) : with, apply lambda with receiver (수신 객체 지정 람다) 개발을 하다 보면 객체를 반복 사용하면서 그 객체에 대한 연산을 명시하는 경우가 많습니다. 수신 객체 지정 람다는 이러한 수신 객체를 반복적으로 명시하지 않고도 람다의 본문 안에서 다른 객체의 메소드를 호출할 수 있게 합니다. 이런 람다를 수신 객체 지정 람다(lambda with receiver) 라고 합니다. with 함수 /* with 없이 반복 사용하는 경우 */ val settings = webView.settings settings.javaScriptEnabled = true settings.javaScriptCanOpenWindowsAutomatically = true settings.useWideViewPort = true se..
안드로이드 코루틴 기본 개념과 활용까지의 모든 것! 코루틴 코루틴(Coroutines) 은 쓰레드(Thread)와 기능적으로는 비슷하지만, 하나의 쓰레드 내에서 여러 개의 코루틴이 실행되는 개념으로 비동기 프로그래밍에 권장되는 동시 실행 설계 패턴입니다. 코루틴은 단일 쓰레드 내에서 여러 개의 코루틴을 실행할 수 있기 때문에, 많은 양의 동시 작업을 처리할 수 있으면서 메모리 절약의 장점이 있습니다. 이유는, 기존 쓰레드는 Context-Switching(CPU가 쓰레드를 점유하면서 실행, 종료를 반복하며 메모리 소모)이 발생하기 때문에 많은 양의 쓰레드를 갖기가 어렵지만 반면에 코루틴은 쓰레드가 아닌 루틴을 일시 중단(suspend) 하는 방식이라 Context-Switching에 비용이 들지 않기 때문입니다. 또한, 지정된 작업 범위 내에서 실행이 되..
[코틀린] 하이브리드 앱을 위한 안드로이드 웹뷰(WebView) 완벽 셋팅! 하이브리드 앱을 위해 현재 제가 사용하고 있는 안드로이드 웹뷰(WebView)의 주요 셋팅을 공유하고자 합니다! 저는 웹뷰를 공통으로 사용하기 위해 "CommonWebView"라는 이름으로 커스텀 웹뷰를 만들어서 사용하고 있습니다. ^^ 바로 보시죠! class CommonWebView(context: Context, attrs: AttributeSet?, defStyle: Int) : WebView(context, attrs, defStyle) { constructor(context: Context) : this(context, null) constructor(context: Context, attrs: AttributeSet?) : this(context, attrs, 0) init { with(se..
코틀린(Kotlin) - 함수형 인터페이스 활용 코틀린의 람다식을 기존 자바 API에도 사용할 수 있으며, 호환이 가능하기 때문에 이러한 코틀린 람다를 자바 API에 활용하는 방법에 대해서 살펴보겠습니다. 우리는 자바 8 이전까지는 클릭 이벤트 처리를 위해서 아래와 같이 setOnClickListener 메소드에 파라미터로 무명 클래스 인스턴스를 넘겨야만 했습니다. button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { } }); 코틀린에서는 무명 클래스 인스턴스 대신 람다를 넘길 수 있습니다. 물론, 자바에서 처럼 무명 클래스를 사용해도 됩니다. (코틀린의 object 를 사용하면 되겠죠?) /* 코틀린 람다 사용 */ button..
Retrofit으로 SSL 인증서 없이 HTTPS 우회 접속 통신하기! 대부분의 도메인은 SSL이 적용되어 있고, SSL 통신을 하려면 기본적으로는 SSL 인증서가 필요하지만, 간혹 인증서가 만료되었거나 자체 서명된 인증서를 포함하는 도메인인 경우가 있습니다. 물론, 신뢰할 수 있는 특정 인증서만 통신을 수락하는 경우가 가장 일반적이며 이상적인 시나리오입니다! 하지만 일반적이지 않은 경우, 이러한 인증서 없이 앱에서 HTTPS 우회 접속 통신이 가능하기 때문에 구현 방법에 대해 소개해드리겠습니다. 다시 말씀드리지만, 우회하는 방법보다는 제대로 된 인증 절차를 통한 통신이 가장 좋은 솔루션입니다! Unsafe OkHttp Client 구현 Retrofit에서 SSL 인증서 체크는 네트워크 모듈에서 이뤄지고 있기 때문에, 우회할 수 있는 OkHttp Client Builder를..
프로답게 UI 디자인 가이드 요청하기! 우리가 안드로이드 앱 개발을 할 때, 개발 협업에 있어 가장 중요한 부분 중 하나가 바로 "디자이너와의 협업" 입니다. 우리의 앱을 아주 멋지게 디자인해주시는 디자이너분들과 개발 협업을 하기 위해서 기본적인 개념을 알아둔다면, 더욱 효과적이고 서로 해피(Happy)한 협업을 할 수가 있겠죠? 디자이너 : 해상도 몇으로 작업해서 디자인 가이드 넘겨드리면 될까요? 개발자 : (몇으로 달라고 하지...?;;;; 고민...난감...) 위와 같은 경우를 겪어본 적이 있으신가요? 어떤 해상도 기준으로 달라고 해야 하는지 난 잘 모르겠고, 그냥 혼자 있고 싶고, 멍해졌던 적이 있으신가요? 이럴 때, 더 이상 고민하지 않고 프로답게! 디자인 가이드 요청을 하기 위해서 모바일 앱 UI 디자인 요청 시에 가장 중요한 요소..
코틀린(Kotlin) - 지연 계산(lazy) 컬렉션 연산 : Sequence 컬렉션 API 중, map이나 filter 같은 함수는 결과 컬렉션을 즉시 생성합니다. 이것은 즉, 컬렉션 함수를 연쇄하면 매 단계마다 중간 계산 결과를 새로운 컬렉션에 임시로 저장하고 있다는 말입니다. 반면에, 시퀀스(sequence)를 사용하면 중간 임시 컬렉션을 사용하지 않고도 컬렉션 연산을 연쇄할 수 있습니다. 간단한 예로, 성이 '김'씨인 사람만 추려내는 예제를 살펴보도록 하겠습니다. /* 김씨인 사람만 추리기 */ people.map(Person::name).filter { it.startsWith("김") } 코틀린 레퍼런스 문서에는 filter와 map이 리스트를 반환한다고 명시되어 있는데요, 이 말은 이 연쇄 호출이 리스트를 총 2개 만든다는 것을 알 수 있습니다. 한 리스트는 map의 ..