메모리 안전
메모리 접근 충돌은 서로 다른 코드에서 동시에 같은 위치의 메모리에 접근할 때 발생한다.
이 충돌을 일으키는 메모리 접근에는 세 가지 특성이 있다. 세 가지 조건에 모두 해당하는 메모리 접근이 두 군데 이상의 코드에서 동시에 일어나면 충돌이 발생한다.
접근 타이밍이 겹치게 되는 대표적 순간은 함수나 메서드에서 inout을 사용한 입출력 매개변수를 사용하는 경우나 구조체에서 mutating 키워드를 사용해 가변 메서드를 사용하는 경우이다.
불명확타입은 반환할 타입의 정확한 타입을 알려주지 않은채 반환한다는 뜻이다. 반환 타입 위치에 프로토콜을 쓰면서 앞에 some 을 붙이면 '이 프로토콜을 준수하는 어떤 타입중에 하나이다' 라는 뜻이다.
제네릭과 유사하지만 제네릭은 어떤 타입이 들어올지 모르는 상태로 플레이스 홀더를 만들지만, 불명확 타입은 반대로 와부에서 어떤 타입이 나에게 반환될지를 모른다.
struct PrizeMachine {
func ABC() -> some AB { // AB라는 프로토콜을 준수하는 어떠한 타입을 명시
.
.
.