1. 매핑 함수 map(), mapIndexed() map() 함수는 forEach() 함수와 유사합니다. 집합 객체의 데이터 수만큼 반복하여 실행하는 것을 동일하나 forEach()와는 다르게 반환값이 있다는 점입니다. forEach()는 단순히 반복 실행만 하지만 map()은 반복실행 한 후 결과 값을 반환합니다. val list = listOf(12, 8, 9, 20) list.filter { it > 10 } .map { it * 10 } .forEach { println(it) } 결과는 120, 200이 출력됩니다. val list = listOf(12, 8, 9, 20) list.filter { it > 10 } .map { it * 10 } .map { println(it) } 위 코드 역..
코틀린에서 제공하는 컬렉션 타입을 이용하면서 iterator(), filter(), map(), forEach() 함수 등을 이용하여 더 간편하게 데이터를 제어할 수 있습니다. 이런 컬렉션 타입의 함수들은 고차 함수로 구현되어 있습니다. 1. 집합 연산 함수 forEach() / forEachIndexed() 이 함수는 컬렉션 타입의 데이터 개수 만큼 단순하게 특정 구문을 반복적으로 실행 할 수 있는 함수입니다. val result = list.filter { it > 10 } for(i in result) { println(i) } 기존에 위와 같이 코드를 작성했다고 한다면, val result = list.filter { it > 10 } .forEach { println(it) } 이렇게 사용할 수..
이번 포스트에서는 함수형 프로그래밍 중 클로저의 개념에 대해 살펴보도록 하겠습니다. 클로저(Closure)는 함수가 호출될 때 발생하는 데이터를 함수가 호출된 이후에도 계속 유지해서 사용하는 기법입니다. fun closureFunction(num: Int) { println("arguments : $num") } num이라는 변수는 함수가 종료되면 사라지는 즉, 스코프는 함수 내부가 됩니다. 함수형 프로그래밍에서는 함수에 선언된 변수가 호출 후에도 유지되어야 하는 경우도 있습니다. 그 이유는 함수형 프로그래밍에서는 함수가 1급 객체이기 때문에 함수 내부에 함수를 정의할 수 있기 때문입니다. fun closureFunction(num: Int): (Int) -> Int { println("argument ..
고차 함수는 함수형 프로그래밍에서 매우 중요한 기법이지만 람다 함수를 전달하고 이 람다 함수를 이용하는 코드가 많아지면서 런타임 시 성능 상의 문제가 발생할 가능성이 있습니다. 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..
고차 함수는 매개변수로 함수를 전달받거나 함수를 반환하는 함수를 말합니다. fun highFunction(a: Int, argFunction: (Int) -> Int) { val result = argFunction(10) println("a : $a, highFunction : $result") } highFunction(10, {x -> x * x}) (Int) -> Int 타입의 함수를 argFunction이라는 이름으로 사용할 수 있다는 것입니다. 위의 코드에서는 highFunction의 매개변수로 람다 함수를 사용한 예시입니다. 고차 함수와 함수 타입 매개변수 함수 타입의 매개변수 대입 일반적으로 함수를 호출할 때는 함수명 뒤에 ()를 붙이고 () 안에 인수를 작성합니다. 그런데 고차 함수의 매..
함수형 프로그래밍에 대해 알아보도록 하겠습니다. 프로그래밍 패러다임으로서의 함수형 프로그래밍 절차지향 프로그래밍 알고리즘과 로직 중심으로 문제 해결이 주목적 객체지향 프로그래밍 클래스 선언이 최우선, 데이터와 데이터를 처리할 메서드를 하나로 묶어 객체를 만들고, 객체를 조합해서 프로그래밍 작성, 객체를 만들기 위한 추상화, 캡슐화, 상속, 다형성 등의 개념을 제공 함수형 프로그래밍 함수 선언이 최우선, 데이터의 흐름이 아니라 함수의 선언과 선언된 함수의 유기적인 흐름이 주목적 함수형 프로그래밍의 주요 원칙 함수형 프로그래밍에는 여러 원칙들이 있는데 가장 큰 핵심은 크게 두 가지입니다. 일급 객체(First Class Citizen)로서의 함수 순수 함수(Pure Function)으로 정의되는 함수 일급 ..
클래스 중에 메소드 없이 필드로만 구성된 클래스가 있습니다. 자바를 포함한 객체 지향 프로그래밍에서 이러한 클래스를 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..
추상 클래스와 추상 메소드 추상 함수 추상 메소드(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)는 클래스 내부에서만 사용할 수 있습니다. 또한 클래스 내부에 선언된 메소드에서만 사용..
- Total
- Today
- Yesterday
- databinding
- 애플워치
- retrofit
- 코틀린
- Notissu
- 오토레이아웃
- ios
- 컬렉션
- Kotlin
- watchos
- SwiftUI
- 함수형프로그래밍
- 함수형
- Auto Layout
- CloudComputing
- 스위프트
- C++
- Reactive programming
- 상속
- Rxjava
- java
- android
- XCode
- Elliotable
- 아이폰
- 안드로이드
- Swift
- 알고리즘
- Apple Watch
- apple
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |