Apple 에서 공개한 The Swift Programming Language (Swift 5.7) 책의 Document Revision History 부분1을 번역하고, 주석을 달아서 정리한 글입니다. 전체 번역은 Swift 5.7: Swift Programming Language (스위프트 프로그래밍 언어) 에서 확인할 수 있습니다.
@Sendable
과 @unchecked
특성 정보를 Sendable (보내기 가능함) 과 unchecked (검사 안함) 절에 추가함.if
-let
에 대한 정보를Optional Binding (옵셔널 연결) 절에 추가함.#unavailable
에 대한 정보를 Checking API Availability (API 사용 가능성 검사하기) 절에 추가함.#if
의 사용에 대한 정보를 가지고 Explicit Member Expression (명시적 멤버 표현식) 절을 업데이트함.await
연산자) 절에 추가함.Comparable
의 통합된 구현에 대한 정보를 Adopting a Protocol Using a Synthesized Implementation (통합 구현을 사용하여 프로토콜 채택하기) 절에 추가함.where
절’ 을 작성할 수 있음.@main
특성 (attribute)’ 에 대한 정보를 main (메인) 절에 추가함.#filePath
를 Literal Expression (글자 값 표현식) 절에 추가했으며, #file
에 대한 ‘논의 (discussion)’ 를 업데이트함.self
를 참조할 수 있음.catch
절’ 은 ‘여러 개의 에러 (multiple errors)’ 와 맞춰볼 수 있음.Any
에 대한 더 많은 정보를 추가했으며 이를 새로 Any Type (‘Any’ 타입) 부분으로 옮김.Self
를 더 많은 상황에서 사용할 수 있음.return
을 생략한 함수에 대한 정보를 가진 Functions With an Implicit Return (암시적으로 반환하는 함수) 와 Shorthand Getter Declaration (짧게 줄인 획득자 선언) 부분을 추가함.macCatalyst
를 추가함.Self
는 현재의 클래스, 구조체, 또는 열거체 선언에서 도입한 타입을 참조하기 위해 사용할 수 있음.dynamicCallable
특성을 사용하여 함수처럼 동적으로 호출하는 인스턴스에 대한 정보를 가진 dynamicCallable (동적으로 호출 가능) 부분을 추가함.unknown
이라는 ‘switch 문의 case 절’ 특성을 사용하는 것에 대한 정보를 가진 unknown (알려지지 않음) 과 Switching Over Future Enumeration Cases (미래의 열거체 case 를 전환하기) 부분을 추가함.\.self
)’ 에 대한 정보를 Key-Path Expression (키-경로 표현식) 절에 추가함.<
)’ 를 사용하는 것에 대한 정보를 Conditional Compilation Block (조건부 컴파일 블럭) 절에 추가함.#error
와 #warning
에 대한 정보를 Compile-Time Diagnostic Statement (컴파일-시간 진단문) 절에 추가함.inlinable
과 usableFromInline
특성에 추가함.dynamicMemberLookup
특성에 추가함.requires_stored_property_inits
과 warn_unqualified_access
특성에 대한 정보를 Declaration Attributes (선언 특성) 절에 추가함.#dsohandle
에 대한 정보를 Literal Expression (글자 값 표현식) 절에 추가함.canImport()
와 targetEnvironment()
‘플랫폼 조건 (platform conditions)’ 에 대한 정보를 Conditional Compilation Block (조건부 컴파일 블럭) 에 추가함.where
절’ 을 사용하여 ‘결합 타입’ 을 구속할 수 있음.objc
특성에 대한 논의를 갱신했으며, 이제 이 특성의 추론은 더 적은 곳에서 이뤄짐.final
은 여기서 허용되지 않음.available
특성을 스위프트 언어 버전에 사용하는 것에 대하여 Declaration Attributes (선언 특성) 절에 정보를 추가함.type(of:)
는 스위프트 표준 라이브러리 함수임.unowned
, unowned(safe)
, 및 unowned(unsafe)
선언 수정자에 대한 정보를 추가함.Any
타입인 값이 예상될 때 옵셔널 값을 사용하는 것에 대하여 Type Casting for Any and AnyObject (Any 와 AnyObject 의 타입 변환) 에 기록을 추가함.open
과 fileprivate
접근-수준 수정자에 대한 정보를 Access Control (접근 제어) 장에 추가함.inout
이 매개 변수의 이름 앞이 아니라 매개 변수의 타입 앞에 나타남에 주목하기 위해 Function Declaration (함수 선언) 부분의 논의를 업데이트함.@noescape
와 @autoclosure
에 대한 논의를 갱신했으며 이제 이들은, ‘선언 특성’ 이 아니라, ‘타입 특성’ 임.ErrorProtocol
대신 Error
를, 그리고 StringLiteralConvertible
대신 ExpressibleByStringLiteral
같은 프로토콜 이름을 사용하도록 전체에 걸쳐서 논의를 업데이트함.where
절’ 은 선언의 끝에 작성함.if
, while
, 그리고 guard
문은 where
절 없이 쉼표로-구분된 조건 목록을 사용함.Protocol1 & Protocol2
을 사용하기 위해 Protocols (프로토콜; 규약) 장의 Protocol Composition (프로토콜 합성) 부분과 Types (타입) 장의 Protocol Composition Type (프로토콜 합성 타입) 절에 있는 ‘프로토콜 합성 타입 (protocol composition types)’ 에 대한 논의를 업데이트함.type(of:)
를 사용하기 위해 ‘동적 타입 표현식 (Dynamic Type Expression)’2 절에 있는 논의를 업데이트함.#sourceLocation(file:line:)
구문 표현을 사용하기 위해 ‘라인 제어 구문’ 에 대한 논의를 업데이트함.Never
를 사용하기 위해 Functions that Never Return (절대 반환하지 않는 함수) 에 있는 논의를 업데이트함.@IBAction
, @IBOutlet
, 그리고 @NSManaged
특성은 @objc
특성을 내포하고 있음에 주목하기 위해 Attributes (특성) 장을 갱신함@GKInspectable
특성에 대한 정보를 Declaration Attributes (선언 특성) 절에 추가함.let
을 명시적으로 사용하는 것에 대한 논의를 Function Declaration (함수 선언) 절에서 제거함.Boolean
프로토콜에 대한 논의를 Statements (구문) 장에서 제거했으며, 이제 이 프로토콜은 스위프트 표준 라이브러리에서 제거된 것임.@NSApplicatinMain
특성에 대한 논의를 올바르게 바로 잡음.#selector
구문 표현에 대한 정보를 Selector Expression (선택자 표현식) 절에 추가함.associatedtype
키워드를 사용하기 위한 ‘결합 타입 (associated types)’ 에 대한 논의를 업데이트함.nil
을 반환하는 초기자에 대한 정보를 업데이트함.@objc
특성을 사용할 수 있다는 것에 주목하기 위해 Declaration Attributes (선언 특성) 절에 있는 논의를 업데이트함.for
반복문과, ++
접두사 및 접미사 연산자, 그리고 --
접두사 및 접미사 연산자에 대한 논의를 제거함.@noescape
특성에 대한 정보를 가진 Escaping Closures (벗어나는 클로저) 부분을 추가함.??
연산자를 사용하는 것에 대한 예제를 A Swift Tour (스위프트 둘러보기) 장에 추가함.ErrorType
프로토콜을 준수할 수 있음.try?
키워드에 대한 정보를 Converting Errors to Optional Values (에러를 옵셔널 값 변환하기) 절에 추가함.guard
문에 대한 정보를 Control Flow (제어 흐름) 장의 Early Exit (때 이른 탈출문) 부분과 Statements (구문) 장의 Guard Statement (‘guard’ 문) 절에 추가함.repeat
-while
반복문에 대한 정보를 가지고 Repeat-While (Repeat-While 문) 절을 업데이트함.String
은 더 이상 스위프트 표준 라이브러리의 CollectionType
프로토콜을 준수하지 않음.print(_:separator:terminator)
함수에 대한 정보를 Printing Constants and Variables (상수와 변수 인쇄하기) 절에 추가함.String
원시 값을 가지는 열거체 ‘case 값’ 의 작동 방식에 대한 정보를 Enumerations (열거체) 장의 Implicitly Assigned Raw Values (암시적으로 할당되는 원시 값) 부분과 Declarations (선언) 장의 Enumerations with Cases of a Raw-Value Type (원시-값 타입의 case 를 가지는 열거체) 절에 추가함.@autoclosure
특성에 대한 정보를-그의 @autoclosure(escaping)
형식을 포함하여-Autoclosures (자동 클로저) 절에 추가함.@available
과 @warn_unused_result
특성에 대한 정보를 가지고 Declaration Attributes (선언 특성) 절을 업데이트함.@convention
특성에 대한 정보를 가지고 Type Attributes (타입 특성) 절을 업데이트함.where
절로 ‘다중 옵셔널 연결 (multiple optional bindings)’ 을 사용하는 예제를 Optional Binding (옵셔널 연결) 절에 추가함.+
연산자를 사용하여 문자열 글자 값을 서로 잇는 것이 컴파일 시간에 이루진다는 것에 대하여 String Literals (문자열 글자 값) 절에 정보를 추가함.@NSManaged
특성에 대한 논의를 갱신했으며, 이제 이 특성은 정해진 인스턴스 메소드에 적용할 수 있음.@objc
특성을 클래스에 적용할 수 있는 지를 설명하기 위해 Declaration Attributes (선언 특성) 절을 업데이트함.throw
문의 실행 성능에 대하여 Handling Errors (에러 처리하기) 절에 기록을 추가함. Do Statement (‘do’ 문) 절에 있는 do
문에 대하여 비슷한 정보를 추가함.willSet
과 didSet
관찰자의 작동 방식을 분명하게 밝히기 위해 Property Observers (속성 관찰자) 절에 있는 기록을 업데이트함.private
접근의 영역에 대한 정보를 가지고 Access Levels (접근 수준) 절에 기록을 추가함.Set
‘집합체 (collection)’ 타입을 가집니다. 더 많은 정보는, Sets (셋) 를 보도록 합니다.@autoclosure
는 이제, 매개 변수의 타입이 아니라, 매개 변수 선언의 특성입니다. 새로운 매개 변수 선언 특성인 @noescape
도 있습니다. 더 많은 정보는, Declaration Attributes (선언 특성) 를 보도록 합니다.static
키워드를 ‘선언 수정자’ 로 사용합니다. 더 많은 정보는 Type Variable Properties (타입 변수 속성) 을 보도록 합니다.as?
와 as!
라는 ‘실패 가능한 내림 변환 연산자 (failable downcast operators)’ 를 포함합니다. Checking for Protocol Conformance (프로토콜 준수성 검사하기) 를 보도록 합니다.&/
)’ 와 ‘값 넘침 나머지 (overflow remainder; &%
)’ 연산자를 제거함.if
문에 나타낼 수 있습니다. 더 많은 정보는, Optional Binding (옵셔널 연결) 을 보도록 합니다.@objc
프로토콜로 제한되지 않습니다.as?
또는 as!
연산자를 사용하며, 실패하지 않는다고 보증한 ‘타입 변환’ 은 as
연산자를 사용합니다. 더 많은 정보는, Type-Casting Operators (타입-변환 연산자) 를 보도록 합니다.Any
타입인 상수와 변수는 이제 함수 인스턴스를 가질 수 있음. switch
문 내에서 함수 타입을 검사하고 변환하는 방법을 보여주기 위해 Type Casting for Any and AnyObject (Any 와 AnyObject 의 타입 변환) 에 있는 예제를 업데이트함.toRaw()
메소드 대신 rawValue
속성을 가지며 fromRaw()
메소드 대신 rawValue
매개 변수를 받는 ‘실패 가능 초기자 (failable initializer)’ 를 가집니다. 더 많은 정보는, Raw Values (원시 값) 과 Enumerations with Cases of a Raw-Value Type (원시-값 타입의 case 를 가지는 열거체) 를 보도록 합니다.?
문자를 가질 수 있음. 개정된 규칙을 설명하기 위해 Operators (연산자) 의 기준을 업데이트함. Custom Operators (사용자 정의 연산자) 에서 유효한 연산자 문자 집합에 대한 중복된 설명을 제거함.String
과 Character
값을 ‘덧셈 연산자 (+
)’ 나 ‘더하기 할당 연산자 (+=
)’ 로 조합할 수 없다는 사실을 반영하기 위해 Concatenating Strings and Characters (문자열과 문자 이어붙이기) 절을 업데이트함. 이러한 연산자들은 이제 String
값에만 사용됨. 단일 Character
값을 문자열 끝에 덧붙이려면 String
타입의 append(_:)
메소드를 사용할 것.availability
특성에 대한 정보를 Declaration Attributes (선언 특성) 절에 추가함.Bool
값’ 과 작업할 때의 혼동을 피하기 위해, 값을 가지고 있을 때는 true
로 그렇지 않을 때는 false
라는 식의 암시적인 평가를 더 이상 하지 않음. 옵셔널이 값을 담고 있는지 알아내려면, 그 대신, nil
인지를 ==
및 !=
연산자로 명시적으로 검사하기 바람.nil
이면 ‘기본 값’ 을 반환하는, Nil-Coalescing Operator (Nil-합체 연산자) (a ?? b
) 를 가짐.+=
연산자로 단일 항목을 배열에 덧붙일 수 없음에 주목하기 위해 Accessing and Modifying an Array (배열 접근 및 수정하기) 절을 업데이트함. 그 대신, append(_:)
메소드를 사용하거나, +=
연산자로 ‘단일-항목의 배열 (single-item array)’ 을 덧붙이도록 함.a...b
와 a..<b
에서 시작 값인 a
는 반드시 끝 값인 b
보다 크면 안된다는 것에 대한 기록을 추가함.description
속성을 재정의하는 방법을 보여주기 위해 재작성됨. (하위 클래스의 초기자에서 상속한 속성의 ‘기본 값’ 을 수정하는 것에 대한 예제는 Initialization (초기화) 장으로 옮김.)override
수정자로 표시해야 함을 알리기 위해 Initializer Inheritance and Overriding (초기자 상속 및 재정의) 절을 업데이트함.required
수정자를 붙여야 하며, ‘필수 초기자’ 의 ‘필수 조건 (requirements)’ 은 ‘자동으로 상속된 초기자’ 로 만족시킬 수 있음을 알리기 위해, Required Initializers (필수 초기자) 절을 업데이트함.@infix
특성을 필수로 요구하지 않음.@prefix
와 @postfix
특성을 prefix
와 postfix
선언 수정자로 교체했음.@assignment
특성을 사용하지 않습니다.operator prefix
가 아니라 prefix operator
라고 작성함.dynamic
선언 수정자에 대한 정보를 추가함.Character
타입은 이제 단일한 ‘유니코드 확장 자소 덩어리 (Unicode extended grapheme cluster)’ 를 나타낸다는 사실을 반영하기 위해 Strings and Characters (문자열과 문자) 장을 업데이트함. 이는 Extended Grapheme Clusters (확장 자소 덩어리) 에 대한 새로운 부분과 Unicode Scalar Values (유니코드 크기 값) 및 Comparing Strings (문자열 비교하기) 에 대한 더 많은 정보를 포함함.n
을 써서, \u{n}
처럼 작성된다는 것을 알리기 위해 String Literals (문자열 글자 값) 절을 업데이트함.NSString length
속성은 이제, utf16count
가 아니라, utf16Count
으로써 스위프트 자체의 Sting
타입에 대응됨.String
타입은 이제 더 이상 uppercaseString
이나 lowercaseString
속성을 가지지 않음. Strings and Characters (문자열과 문자) 에 있던 관련된 부분을 제거했으며, 다양한 코드 예제를 업데이트함.@optional
, @lazy
, @final
, 그리고 @required
특성은 이제 optional
, lazy
, final
, 그리고 required
Declaration Modifiers (선언 수정자) 임...<
를 (“반-닫힌 범위 연산자 (half-closed range operator) 대신”) Half-Open Range Operator (반-열린 범위 연산자) 로 ‘언급 (refer)’ 하도록 전체 책을 업데이트함.Dictionary
는 이제 ‘불리언 (Boolean)’ 속성인 isEmpty
를 가진다는 것을 알리기 위해 Accessing and Modifying a Dictionary (딕셔너리 접근 및 수정하기) 절을 업데이트함.nil
과 ‘불리언 (Boolean)’ 인 true
및 false
는 이제 Literals (글자 값) 임.Array
타입은 이제 온전하게 ‘값 의미 구조 (value semantics)’ 를 가짐. 새로운 접근 방식을 반영하기 위해 Mutability of Collections (집합체의 변경 가능성) 과 Arrays (배열) 에 대한 정보를 업데이트함. 또한 ‘문자열 배열 (strings arrays)’ 및 ‘딕셔너리 (dictionaries)’ 에 대한 할당 및 복사 작동 방식도 분명하게 밝힘.SomeType[]
대신 [SomeType]
으로 작성함.[KeyType : ValueType]
로 작성하는, Dictionary Type Shorthand Syntax (딕셔너리 타입을 짧게 줄인 구문))) 에 대하여 새로운 부분을 추가함.sort(_:_:)
함수’ 대신 ‘전역 sorted(_:_:)
함수’ 를 사용함...
대신 ..<
로 업데이트함.이 글에 대한 원문은 Document Revision History 에서 확인할 수 있습니다. ↩
‘동적 타입 표현식 (Dynamic Type Expression)’ 에 대한 내용은 2017-03-27 일에 공개한 스위프트 3.1 에서 제거되었기 때문에 링크가 없습니다. ↩
‘변수인 함수 인자 (variable function arguments)’ 라는 것은 func someFunction(var argument: String)
처럼 인자에 var
를 붙여서 해당 인자를 변수 처럼 사용하는 것을 말합니다. 스위프트 2.2 부터 사용이 불가능하게 되었습니다. ↩
‘딩뱃 (dingbats)’ 은 조판 시에 사용하는 장식 문자나 공백을 말합니다. 이에 대한 자세한 내용은 위키피디아의 Dingbat 및 딩뱃 항목을 보도록 합니다. ↩
‘스위프트 (Swift)’ 프로그래밍 언어는 2014년 ‘WWDC’ 에서 2014년 6월 2일에 최초로 발표되었습니다. 2014년 8월 18일은 그 이후 최초로 갱신된 내용입니다. ↩
여기서 원문의 ‘canonical’ 을 ‘표준적인’ 이라는 말이 아니라 ‘법적인’ 이라는 말로 옮겼는데, 이는 ‘canon’ 이 원래 ‘교회 법’ 을 의미하는 말이기 때문입니다. ‘법적으로 동등함’ 이 무엇인지에 대해서는 Comparing Strings (문자열 비교하기) 부분을 보도록 합니다. ↩
‘커리 함수 (curried functions)’ 에 대한 내용은 2016-03-21 일에 공개한 스위프트 2.2 에서 제거되었기 때문에 링크가 없습니다. ↩