[번역] Copyable (애플 공식 문서)

삭제된 Velog·2024년 9월 29일
0

Swift

목록 보기
2/5
post-thumbnail

본 글은 Copyable (애플 공식 문서)를 한국어로 번역하여 옮긴 글입니다.

값이 암시적으로나 명시적으로 복사되어질 수 있는 타입

iOS 8.0+ | iPadOS 8.0+ | Mac Catalyst 13.0+ | macOS 10.10+ | visionOS 1.0+ | watchOS 2.0+

protocol Copyable

Overview

이 프로토콜을 준수하는 건 타입의 값이 복사되어질 수 있다는 것을 나타내며, 요구되는 어떠한 메서드나 프로퍼티가 없습니다. 일반적으로 Copyable 프로토콜을 준수한다고 명시적으로 작성해줄 필요는 없습니다. 아래 경우에는 암시적으로 Copyable 프로토콜 준수를 포함합니다.

  • 복사 불가능한(non-copyable) 저장 프로퍼티를 가지지 않는 구조체 선언

  • 복사 불가능한 연관 값이 포함된 케이스를 가지지 않는 열거형 선언

  • 클래스 선언

  • 액터 선언

  • 프로토콜 선언

  • 연관된 타입(associated type) 선언

  • 프로토콜 확장에서 Self 타입

  • 확장에서 확장되는 타입의 제네릭 매개변수

클래스나 액터는 복사 불가능한 저장 프로퍼티를 포함하면서도 자체적으로 복사 가능할(copyable) 수 있습니다. 클래스와 액터는 참조를 유지하고 해제함으로써 복사가 이뤄집니다.

제네릭 타입 매개변수를 포함하는 선언에서, 각 제네릭 타입 매개변수는 암시적으로 Copyable을 요구 사항 목록으로 포함합니다. 복사 가능한 타입의 메타 타입과 튜플 또한 암시적으로 복사 가능하며, 박스형 프로토콜 타입도 마찬가지입니다. 예를 들어, 아래 선언 쌍은 모두 동일합니다.

struct MyStructure { }
struct MyStructure: Copyable { }

protocol MyProtocol { }
protocol MyProtocol: Copyable { }

protocol AnotherProtocol {
	associatedtype MyType
    associatedtype MyType: Copyable
}

func genericFunction<T>(t: T) { }
func genericFunction<T>(t: T) where T: Copyable { }

let x: any MyProtocol
let x: any MyProtocol & Copyable

암시적인 Copyable 프로토콜 준수를 막으려면, ~Copyable을 작성하세요. 예를 들어, 위 예제에서 오직 복사 가능한 타입만 MyProtocol 프로토콜을 준수할 수 있는데, 복사가 가능하거나 불가능한 타입 모두 아래 예제의 NoRequirements 프로토콜을 준수할 수 있습니다.

protocol NoRequirements: ~Copyable { }

Copyable 프로토콜에 대한 확장은 허용하지 않습니다.

참고 자료

profile
rlarjsdn3.github.io

0개의 댓글