![](http://i1.daumcdn.net/thumb/C148x148.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/cNAFEv/btqBQoYRQHM/h0NRBuEuLDi3YqeOvVifdK/img.png)
이번 포스트에서는 Swift에서 문자열과 문자에 대해 살펴보도록 하겠습니다. Swift에서 제공하는 String은 Foundation 프레임워크의 NSString이 bridge된 타입이기 때문에 NSString의 메소드를 String에서 캐스팅 없이 사용 가능합니다. (NSString은 Objective C에서 사용하는 문자열 타입입니다.) 문자열은 큰 따옴표(“)로 묶어 표현 합니다. 여러줄의 문자열을 사용하고 싶은 경우 큰 따옴표 3개(“””)로 묶어서 사용할 수 있습니다. 여러줄 문자열을 사용하며 줄바꿈을 하고 싶으면 백슬래쉬(\)를 사용합니다. let quotation = """ 나는 나와 연애를 했다. \ 너무 슬프지만 어쩔 수 없다. \ "연애를 하고 싶고 좋은 사람을 만나고 싶다." \ ""..
이번 포스트에서는 Swift의 기본 연산자에 대해 살펴보도록 하겠습니다. 할당 연산자 할당 연산자는 값을 초기화하거나 이미 설정된 값을 새로운 값으로 변경하는 역할을 가지고 있습니다. 아래와 같이 상수, 변수 모두 사용할 수 있습니다. 또한 튜플 형식을 사용하여 여러 개의 값을 한 번에 할당할 수도 있습니다. let num1 = 10 var num2 = 5 num2 = num1 // 결과 : num2 = 10, num1 = 10 let (numX, numY) = (10, 20) // numX는 10, numY는 20이 할당됩니다. C 혹은 Objective-C와는 달리 Swift에서 할당 연산자는 값을 반환하지 않는 특징을 하지고 있습니다. 즉, C 혹은 Objective-C에서 성공적으로 값이 할당된 ..
![](http://i1.daumcdn.net/thumb/C148x148.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/w9jJU/btqxXa4A1wQ/7bkArHWZwjY8ILsLb2Hg11/img.png)
스케쥴러는 프로그램의 세부 일정을 주관하는 관리자라고 생각하면 좋습니다. 그 동안 RxJava를 사용하여 구현해온 코드들은 모두 main Thread에서 동작하는 코드입니다. 그런데 실무에서는 요구 사항에 따라 비동기로 동작할 수 있도록 스레드를 지정할 수 있어야 합니다. (메인 스레드로 고정된 것을 바꾸어야 함) 스케쥴러는 스레드를 지정할 수 있게 해줍니다. 새로운 스레드를 생성하거나 기존의 Executors를 활용하는 것을 넘어서 새로운 방식으로 동작이 이루어 집니다. 스레드를 만들면서 경쟁 조건이나 synchronized 키워드를 사용했다면 스케쥴러는 이와 같은 것들을 신경 쓸 필요가 없어집니다. flip()의 기능 보다는 시간 표시줄에 더 집중해서 살필 필요가 있습니다. 위 마블 다이어그램을 코드..
![](http://i1.daumcdn.net/thumb/C148x148.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/proww/btqxVzC6faQ/E6BSoA8JUFhk6cKYlWaoq1/img.png)
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) } 위 코드 역..
![](http://i1.daumcdn.net/thumb/C148x148.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/uCgb2/btqxRvu6aZL/KDcoJ5tKNKgEKTa2EjSSP0/img.png)
코틀린에서 제공하는 컬렉션 타입을 이용하면서 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) } 이렇게 사용할 수..
![](http://i1.daumcdn.net/thumb/C148x148.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/BPMXP/btqxGvVuRiN/FGZeBEGlKwOckSAzynhKsK/img.png)
리액티브 X에는 다양한 연산자 함수가 있습니다. 이 연산자 함수들의 개수는 Rx 버전이 올라갈수록 계속 증가하고 있습니다. 하지만 기본적인 함수들을 익혀놓으면 이후에는 필수 연산자에서 파생된 연산자 함수들이기 때문에 이해할 수 있습니다. 리액티브 연산자의 특징은 언어 특성과 크게 연관이 없습니다. RxJava, RxKotlin, RxJS, RxSwift 등 언어적인 부분에서 말고는 연산자의 기능이 크게 다르지 않습니다. 리액티브 연산자는 함수형 프로그래밍 관점에서 보았을 때 순수 함수입니다. 이번 포스트에서는 다양한 연산자 함수 중 변환 연산자에 대해 알아보도록 하겠습니다. Transforming 연산자에는 map()과 flatMap() 두 가지가 있습니다. 1. map() 함수 map() 함수는 입력된..
이번 포스트에서는 함수형 프로그래밍 중 클로저의 개념에 대해 살펴보도록 하겠습니다. 클로저(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..
- Total
- Today
- Yesterday
- watchos
- Elliotable
- SwiftUI
- 알고리즘
- 컬렉션
- 코틀린
- 상속
- Swift
- Rxjava
- 애플워치
- retrofit
- 아이폰
- 오토레이아웃
- databinding
- apple
- 안드로이드
- java
- Apple Watch
- 함수형
- Auto Layout
- CloudComputing
- android
- 함수형프로그래밍
- Kotlin
- C++
- XCode
- Reactive programming
- Notissu
- 스위프트
- ios
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |