Swift/Swift 가이드 28

[Swift] 공식 문서 - Memory Safety

새로 배운 점 Swift는 특정 메모리 공간을 수정하는 코드가 그 메모리의 소유권을 가지도록 요구함으로써 동일한 메모리 영역을 동시에 접근할 때 충돌하지 않도록 해줍니다. 메모리 액세스의 지속시간은 instantaneous(순간적) 또는 long-term(장시간)일 수 있습니다. 만약 액세스가 끝나기 전에 다른 코드가 실행될 가능성이 없다면 이 액세스는 순간적(instantaneous)입니다. 다른 코드의 실행에 걸쳐서 메모리에 액세스하는 여러 방법들이 있는데, 이를 장기간(long-term) 액세스라고 합니다. 오버랩(overlap)이란 장기간 액세스가 시작된 후 종료되기 전에 다른 코드가 실행되는 것입니다. 장기간 액세스는 다른 장기간 액세스 또는 순간적 액세스와 오버랩 될 수 있습니다. 함수는 모든..

[Swift] 공식 문서 - Automatic Reference Counting(ARC)

안녕하세요. 개발하는 정주입니다. 오늘은 "Automatic Reference Counting"를 정리해보겠습니다. * 완벽한 번역이 아닌 내용을 한 줄 한 줄 읽는 것에 의의를 두었습니다. * 파파고의 힘을 빌려 번역했으며 잘못된 번역이 있다면 댓글로 알려주세요. 새로 배운 점 참조 카운트는 클래스의 인스턴스에서만 적용된다. ARC는 메모리 해제 뿐만 아니라 메모리 할당, 추적의 역할도 한다. 약한 참조는 다른 인스턴스의 수명이 더 짧을 때 사용해야 한다. 미소유 참조에 대한 개념 미소유 참조는 다른 인스턴스의 수명이 같거나 더 길 때 사용해야 한다. 모두 nil이 허용되면 weak를 이용해 강한 순환 참조를 방지한다. nil이 허용되는 하나의 속성과 nil이 될 수 없는 다른 속성일 때는 unowne..

[Swift] 공식 문서 - Opaque Types

새로 배운 점 Opaque 리턴 타입을 갖는 함수나 메서드는 리턴 값의 타입 정보를 숨깁니다. 함수의 리턴 타입으로 프로토콜 타입을 사용하는 것은 프로토콜을 준수하는 어떠한 타입을 리턴할 수 있다는 유연성을 제공합니다. 너무 어렵다... Opaque Types 오페이크(Opaque) 리턴 타입을 갖는 함수나 메서드는 리턴 값의 타입 정보를 숨깁니다. 함수의 리턴 타입으로 구체적인 타입을 제공하는 대신에, 리턴 타입은 프로토콜이 제공하는 것으로 묘사될 수 있습니다. 리턴 값의 내부 타입이 private로 남아있을 수 있기 때문에 타입 정보를 숨기는 것은 모듈과 모듈을 호출하는 코드 사이의 경계에서 유용합니다. 타입이 프로토콜인 값을 리턴하는 것과는 달리, opaque 타입은 타입 identity를 유지합니..

[Swift] 공식 문서 - 제네릭(Generics)

새로 배운 점 제네릭은 Swift에서 가장 강력한 기능 중 하나이며, 대부분의 Swift 표준 라이브러리는 제네릭 코드로 빌드됩니다. 하나 이상의 타입 파라미터를 사용할 수 있는데, 각 타입 파라미터는 꺽쇠 괄호 내에서 콤마로 구분해 작성하면 됩니다. 타입 파라미터가 사용되는 제네릭 타입 또는 함수 간의 관계를 내포하는 이름을 사용합니다. 의미있는 관계가 없다면 T, U, V처럼 영문자를 관례로 사용합니다. 제네릭 타입을 확장할 때, 익스텐션(extension)의 정의의 일부로 타입 파라미터 리스트를 제공하지 않아도 됩니다. 원본 타입 정의에서 타입 파라미터 리스트를 익스텐션의 바디 내에서 사용할 수 있고, 원본 타입 파라미터의 이름들은 원본 정의에서의 타입 파라미터를 참조하는데 사용됩니다. 타입 제약은..

[Swift] 공식 문서 - 프로토콜(Protocols) - 2

* Protocols 가이드 1편은 여기에서 볼 수 있습니다. 새로 배운 점 제네릭(generic) 타입은 프로토콜 이름 뒤에 where 절이 있을 때만 프로토콜의 요구사항을 만족합니다. Swift는 다음과 같은 커스텀 타입에 대해 Equatable 구현을 제공합니다. Equatable을 따르는 저장 프로퍼티만 가진 구조체 Equatable을 따르는 associated 타입만 가진 열거형 associated 타입이 없는 열거형 Swift는 다음과 같은 커스텀 타입에 대해 Hashable 프로토콜을 따르도록 할 수 있습니다. Hashable을 따르는 저장 프로퍼티만 가지고 있는 구조체 Hashable을 따르는 associated 타입만 가지고 있는 열거형 associated 타입이 없는 열거형 raw va..

[Swift] 공식 문서 - 프로토콜(Protocols) - 1

* Protocols 가이드는 너무 길어서 두 편으로 나눠 포스팅합니다. 2편은 여기에서 볼 수 있습니다. 최하단에도 링크를 적어두었습니다. 새로 배운 점 구현해야 하는 요구사항을 지정하는 것 이외에도 이러한 요구사항 중의 일부를 구현하거나 추가 기능을 구현하도록 프로토콜을 확장할 수도 있습니다. Property 요구사항(requirements)은 항상 var 키워드를 앞에 붙여서 변수 프로퍼티로 선언합니다. 프로토콜에서 메서드들은 메서드의 body와 괄호를 제외하고 나머지를 작성합니다. 프로토콜에서 메서드는 가변 매개변수는 허용하지만 기본값은 설정할 수 없습니다. 프로토콜에 mutating을 사용한 경우, 이 프로토콜을 따르는 클래스를 구현할 때는 mutating을 명시하지 않아도 됩니다. 프로토콜을 ..

[Swift] 공식 문서 - 익스텐션(Extensions)

새로 배운 점 익스텐션은 원본 코드를 건들지 않고 타입을 확장할 수 있는 기능이며, retroactive 모델링이라고 합니다. 익스텐션은 Objective-C의 카테고리와 유사합니다. 익스텐션으로 designated 이니셜라이저 또는 deinitializer는 추가할 수 없습니다. 만약 익스텐션을 사용하여 모든 저장 프로퍼티에 기본 값이 설정되어 있고, 어떠한 커스텀 이니셜라이저를 정의하지 않은 값 타입에 이니셜라이저를 추가하면, 익스텐션 이니셜라이저에서 기본 이니셜라이저와 멤버와이즈 이니셜라이저를 호출 할 수 있습니다. 만약 익스텐션을 사용하여 다른 모듈에서 선언된 구조체에 이니셜라이저를 추가하면, 새로운 이니셜라이저는 모듈에 정의된 이니셜라이저를 호출하기 전까지 self에 접근할 수 없습니다. 익스텐..

[Swift] 공식 문서 - 중첩 타입(Nested Types)

새로 배운 점 Swift는 중첩 타입(Nested Types)를 정의할 수 있습니다. 즉, 지원하는 타입의 정의 내에서 클래스, 구조체, 열거형을 중첩할 수 있습니다. Nested Types 열거형은 종종 특정 클래스나 구조체 기능을 지원하기 위해 만들어지기도 합니다. 보다 복잡한 타입의 Context 내에서 사용하기 위해서는 유틸리티 클래스 및 구조체를 정의하는 것이 편리할 수 있습니다. 이를 위해 Swift는 중첩 타입(Nested Types)를 정의할 수 있습니다. 즉, 지원하는 타입의 정의 내에서 클래스, 구조체, 열거형을 중첩할 수 있습니다. 타입을 다른 타입에 중첩키시려면 지원하는 타입의 외부 중괄호 안에 해당 정의를 작성하면 됩니다. 타입은 필요한만큼 중첩할 수 있습니다. Nested Typ..

[Swift] 공식 문서 - 타입 캐스팅(Type Casting)

새로 배운 점 클래스와 서브클래스의 계층 구조가 있는 타입 캐스팅을 사용하여 특정 클래스 인스턴스의 타입을 확인하고 그 인스턴스를 같은 계층에 있는 다른 클래스로 캐스팅할 수 있습니다. Any 또는 AnyObject 타입에서 알고 있는 상수나 변수의 특정 타입을 찾으려면, switch문에서 is 또는 as 패턴을 사용할 수 있습니다. Type Casting 타입 캐스팅(Type Casting)은 인스턴스의 타입을 체크하거나 해당 인스턴스를 인스턴스 자신의 클래스 계층에서 다른 슈퍼클래스 또는 서브클래스로 처리하는 방법입니다. Swift에서 타입 캐스팅은 is와 as 연산자로 구현됩니다. 이 두 연산자는 값의 타입을 체크하거나 다른 타입으로 그 값을 캐스팅하는 간단하고 효과적인 방법입니다. Defining..

[Swift] 공식 문서 - 동시성(Concurrency)

새로 배운 점 동시성이 필요한 코드에서 Swift 언어 수준에서 제공하는 동시성을 사용하면 Swift가 컴파일 타임에 문제를 잡는데 도움을 줄 수 있습니다. Swift의 동시성 모델은 Thread 위에서 구축되었지만, 직접 상호작용 하지는 않습니다. 비동기 메서드 내부에서 실행 흐름은 오직 다른 비동기 메서드를 호출할 때만 일시 정지되는데, 일시중지는 암시적이거나 우선적이지 않기 때문에 가능한 모든 일시중지 지점은 await로 표시됩니다. await 키워드가 사용된 코드는 실행을 일시 중지할 수 있어야 하기 때문에, 프로그램의 특정 장소에서만 비동기 함수나 메서드를 호출할 수 있습니다. 비동기 함수, 메서드, 프로퍼티의 본문에 있는 코드 @main으로 표시된 구조체, 클래스, 열거형의 static mai..

반응형