본문 바로가기

스위프트21

[Swift] Chapter 15. 맵, 필터, 리듀스 스위프트는 함수를 일급 객체로 취급한다. 따라서 함수를 다른 함수의 전달인자로 사용할 수 있다. 매개변수로 함수를 갖는 함수를 고차함수라고 부르는데, 스위프트에 유용한 대표적인 고차함수로는 맵, 필터, 리듀스 등이 있다. 15.1 맵(Map) 맵은 자신을 호출할 때 매개변수로 전달된 함수를 실행하여 그 결과를 다시 반환해주는 함수이다. 스위프트에서 맵은 배열, 딕셔너리, 세트, 옵셔널 등에서 사용할 수 있다. 더 정확히 말하자면 스위프트의 Sequence, Collection 프로토콜을 따르는 타입과 옵셔널은 모두 맵을 사용할 수 있다. 맵을 사용하면 컨테이너가 담고 있던 각각의 값을 매개변수를 통해 받은 함수에 적용한 후 다시 컨테이너에 포장하여 반환한다. 기존 컨테이너의 값은 변경되지 않고 새로운 컨.. 2021. 10. 10.
[Swift] Chapter 14. 옵셔널 체이닝과 빠른 종료 옵셔널 체이닝은 여러 값이 중첩된 형태를 띄어야 제 몫을 발휘한다. 이번 장에서 옵셔널 체이닝과 빠른 종료(Early Exit) 문법에 대해 알아보자. 14.1 옵셔널 체이닝 옵셔널 체이닝은 옵셔널에 속해 있는 nil일지도 모르는 프로퍼티, 메서드, 서브스크립션 등을 가져오거나 호출할 때 사용할 수 있는 일련의 과정이다. 옵셔널에 값이 있다면 프로퍼티, 메서드, 서브스크립트 등을 호출할 수 있고, 옵셔널이 nil이라면 프로퍼티, 메서드, 서브스크립트 등은 nil을 반환한다. 중첩된 옵셔널 중 하나라도 값이 존재하지 않는다면 결과적으로 nil을 반환한다. 옵셔널 체이닝은 프로퍼티나 메서드 또는 서브스크립트를 호출하고 싶은 옵셔널 변수나 상수 뒤에 물음표(?)를 붙여 표한한다. 옵셔널 체이닝의 결과 nil이.. 2021. 10. 9.
[Swift] Chapter 13. 클로저 클로저는 일정 기능을 하는 코드를 하나의 블록으로 모아놓은 것을 말한다. 함수는 클로저의 한 형태이다. 클로저는 변수나 상수가 선언된 위치에서 참조(Reference)를 획득(Capture)하고 저장할 수 있다. 이를 변수나 상수의 클로징(잠금)이라고 하며 클로저는 여기서 착안된 이름이다. 클로저에는 세 가지 형태가 있다. 이름이 있으면서 어떤 값도 획득하지 않는 전역함수의 형태 이름이 있으면서 다른 함수 내부의 값을 획득할 수 있는 중첩된 함수의 형태 이름이 없고 주변 문맥에 따라 값을 획득할 수 있는 축약 문법으로 작성한 형태 먼저 클로저를 얼마나 다양하게 표현할 수 있는지 살펴보자. 클로저는 매개변수와 반환 값의 타입을 문맥을 통해 유추할 수 있기 때문에 매개변수와 반환 값의 타입을 생략할 수 있다.. 2021. 10. 9.
[Swift] Chapter 12. 접근제어 객체지향 프로그래밍 패러다임에서 은닉화는 중요한 개념 중 하나이다. 이를 구현하기 위한 핵심 기능인 접근 제어에 대해 알아보자. 12.1 접근제어란 접근제어는 코드끼리 상호작용 할 때 파일 간 또는 모듈 간에 접근을 제한할 수 있는 기능이다. 접근제어를 통해 코드의 상세 구현은 숨기고 허용된 기능만 사용하는 인터페이스를 제공한다. 12.1.1 접근제어의 필요성 캡슐화와 은닉화를 구현하는 이유는 외부에서 보거나 접근하면 안 되는 코드가 있기 때문이다. 불필요한 접근으로 의도치 않은 결과를 초래하거나 꼭 필요한 부분만 제공을 해야되는데 전체 코드가 노출될 가능성이 있을 때 접근제어를 이용한다. 12.1.2 모듈과 소스파일 스위프트의 접근제어는 모둘과 소스파일을 기반으로 설계되었다. 모듈은 배포할 코드의 묶음.. 2021. 10. 8.
[Swift] Chapter 11. 인스턴스 생성 및 소멸 11.1 인스턴스 생성 초기화 과정은 새로운 인스턴스를 사용할 준비를 하기 위하여 저장 프로퍼티의 초깃값을 설정 하는 등의 일을 한다. 이니셜라이저를 정의하면 초기화 과정을 직접 구현할 수 있다. 스위프트의 이니셜라이저는 반환 값이 없다. 이니셜라이저는 해당 타입의 새로운 인스턴스를 생성하기 위해 호출한다. func 키워드를 사용하지 않고 오로지 init 키워드를 사용하여 이니셜라이저 메서드임을 표현한다. init 메서드는 클래스, 구조체, 열거형 등의 구현부 또는 해당 타입의 익스텐션 구현부에 위치한다. 다만 클래스의 지정 이니셜라이저는 익스텐션에서 구현해줄 수 없다. /* 코드 11-1. 클래스, 구조체, 열거형의 기본적인 형태의 이니셜라이저 */ class SomeClass { init() { //.. 2021. 10. 8.
[Swift] Chapter 10. 프로퍼티와 메서드 프로퍼티는 클래스, 구조체 또는 열거형 등에 관련된 값을 뜻한다. 메서드는 특정 타입에 관련된 함수를 뜻한다. 10.1 프로퍼티 프로퍼티는 저장 프로퍼티(Stored Properties)와 연산 프로퍼티(Computed Properties), 타입 프로퍼티(Type Properties)로 나눌 수 있다. 저장 프로퍼티는 인스턴스의 변수 또는 상수를 의미한다. 연산 프로퍼티는 값을 저장한 것이 아니라 특정 연산을 실행한 결괏값을 의미한다. 연산 프로퍼티는 클래스, 구조체, 열거형에 쓰일 수 있다. 저장 프로퍼티는 구조체와 클래스에서만 사용할 수 있다. 저장 프로퍼티와 연산 프로퍼티는 특정 타입의 인스턴스에 사용되는 것을 뜻하지만 특정 타입에 사용되는 프로퍼티도 있는데 이를 타입 프로퍼티라고 한다. 프로퍼티.. 2021. 10. 8.