본문 바로가기

Swift

(26)
[Swift] 모나드 : 컨텍스트, 함수객체, 모나드 💡함수형 프로그래밍에서의 모나드? - 순서가 있는 연산을 처리할 때 자주 활용하는 디자인 패턴 💡프로그래밍에서 모나드가 갖춰야 할 조건 1. 타입을 인자로 받는 타입(특정 타입의 값을 포장) 2. 특정 타입의 값을 포장한 것을 반환하는 함수(매서드)가 존재 3. 포장된 값을 변환하여 같은 형태로 포장하는 함수(매서드)가 존재 크게 3가지 개념을 알아보게 될 것이다. 1️⃣ 컨텍스트 2️⃣ 함수객체 3️⃣ 모나드 1️⃣ 컨텍스트 컨텍스트 = 컵 콘텐츠 = 컵 안에 담겨있는 물 즉, 컨텍스트는 어떤 위치에 값이 존재할 수 있는 맥락 이라고 볼 수 있다. 여기서 우리는 Optional 을 쉽게 떠올릴 수 있다. Optional은 값이 있을 수도, 없을 수도 있음!! Optional 모나드 조건 1 만족 : O..
[Swift] 맵, 필터, 리듀스 1️⃣ 맵 자신을 호출할 때 매개변수로 전달된 함수를 실행하여 그 결과를 다시 반환해주는 함수 기존 데이터를 변형하는데 많이 사용 map 매서드를 클로저 표현을 이용하여 간략화하기 let numbers: [Int] = [0, 1, 2, 3, 4] // 기본 클로저의 표현식 사용 var doubleNumbers = numbers.map({(number: Int) -> Int in return number * 2}) // 매개변수 및 반환 타입 생략 doubleNumbers = numbers.map({return $0 * 2}) print(doubleNumbers) // 반환 키워드 생략 doubleNumbers = numbers.map({ $0 * 2}) print(doubleNumbers) // 후행 클..
[Swift] 옵셔널 체이닝과 빠른 종료 (guard, assert) 1️⃣ 옵셔널 체이닝? - 옵셔널에 속해있는 nil일지도 모르는 프로퍼티, 메서드, 서브스크립션 등을 가져오거나 호출할 때 사용할 수 있는 일련의 과정이다. - 옵셔널에 값이 있다면 프로퍼티, 메서드, 서브스크립트 등을 호출 - 옵셔널이 nil이라면 프로퍼티, 메서드, 서브스크립트 등은 nil을 반환 - 옵셔널을 반복사용하여 옵셔널이 자전거 체인처럼 서로 꼬리를 물고 있는 모양이기 때문에 옵셔널 체이닝이라고 부른다! 💡물음표(?) - 프로퍼티나 메서드 또는 서브스크립트를 호출하고 싶은 옵셔널 변수나 상수 뒤에 붙임 💡느낌표(!) - 옵셔널에서 값을 강제 추출하는 효과 - 옵셔널에 값이 없다면 런타임 오류가 발생 옵셔널 체이닝 간략하게 알아보기 // 사람의 주소 정보 표현 설계 class Room { va..
[Swift] 클로저 : Closure 함수형 프로그래밍 패러다임과 클로저의 관계 - 스위프트에서 함수형 프로그래밍 패러다임을 접할 때 첫걸음으로 꼭 알아야할 클로저! - 클로저와 제네릭, 프로토콜, 모나드 등의 결합으로 스위프트는 훨씬 강력한 언어가 되었다. 함수와 클로저? - 함수는 클로저의 한 형태! 클로저? 변수나 상수가 선언된 위치에서 참조를 획득하고 저장할 수 있다. 이를 변수나 상수의 클로징(잠금)이라고 하며, 여기서 착안된 이름 '클로저' 클로저의 형태 1. 이름이 있으면서 어떤 값도 획득하지 않는 전역함수의 형태 2. 이름이 있으면서 다른 함수 내부의 값을 획득할 수 있는 중첩된 함수의 형태 3. 이름이 없고 주변 문맥에 따라 값을 획득할 수 있는 축약 문법으로 작성한 형태 1️⃣ 클로저의 표현방법 (위치를 기준으로) 1. 기..
[Swift] 접근제어 : 읽기 전용 구현 💡접근제어의 필요성 객체지향 프로그래밍 패러다임에서 중요한 캡슐화와 은닉화를 구현하는 이유는 위부에서 보거나 접근하면 안 되는 코드가 있기 때문이다. 접근제어를 통해 꼭 필요한 부분만 제공할 수 있다. 💡읽기 전용 구현 설정자만 더 낮은 수준을 갖도록 제한할 수 있다. 요소의 접근수준 키워드 뒤에 접근수준(set)처럼 표현하면 설정자의 접근수준만 더 낮도록 지정해줄 수 있다. 설정자의 접근수준 제한은 프로퍼티, 서브스크립트, 변수 등에 적용될 수 있으며, 해당 요소의 접근수준보다 같거나 낮은 수준으로 제한해주어야한다. public struct SomeType{ // 비공개 접근 수준 저장 프로퍼티 count private var count: Int = 0 // 공개 접근 수준 저장 프로퍼티 publicS..