안드로이드나 코틀린으로 개발하다보면 더블콜론 (::) 을 자주 접하게 된다. 더블콜론은 무엇을 의미할까 보통 더블콜론은 리플렉션을 위해 사용한다. 그럼 리플렉션이란 무엇인가? 간단하게 알아보고 넘어가보자 리플렉션은 실행 중에 프로그램의 구조를 검사하고 수정할 수 있는 기능을 말한다. 이는 객체나 클래스의 속성, 메소드 등의 정보를 런타임에 동적으로 조작할 수 있게 해준다. ( 런타임상 컴파일된 바이트코드에서 작성한 코드가 어느 곳에 위치하는지 모르기에 바이트코드를 이용해 참조하려는 값을 찾기위해 사용) 사용법은 다음과 같다. JAVAAClass.classKotlinAClass::class 하지만 우리가 안드로이드 프로그래밍을 할 땐 AClass::class.java// exIntent(this, Some..
안드로이드 서버 통신을 하다 보면 가끔 "%EC%AD~~" 이런 식으로 응답이 오는 경우가 있다. 보통 응답 값이 특수문자 이거나 한글일때 발생한다. URL Encoding이란 URL에서 URL로 사용할 수 없는 문자나 URL로 사용할 수 있지만 의미가 왜곡 될 수 있는 문자들을 "%XX" 형태로 변환한다 (여기서 XX는 16진수) 코틀린에서 URL Encoding을 하는 방법을 알아보자. 자바 표준 라이브러리의 URLEncoder / URLDecoder를 통해 쉽게 인코딩, 디코딩을 할 수 있다. // 클래스 호출 import java.net.URLEncoder import java.net.URLDecoder // 함수 자체 호출 import java.net.URLEncoder.encode import..
코루틴 소개 코루틴이란 코틀린, 안드로이드에서 간단하게 비동기적으로 코드를 실행 할 수 있는 동시성 디자인패턴이다 (구글 문서 발췌) 비동기 프로그래밍이란? 여러 작업을 동시에 수행할 수 있도록 하는 프로그래밍 패러다임 Non blocking 방식으로 수행하며 CPU리소스를 효율적으로 사용 전통적으로는 쓰레드 기반 작업으로 진행되었음 (쓰레드 -> 코루틴) synchronous - 작업을 순서대로 수행 asynchronous - 순서와 무관하게 작업을 수행 Blocking - Caller가 Callee를 호출 하면서 작업을 멈추고 대기함 Non-Blocking Non Blocking - Caller는 Callee를 호출하고 대기하지 않음. 바로 다음 작업을 수행 Asynchronous with non b..
Sealed Class (& enum class) 등장 배경 여러 자식 클래스들이 하나의 부모 클래스를 상속받았다고 할 때, 컴파일러는 어떤 클래스들이 부모 클래스를 상속받았는지 알지 못한다. 그래서 이 문제를 해결하기 위해 sealed class라는 개념이 나왔는데 sealed class는 자신은 추상클래스이고, 자신을 상속받는 자식 클래스의 종류를 제한하는 특성을 가지고 있다. 컴파일 시 sealed class의 자식이 어떤 것이 있는지 알 수 있다는 것이다. 자식 클래스의 종류를 제한하기 때문에 다음과 같은 특성이 있다. 실드란 '봉인된'이라는 의미로 무언가 안전하게 보관하기 위해 묶어 두는 것 실드 클래스 그 자체로는 추상 클래스와 같기 때문에 객체를 만들 수는 없다. 생성자도 기본적으로는 pri..
Scope function Kotlin에서 제공하는 Scope function이다. 주로 객체와 함께 사용되며 편리하고 간결한 코드 작성을 도와준다. 간결한 코드 작성을 위해 필수적으로 알아두면 좋은 챕터라고 생각한다. 이름에서 알 수 있듯이 이 함수를 호출하면 Scope가 생기게 되고 이 Scope안에서는 전달된 객체가 "it" 또는 "this"라는 이름의 Context Object로 사용할 수 있게 된다. Scope function은 총 5가지가 있는데 함수마다 Context Object(전달된 객체)를 참조하는 방법과 리턴 값(Context Object or lambda)이 상이하다. 1. let let은 null이 아닌 값만 실행시키고 싶을 때 주로 사용된다. 그래서 let은?. 연산자와 같이 사..