본문 바로가기

iOS/SWIFT30

[Swift] Chapter 30. 불명확 타입 반환 타입에 불명확 타입(Opaque Types)을 사용하면 반환할 타입의 정확한 타입을 알려주지 않은채로 반환하겠다는 것을 의미한다. 프로퍼티나 서브스크립트의 선언 혹은 함수의 반환 타입 위치에 프로토콜을 쓰면서 앞에 some을 붙이면, '이 프로토콜을 준수하는 어떤 타입 중에 하나일 것은 분명하다'는 뜻이다. 언뜻 보면 제네릭과 비슷해 보이지만 많이 다르다. 제네릭은 정의해 줄 때 정확히 어떤 타입이 들어올지 모르는 상태로 플레이스 홀더를 만들어 준다. 불명확 타입은 반대로 외부에서는 어떤 타입이 나에게 반환될지 모른다. 다시 말해서 제네릭은 외부에서 타입을 지정해 주는 것이고, 불명확 타입은 내부에서 타입을 정해서 내보내게 되는데, 밖에서는 정확히 어떤 타입인지는 몰라도 쓸 수 있는 것이다. 그래서.. 2021. 10. 24.
[Swift] Chapter 29. 메모리 안전 스위프트는 안전을 중요시하는 언어이다. 그래서 컴파일러가 코드에서 위험을 줄일수 있도록 많은 장치를 두었다. 그 중 큰 부분을 차지하는 것이 메모리의 안전한 접근이다. 변수를 사용하기 전에 초기화를 강제하고, 해제된 메모리에 접근할 수 없도록 설계된 것들이 그 대표적인 예다. 스위프트는 메모리를 자동으로 관리하기 때문에 특별한 경우가 아니라면 프로그래머가 메모리의 접근에 대해 크게 신경쓸 필요가 없다. 스위프트 컴파일러는 메모리 접근 충돌이 생길만한 코드를 미연에 알려준다. 이번 장에서는 이에 대해 알아보자. 29.1 메모리 접근 충돌의 이해 프로그래머가 변수에 값을 할당한다던가 함수의 전달인자로 변수의 값을 전달하는 등 다양한 경우에 코드를 통해 메모리에 접근하게 된다. /* 코드 29-1. 코드를 통.. 2021. 10. 24.
[Swift] Chapter 28. 오류처리 스위프트가 제공하는 오류처리 기능에 대해 알아보자. 28.1 오류처리란 오류처리(Error Handling)는 프로그램이 오류를 일으켰을 때 이것을 감지하고 회복시키는 일련의 과정이다. 오류처리 기능을 통해 프로그램 자체적으로 오류를 해결할 수도 있고, 사용자와 상호작용을 통해 오류를 어떤 방향으로 풀어나갈지 제어할 수도 있다. 28.2 오류의 표현 스위프트에서 오류는 Error라는 프로토콜을 준수하는 타입의 값을 통해 표현된다. Error 프로토콜은 사실상 요구사항이 없는 빈 프로토콜일 뿐이지만, 오류를 표현하기 위한 타입(주로 열거형)은 이 프로토콜을 채택한다. 스위프트의 열거형은 오류의 종류를 나타내기에 아주 적합한 기능이다. 연관 값을 통해 오류에 관한 부가 정보를 제공할 수도 있다. [코드 28.. 2021. 10. 24.
[Swift] Chapter 27. ARC 매번 전달할 때마다 값을 복사해 전달하는 값 타입과는 달리 참조 타입은 하나의 인스턴스가 참조를 통해 여러 곳에서 접근하기 때문에 언제 메모리에서 해제되는지가 중요한 문제이다. 인스턴스가 적절한 시점에 메모리에서 해제되지 않으면 한정적인 메모리 자원을 낭비하게 되며, 이는 성능의 저하로 이어지게 된다. 스위프트는 프로그램의 메모리 사용을 관리하기 위하여 메모리 관리 기법인 ARC를 사용한다. NOTE_ARC와 값 타입 ARC가 관리해주는 참조 횟수 계산(Reference Counting)은 참조 타입인 클래스의 인스턴스에만 적용된다. 구조체나 열거형은 값 타입이므로 참조 횟수 계산과 무관하다. 즉, 구조체나 열거형은 다른 곳에서 참조하지 않기 때문에 ARC로 관리할 필요가 없다. 27.1 ARC란 ARC.. 2021. 10. 23.
[Swift] Chapter 26. where 절 스위프트의 where 절은 특정 패턴과 결합하여 조건을 추가하는 역할을 한다. 조건을 더 추가하고 싶을 때, 특정 타입에 제한을 두고 싶을 때 등등 다양한 용도로 사용된다. 26.1 where 절의 활용 where 절은 크게 두 가지 용도로 사용된다. 패턴과 결합하여 조건 추가 타입에 대한 제약 추가 다시 말해서 특정 패턴에 Bool 타입 조건을 지정하거나 어떤 타입의 특정 프로토콜 준수 조건을 추가하는 등의 기능이 있다. 예제를 통해 where 절과 결합할 수 있는 다양한 패턴과 그 활용에 대해 알아보자. [코드 26-1]에서 값 바인딩, 와일드카드 패턴과 결합한 where 절을 살펴보자. /* 코드 26-1. 값 바인딩, 와일드카드 패턴과 where 절의 활용 */ let tuples: [(Int, .. 2021. 10. 23.
[Swift] Chapter 25. 패턴 스위프트에는 문법에 응용할 수 있는 다양한 종류의 패턴(Pattern)이 있다. 여러 패턴을 잘 숙지해두면 스위프트 코드의 양을 줄이는 효과는 물론, 스위프트 문법을 좀 더 잘 활용할 수 있다. 패턴은 '단독 또는 복합 값의 구조를 나타내는 것'이고, 패턴 매칭은 '코드에서 어떤 패턴의 형태를 찾아내는 행위'라고 할 수 있다. 쉽게 말하자면 '이러이러한 것을 표현하고 싶다'면, '이러이러한 패턴을 통해 표현하면 된다'라고 이해하면 된다. 대부분의 패턴은 switch, if, guard, for 등의 키워드와 아주 친하며 두 개 이상의 키워드가 합을 이뤄 동작한다. 스위프트의 패턴은 크게 두 종류로 나뉜다. 값을 해체(추출)하거나 무시하는 패턴 와일드카드 패턴, 식별자 패턴, 값 바인딩 패턴, 튜플 패턴 .. 2021. 10. 23.