Programming 99

[Kotlin] 함수형으로 데이터 구조 만들기

주요 개념 - 함수형 개념을 사용하여 List를 구현 - 순수 함수 (Pure function) - 꼬리 재귀 (Tail recursion) - 고차 함수 (High order function) - 패턴 매칭 & 코틀린 매칭 - 이진트리를 직접 구현 아래의 코드는 단일 연결리스트의 구조 정의로, 비어있는 리스트와 값이 들어가 있는 리스트를 생성할 수 있는 형태이다. 값을 넣는 head와 리스트를 연결할 수 있는 tail 형태로 이루어져있다. 다형적으로 사용하기 위해서 A로 타입을 추상화 했다. sealed class List object Nil: List() data class Cons(val head: A, val tail: List): List() 아래는 companion object를 통해서 Jav..

Programming/Kotlin 2023.09.06

[Kotlin] 함수형 프로그래밍 시작하기

주요 개념 - 꼬리 재귀 함수를 이용한 루프 작성 - 고차 함수 (High-order function) - 타입 추상화 순수함수 만을 사용하여 프로그래밍을 하는 것이 함수형 프로그래밍의 기본이다. 그럼 순수함수만 이용해서 루프를 구현하라고 하면 대부분의 사람들은 어려워할 것이다. 이를 위해서 우리는 꼬리 재귀 함수를 사용한다. 아래와 같이 피보나치 함수를 꼬리재귀를 이용해서 짜보자. 피보나치 말고도 구구단 출력이나 기타 수열 문제들을 꼬리 재귀를 통해서 해결해보도록 한다. 재귀함수는 오로지 매개변수만을 참조하여 처리하도록 구현한다. 즉, 순수함수를 이용한 재귀 호출로 루프를 구현하는 것이다. fun factorial(i: Int): Int { fun go(n: Int, acc: Int): Int = if..

Programming/Kotlin 2023.09.05

[Kotlin] 함수형 프로그래밍이란? (순수함수)

Side effect를 유발하는 코드 - 블럭 외부에서 변수를 변경하는 경우 (공유 자원) - 메모리에 직접 접근하여 값을 변경하는 경우 (공유 자원) - 객체에 필드를 설정하는 경우 (공유 자원) - 예외를 던지거나 발생해서 프로그램을 중단 (실행 흐름) - 콘솔 출력이나 사용자의 입력 대기 (실행 흐름) - 파일을 입출력 (공유 자원) - 화면 출력 (공유 자원 /. 실행 흐름) 위와 같은 Side effect를 줄이는 방법으로 프로그래밍을 하도록 한다. IO 수행, 오류 처리, 데이터 변경 등의 처리를 보다 제한적이고 안전한 방법으로 한다. 이를 위해 함수형 프로그래밍을 살펴본다. 함수형 프로그래밍을 하기 위해서는 순수 함수를 이해하는 것이 중요하다. 위의 Side effect를 유발하는 코드의 공..

Programming/Kotlin 2023.09.05

[iOS] 버전별 히스토리 관리

지속 업데이트 중.... OS 버전기능SDK출시일비고1iOS 11 (beta 2)파일 탐색기 지원독을 활용한 Splitview/Slideover (멀티태스킹)드래그앤 드롭 기능Live Photo 루프/바운스/장노출 효과App Store 리뉴얼Siri 번역 기능Apple Music 친구 기능 강화제어센터 리뉴얼애플 지도 건물 내부 지원Quicktype 키보드 한손 타이핑 가능가까이 있는 iOS와 Mac으로 자동 복원 기능사진앱에서 GIF 및 QR code 기능 지원파일앱에서 FLAC 재생 가능32-bit 미지원ARKit (증간현실) 지원ApplePay (NFC API 개방 : iPhone7 이후 모델 대상)바이너리 바코드 지원 : CIBardoceDescriptor를 이용MusicKit : 애플 뮤직 카탈..

[iOS] UIViewController 심층 분석

View Controller View controller는 앱의 UI를 꾸미는 view들을 관리한다. 개발할 기능과 시각적 요소를 제공하기 위해서 view controller를 상속받아 클래스를 구현한다. view controller는 관리하고 있는 view들과 엮여 있으며 event를 처리하기 위한 Responder chain에 관여한다. view controller는 UIResponder 객체로서, 해당 view controller의 root view와 super view 사이의 Responder chain에 위치한다. view controller의 view가 event를 처리하지 않는다면 해당 event를 super view로 넘길 수 있다. 그리고 다른 view controller를 contain..

[iOS] addSubview & addChildViewController (P. S. Container View Controller)

addSubview & addChildViewController addSubview는 view를 view hierarcky에 추가한다. addChildViewController는 Container View Controller에 child view controller를 추가한다. 전자의 경우, 하나의 view controller에서 event를 관리한다. 후자의 경우, 각각의 view controller들이 자신이 소유하고 있는 view의 event를 따로 관리하게 된다. 그리고 각 child view controller를 소유하고 있는 view controller를 container view controller라고 한다. 우리가 가장 흔하게 볼 수 있는 container view controller의 예..

[iOS] Autorelease Pool과 메모리 관리

Autorelease pool은 객체가 즉시 해제되는 가능성을 피하고자 할 때, 객체에 대한 소유권을 포기하도록 하는 메카니즘이다. autorelease pool은 '@autoreleasepool'이라는 키워드로 사용한다. 블록안 에서 autorelease 메시지를 받은 객체들은 '@autoreleasepool'로 선언한 블록의 끝에서 release 메시지를 받는다. 일반적으로 autorelease 메시지는 객체를 할당한 구역 밖에서 객체를 해제하고자 할때, 컴파일러에게 이를 알리고자 사용하는 메시지이다. 하지만 autorelease 메시지는 객체가 언제 해제되는지 불명확해 진다. autorelease pool은 이런 autorelease 객체가 해제되는 시점을 명시적으로 보여준다. 즉 autorelea..

[Programming] 함수형 프로그래밍에 대하여

향후 함수형 프로그래밍에 대한 이해는 이 포스팅에 작성합니다. FP in all languagesFP in Swift 함수형 프로그래밍에서 고차함수나 재귀를 자주 쓰는 이유 : 함수형 프로그래밍은 외부의 영향을 받지 않는 순수함수 사용을 지향한다. 이유는 순수함수 여야만 분산 프로그래밍 시스템에서 데이터의 신뢰성을 보장 하는 함수형 프로그래밍의 가치를 살릴 수 있기 때문이다. 그래서 반복문을 사용할 때, for, while 같은 loop문을 사용하는 것 보단 외부에서 가져온 변수를 스택에 저장하고 이를 참조하는 재귀함수를 쓴다. 이는 스택 영역에 복사된 데이터를 참조하기 때문에 외부 변수나 State에 의해 데이터 신뢰성이 파괴 되는 행위를 방지할 수 있다. 중간 변수를 캐시하는 방법 : 재귀를 사용하여..

Programming 2017.07.04

[iOS] "%zd, %tu, %tx" 아키택처 관련 Data Format

iOS에서 64비트를 사용하면서, 각 데이터 사이즈의 변화가 생겼다. 특히 NSInteger, NSUIntger 등등의 'NS'라는 접두어가 붙는 primitive type의 사이즞 각 아키텍처 별로 다르다. 예를 들어 NSInteger의 경우, 32비트에서 int 타입으로 4 바이트를 가진다. 반면 64비트에서는 long 타입으로 처리되어 8바이트가 된다. print (NSLog) 문을 통하여 출력을 할때, 데이터의 사이즈가 전달되는데, 이렇게 데이터의 사이즈가 아키텍처별로 다르기 때문에 컴파일을 하다보면 워닝을 발견할 수 있다. 이와 같은 워닝을 방지하기 위해 위의 데이터 포맷이 필요하다. %zd, %tu, %tx는 32/64 비트 아키택처에 맞추어 데이터 사이즈를 전달한다. 단, %zd는 signe..

[RxSwift] Obseravbles

Observable은 Rx에서 중요한 요소이다. Sequence하고도 불리지만 대부분 Obserable이라고 불린다. Observable 3가지 타입의 이벤트를 수용한다. 각 event는 onNext, onComplete, onError이다. 각 event는 아래와 같이 정의된다. onNext아래의 그림에서 각 원으로 표시되는 event로, 각 element마다 발생하는 event이다. onCompleted아래의 그림에서 수직으로 그어진 선이다. observable의 정상적인 종료를 의미한다.onError아래의 그림에서 빨간 'X'이다. observable의 비정상적인 종료를 의미한다. error 객체를 반환한다. observable은 of, just, from 등의 operator들에 의해 생성된다. ..