스위프트의 클로저 는 함수형 프로그래밍 패러다임을 이해하기 위해 꼭 알고 가야 하는 요소다. 클로저는 다른 프로그래밍 언어의 람다와 유사하고, 일정 기능을 하는 코드를 하나의 블록으로 모아놓은 것을 의미한다. 클로저는 함수의 한 형태이며, 사실 함수는 이름이 있는 클로저라고 할 수 있다. 클로저는 변수나 상수가 선언된 위치에서 참조를 획득할 수 있다. 이를 변수나 상수의 클로징(잠금) 이라 하며, 클로저는 여기서 착안된 이름이다. 클로저는 다음과 같이 세 가지 형태가 있다. 이름이 있으면서 어떤 값도 획득하지 않는 전역함수 이름이 있으면서 다른 함수 내부의 값을 획득할 수 있는 중첩된 함수 이름이 없고 주변 문맥에 따라 값을 획득할 수 있는 축약 문법으로 작성 기본 클로저 스위프트의 표준 라이브러리에는 ..

옵셔널 (Optional) 이란 말 그대로 선택적인, 즉 값이 있을 수도 없을 수도 있다는 것을 나타낸다. 즉 프로그래밍 언어에서는 상수나 변수가 값을 가질 수도, 없을 수도(null) 있다는 것을 의미하고, Nullable 이라고도 표현할 수 있다. Swift의 모든 타입은 기본적으로 nil을 가질 수 없다. 그렇다면 어떻게 nil을 가지도록 표현할 수 있을까? 옵셔널 사용 기본적으로 Swift 에서 다음과 같이 변수나 상수를 선언하면, 해당 변수나 상수는 nil 을 가질 수 없다 var number : Int = nil //
열거형은 연관된 항목들을 묶어서 표현할 수 있는 타입으로, 프로그래머가 정의해준 값 외에는 추가나 수정이 불가능하다. 그렇기 때문에 딱 정해진 값만 열거형 값에 속할 수 있다. 열거형은 다음과 같은 상황에 유용하게 사용할 수 있다. 제한된 선택지를 주고 싶을 때 정해진 값 외에는 입력받고 싶지 않을 때 예상된 입력 값이 한정되 있을 때 즉 연관된 값들을 높은 가독성으로 나열하는데 특화되있으며, 실생활에서 이미 열거형으로 사용할 수 있는 개념들이 많다. 예를 들어 요일은 [월요일,화요일,수요일,목요일,금요일,토요일,일요일] 으로만 이루어져 있기 때문에, 이것을 열거형으로 만들면 해당 API 를 사용하는 프로그래머는 무조건 정의된 요일만 사용할 수 있다. 기본 열거형 스위프트의 기본 열거형은 enum 이라는..
프로그램이 실행되다 보면, 무조건 에러가 발생하게 된다. 예를 들어 카카오톡 같은 메신저 앱의 경우, 인터넷 연결이 계속 유지되어야 정상적으로 상대방과 채팅을 할 수 있다. 하지만 사용자가 와이파이를 끈다던가, 비행기 모드를 키는 등의 행동으로 인터넷 연결이 끊어질 경우, 네트워크 통신 시 에러가 발생하게 되며 프로그램은 그런 에러를 정상적으로 처리할 수 있어야 한다. 만약 발생 가능한 모든 에러를 처리하지 못한다면, 런타임 에러로 인해 작동 중인 프로그램이 강제로 종료될 것이다. Swift 의 에러 핸들링 Swift 는 Java 나 Kotlin 같은 언어와 거의 유사하게 에러를 처리한다. 기능 동작 중 에러가 발생할 경우 에러를 던질 수 있고 (throws), 던진 에러를 감지해서(catch) 처리할 ..
Swift 의 딕셔너리는 자바나 일반 자료구조의 HashTable 과 동일한 개념이다. key 와 value 로 이루어져 있고, 데이터엔 순서가 없다. Hash Table 에 대해서도 포스팅을 해놓은 자료가 있으니 Hash Table 이 뭔지 잘 모르면 보고 오면 좋겠다. Hash 자료구조 - java Hash 자료구조란? key와 Value 가 쌍을 이루는 자료구조 key 탐색의 시간복잡도가 O(1) 이다. key 삭제의 시간복잡도가 O(1) 이다. key와 Value 삽입의 시간복잡도가 O(1) 이다. Hash 자료구조의 경우 검색과 forstudy.tistory.com Dictionary 란? Key - Value 쌍으로 이루어진 Collection 을 의미한다. Dictionary 의 시간 복잡도..
프로퍼티 래퍼는 스위프트 5.1부터 나온 개념으로, 클래스와 구조체 구현부에 게터(getter), 세터(setter), 연산 프로퍼티(computed property) 코드의 중복을 줄이는 방법을 제공한다. 프로퍼티 래퍼란? 클래스나 구조체 인스턴스에 값을 할당하거나 접근할 때 값을 저장하거나 읽어내기 전에 변환 작업이나 유효성 검사를 해야 할 경우가 존재한다. 물론 연산 프로퍼티로도 위와 같은 작업은 할 수 있다. 그러나 여러 클래스나 구조체에 생성한 연산 프로퍼티들이 유사한 패턴을 갖는 경우가 빈번하게 발생한다. 클래스나 구조체의 구현부마다 비슷한 역할을 하는 연산 프로퍼티를 복사 붙여넣기 할 수도 있다. 이것은 생산성이 매우 떨어질 뿐만 아니라, 계산 방법이 수정되는 일이 생기면 각각의 클래스나 구..
Swift는 구조체를 사용한다. 기본적으로 구조체도 클래스처럼 객체 지향 프로그래밍의 기초를 따르며 데이터와 기능을 재사용할 수 있는 객체로 캡슐화하는 방법을 제공한다. 구조체의 선언 방법 구조체도 클래스와 선언 방법이 비슷하다. 단지 class 대신 struct 키워드를 사용하는게 다르다. struct Address { private var cityName : String = "" var city : String { get { cityName } set { cityName = newValue.uppercased() } } } 클래스와 마찬가지로 구조체도 확장될 수 있으며, 프로토콜을 채택하거나 초기화를 가질 수 있다. 그렇다면 구조체는 클래스와 무엇이 다를까? 값 타입 vs 참조 타입 클래스와 구조체는..
가변개수 매개변수 매개변수의 개수를 여러개 받을 수 있다. 가령 여러 개의 정수를 받아 그 합을 반환해주는 함수를 선언한다고 생각해보자. 정수는 0개부터 엄청 큰 수까지 받을 수 있다 func addInt(_ ints:Int...) -> Int { var ret = 0 for int in ints { ret += int } return ret } print(addInt(1,2,3,4,5,6,7,8,9,10)) 매개변수를 여러 개 받을 수 있도록 하려면, 매개변수의 타입 뒤에 0개 또는 그 이상을 받는따는 것을 의미하는 ... 를 사용하여 가변개수 매개변수를 선언할 수 있다 매개변수는 기본적으로 상수로 취급된다 Swift 는 기본적으로 함수형 패러다임을 따르는 언어다. 함수형 패러다임에서 함수는 부수 효과..
Comment