android 18

Kotlin 함수형 프로그래밍 - (5) 클로저

이번 포스트에서는 함수형 프로그래밍 중 클로저의 개념에 대해 살펴보도록 하겠습니다. 클로저(Closure)는 함수가 호출될 때 발생하는 데이터를 함수가 호출된 이후에도 계속 유지해서 사용하는 기법입니다. fun closureFunction(num: Int) { println("arguments : $num") } num이라는 변수는 함수가 종료되면 사라지는 즉, 스코프는 함수 내부가 됩니다. 함수형 프로그래밍에서는 함수에 선언된 변수가 호출 후에도 유지되어야 하는 경우도 있습니다. 그 이유는 함수형 프로그래밍에서는 함수가 1급 객체이기 때문에 함수 내부에 함수를 정의할 수 있기 때문입니다. fun closureFunction(num: Int): (Int) -> Int { println("argument ..

Kotlin 함수형 프로그래밍 - (4) 인라인 함수

고차 함수는 함수형 프로그래밍에서 매우 중요한 기법이지만 람다 함수를 전달하고 이 람다 함수를 이용하는 코드가 많아지면서 런타임 시 성능 상의 문제가 발생할 가능성이 있습니다. fun hoFunTest(argFun: (x1: Int, x2: Int) -> Int) { argFun(10, 20) } fun main(args: Array) { val result = hoFunTest { x1, x2 -> x1 + x2 } } 고차 함수 호출이 빈번하게 일어나서 런타임 시 성능 상의 문제가 발생할 수 있다면 인라인 함수가 대안책이 될 수 있습니다. 인라인 함수는 inline이라는 키워드를 추가한 함수이며 컴파일 단계에서 정적으로 포함되는 함수이므로 런타임에 함수가 호출되지 않습니다. inline fun hoF..

Kotlin 함수형 프로그래밍

함수형 프로그래밍에 대해 알아보도록 하겠습니다. 프로그래밍 패러다임으로서의 함수형 프로그래밍 절차지향 프로그래밍 알고리즘과 로직 중심으로 문제 해결이 주목적 객체지향 프로그래밍 클래스 선언이 최우선, 데이터와 데이터를 처리할 메서드를 하나로 묶어 객체를 만들고, 객체를 조합해서 프로그래밍 작성, 객체를 만들기 위한 추상화, 캡슐화, 상속, 다형성 등의 개념을 제공 함수형 프로그래밍 함수 선언이 최우선, 데이터의 흐름이 아니라 함수의 선언과 선언된 함수의 유기적인 흐름이 주목적 함수형 프로그래밍의 주요 원칙 함수형 프로그래밍에는 여러 원칙들이 있는데 가장 큰 핵심은 크게 두 가지입니다. 일급 객체(First Class Citizen)로서의 함수 순수 함수(Pure Function)으로 정의되는 함수 일급 ..

Kotlin 데이터 클래스

클래스 중에 메소드 없이 필드로만 구성된 클래스가 있습니다. 자바를 포함한 객체 지향 프로그래밍에서 이러한 클래스를 Value Object Class라고 부릅니다. class Test { String name; int age; String address; } Kotlin에서는 이런 Value Object Class를 더 편하게 이용할 수 있도록 data class라는 것을 제공하고 있습니다. class 앞에 data라는 Keyword만 추가해주면 되는 것입니다. 아래 처럼 말이죠. data class Good(val name: String, val age: Int) 이러한 data 클래스를 사용하려면 다음과 같은 제약 조건을 맞춰야 사용할 수 있습니다. 1. 주 생성자를 선언해야 하고 주 생성자의 Par..

Retrofit2 MultiPart Form-Data 파일 업로드 using Java

Retrofit2를 사용하여 Multipart Form-Data형태로 파일과 Body를 업로드하는 방법에 대해 정리해보고자 합니다. MultiPart에 대해서 잘 모르는 분들을 위해 간단하게 MultiPart에 대해 정리해보고자 합니다. Multipart/form-data File Upload Feature를 구현할 때, Client가 만약 Web Browser라면 Form을 통해서 사용자로부터 파일을 받고 올리게 됩니다. 이때 Web Browser가 보내는 HTTP 메시지에서 Content-Type 속성이 multipart/form-data로 지정되며, 정해진 형식에 따라 메시지를 인코딩하여 전송합니다. 이를 처리하기 위한 서버는 멀티파트 메시지에 대해서 각 파트별로 분리하여 개별 파일의 정보를 얻게 ..

클라이언트 2019.08.06

RecyclerView : Invalid Item Position (Data Set 설정 시 주의)

Android 에서 Recycler View를 사용할 때 Adapter에 데이터 List를 넘겨주게 된다. 아래 처럼 말이다. ArrayList imageUrls; StoryImageAdapter adapter = new StoryImageAdapter(context, imageUrls); 이 때 imageUrls라는 ArrayList에 데이터를 넣고 Adapter Constructor의 매개 변수로 넘겨주게 되는데 보통은 아래처럼 데이터를 넣어 주게 된다. public void setImageUrlSet(ArrayList urls) { this.imageUrls = urls; } 위의 코드는 urls라는 매개 변수 값을 받아와서 imageUrls라는 ArrayList에 대입해주는 구문인데 자세히 살펴보..

클라이언트 2019.08.05

Kotlin - 추상 클래스

추상 클래스와 추상 메소드 추상 함수 추상 메소드(Abstract Method)는 미완성 함수 혹은 실행 영역이 없는 함수를 의미합니다. 메소드는 선언부와 실행부 2가지가 존재하는데 추상 메소드는 실행부가 없는 형태를 띄고 있습니다. 추상 메소드(Abstract Method)를 포함하는 클래스는 반드시 추상 클래스(Abstract Class)가 됩니다. 1 2 3 4 5 6 abstract class AbstractTest1 { fun myFun1() { //.... } abstract fun myFun2() } cs abstract는 클래스 선언부에 존재하고 있습니다. 그리고 abstract라는 예약어(Keyword)는 클래스 내부에서만 사용할 수 있습니다. 또한 클래스 내부에 선언된 메소드에서만 사용..

나의 앱에 날개를 - Lottie 사용해보기

이번 포스트에서는 Lottie 사용법에 대해 간단하게 알아보려고 합니다. 그동안 우리가 만들어온 어플리케이션들이 뭔가 밋밋하고 생동감 넘치지 않은 느낌이 들었던 경험이 한 번쯤은 가지고 있을 것입니다. 그러한 밋밋함을 채워줄 무언가를 소개해드리려고 합니다. AirBnB에서 개발한 Lottie Animation 라이브러리 입니다. Lottie란? After Effect에서 제작한 Motion Graphic을 Android에서 그대로 보여줄 수 있는 것으로써 OOM(OUT OF MEMORY)에 대해서도 신경을 많이 쓴 라이브러리 입니다. 이전에 Facebook에서 KeyFrame이라는 라이브러리를 개발했었는데 이보다 더 많은 기능을 제공하는 라이브러리가 바로 Lottie가 되겠습니다. Lottie는 실제 A..

클라이언트 2019.07.31

RxJava를 사용한 Debounce 구현

이번 포스트에서는 RxJava를 사용하여 간단하게 EditText에 Debounce를 구현하는 시간을 가져보도록 하겠습니다. 우선 시작하기에 앞서 Debounce가 무엇인지 알아보고 가도록 하겠습니다. Debounce vs. Throttle Debounce를 더 잘 설명하기 위해 비슷한 개념 중 하나인 Throttle과 함께 설명하도록 하겠습니다. Scrolling Event가 발생 할 때 마다 호출되는 Call Back이 있다고 가정해보도록 합시다. 이 말은 1px만 스크롤되어도 이벤트가 발생한다는 것을 의미합니다. 이런 Scrolling Event에 매 번 Call Back이 발생한다면 어떨까요? 그리고 그 Call Back이 수행하는 일이 리소스를 굉장히 많이 먹는 작업이라면 어떨까요? Thrott..

클라이언트 2019.07.30

Kotlin 상속 (Kotlin Override) - 1

이번 포스트에서는 Kotlin에서 상속을 구현하는 방법에 대해 정리해보려고 합니다. 상속은 Java에서도 마찬가지로 객체 지향에서 가장 중요한 개념 중 하나입니다. Kotlin에서의 상속은 Java에서의 상속과 거의 비슷하나, 생성자 관계, 상속에 의한 캐스팅 부분에서 약간의 차이를 보이고 있습니다. Kotlin에서의 상속 Any 클래스 상속 : 클래스를 선언할 때 다른 상위 클래스를 참조해 작성하는 개념 일반적으로 Kotlin에서 클래스를 선언하면 Any 클래스를 상속받게 됩니다. (우리가 굳이 작성하지 않아도 자동으로 Any 클래스를 상속받도록 되어 있습니다.) 왜냐하면 Kotlin의 모든 클래스는 Any 클래스의 서브 클래스이기 때문이죠. Any 클래스는 자바에서 Object 클래스와는 다릅니다. ..