Swift/Swift 가이드 28

[Swift] 공식 문서 - 에러 핸들링(Error Handling)

새로 배운 점 Swift는 런타임 에러를 처리하기 위해 throwing, catching, propagting, manipulating을 지원하는 일급 클래스(first-class)를 제공합니다. Swift에서 에러는 Error 프로토콜을 준수하는 타입의 값으로 표현됩니다. Swift에서 에러 처리를 많은 계산이 필요할 수 있는 Call Stack Unwinding과 관련이 없다는 것입니다. 에러를 반환하는 throw문은 일반적인 return과 비슷한 성능을 보여줍니다. throws 키워드가 붙은 함수는 throwing function 이라고 부릅니다. 만약 catch절이 패턴을 가지고 있지 않다면, 이 catch절은 모든 에러와 일치하고 해당 에러를 error라는 로컬 상수로 바인딩합니다. defer문..

[Swift] 공식 문서 - 옵셔널 체이닝(Optional Chaining)

새로 배운 점 옵셔널 체이닝은 2계층 이상의 프로퍼티나 메서드, 서브스크립트를 호출할 때에도 사용할 수 있습니다. 옵셔널 체이닝을 사용하여 옵셔널 값에 대해 메서드를 호출하고 그 메서드 호출이 성공했는지 확인할 수 있습니다. 이 방법은 메서드의 반환값이 정의되지 않은 경우에도 사용할 수 있습니다. 메서드의 리턴 값에 추가 옵셔널 체이닝을 사용하고 싶다면, 물음표를 메서드의 괄호 뒤에 적으면 됩니다. Optional Chaining 옵셔널 체이닝(Optional Chaining)은 현재 nil일 수도 있는 옵셔널 프로퍼티, 메서드, 서브스크립트를 참조하고 호출하는 과정입니다. 만약 옵셔널이 값을 가지고 있다면 프로퍼티, 메서드, 서브스크립트는 성공적으로 호출됩니다. 만약 nil이라면 nil을 반환합니다. ..

[Swift] 공식 문서 - 인스턴스 해제(Deinitialization)

새로 배운 점 슈퍼 클래스의 소멸자는 슈퍼클래스의 서브클래스에 의해 상속되고, 슈퍼클래스의 소멸자는 자동으로 서브클래스의 소멸자의 끝에 호출됩니다. Deinitialization Deinitialization는 클래스 인스턴스가 해제될 때 즉시 호출됩니다. Deinitialization는 deinit 키워드를 사용하여 작성할 수 있으며, init 키워드를 사용하여 이니셜라이저를 작성하는 방법과 유사합니다. Deinitialization는 오직 class 타입에서만 사용할 수 있습니다. How Deinitialization Works Swift는 인스턴스가 더이상 필요 없을 때 자동으로 인스턴스를 할당 해제하여 리소스를 해제합니다. Swift는 인스턴스의 메모리 관리를 Automatic Reference ..

[Swift] 공식 문서 - 초기화(Initialization)

새로 배운 점 상수 프로퍼티는 이니셜라이저 안에서도 초기화할 수 있다. 구조체의 기본 이니셜라이저가 Memberwise Initializers라는 이름이라는 것 designated 이니셜라이저는 해당 클래스가 직접 상속받는 슈퍼클래스의 designated 이니셜라이저를 호출해야 한다. convenience 이니셜라이저는 같은 클래스의 다른 이니셜라이저만 호출해야 한다. convenience 이니셜라이저는 궁극적으로 designated 이니셜라이저를 호출해야 한다. Swift의 컴파일러는 2단계 초기화를 에러 없이 완료하기 위해 4가지 safety-check를 수행한다. 서브클래스에서 새로 추가한 모든 프로퍼티에 기본값이 지정되면, 두 가지 규칙이 적용된다. 만약 서브클래스가 어떠한 designated 이..

[Swift] 공식 문서 - 상속(Inheritance)

새로 배운 점 다른 클래스로부터 상속받지 않은 클래스를 기본 클래스(base class)라고 한다. someIndex로 오버라이딩된 서브스크립트는 오버라이딩된 서브스크립트 내부에서 super[someIndex]로 슈퍼클래스의 서브스크립트에 접근할 수 있다. Inheritance 클래스는 다른 클래스로부터 메서드, 프로퍼티, 특징들을 상속받을 수 있습니다. 다른 클래스로부터 상속을 받을 때, 상속을 받는 클래스는 subclass라고 하고, 상속을 하는 클래스는 superclass라고 합니다. Swift의 클래스는 그 클래스의 superclass에 속하는 메서드, 속성, 서브스크립트를 호출하거나 접근할 수 있고, 메서드, 속성, 서브스크립트를 오버라이딩(overriding)할 수 있습니다. Swift는 오버..

[Swift] 공식 문서 - Subscripts

* 완벽한 번역이 아닌 내용을 한 줄 한 줄 읽는 것에 의의를 두었습니다. * 파파고의 힘을 빌려 번역했으며 잘못된 번역이 있다면 댓글로 알려주세요. 새로 배운 점 클래스, 구조체, 열거형은 서브스크립트(subscripts)를 정의할 수 있다. 서브 스크립트를 사용하면 다른 메서드 없이 인덱스를 사용하여 값을 설정하고 검색할 수 있다. subscript 키워드로만 서브스크립트를 정의 가능하다. 클래스와 구조체는 필요한 만큼의 서브스크립트를 구현할 수 있다. 여러 개의 서브스크립트를 정의하는 것을 subscript overloading이라고 한다. 사용자 타입에 맞춰 여러 개의 파라미터를 받는 서브스크립트를 정의할 수도 있다. 서론 클래스, 구조체, 열거형은 서브스크립트(subscripts)를 정의할 수 ..

[Swift] 공식 문서 - Methods

* 완벽한 번역이 아닌 내용을 한 줄 한 줄 읽는 것에 의의를 두었습니다. * 파파고의 힘을 빌려 번역했으며 잘못된 번역이 있다면 댓글로 알려주세요. 새로 배운 점 mutating 메서드는 self 프로퍼티에 완전히 새로운 인스턴스를 할당할 수 있다. 열거형에서 mutating 메서드는 암시적 self를 같은 열거형의 다른 case로 설정할 수 있다. 메서드의 결과를 사용하지 않을 때 @discardableResult를 붙이면 "Result of call to ~~~ is unused" 경고를 표시하지 않는다. 서론 메서드는 클래스, 구조체, 열거형 안에 정의되는 함수(function)입니다. 메서드는 인스턴스 메서드와 타입 메서드를 정의할 수 있습니다. 인스턴스 메서드는 특정 작업 및 기능을 캡슐화하여..

[Swift] 공식 문서 - Properties (속성)

안녕하세요. 개발하는 정주입니다. 오늘은 "Properties (속성)"를 정리해보겠습니다. * 완벽한 번역이 아닌 내용을 한 줄 한 줄 읽는 것에 의의를 두었습니다. * 파파고의 힘을 빌려 번역했으며 잘못된 번역이 있다면 댓글로 알려주세요. 새로 배운 점 lazy 속성은 동시에 여러 개의 쓰레드가 접근할 경우 중복으로 초기화가 될 가능성이 있다는 점 Objective-C와 Swift의 클래스 인스턴스 값과 참조를 저장하는 방법이 다르다는 점 => Swift가 훨씬 단순화 되었다는 점 computed propety가 실제로는 저장이 안 된고 계산만 한다는 점 Observers willSet, didSet이 Property Observer라는 카테고리(?)라는 점 옵저버를 가진 속성을 in-out 매개 변..

[Swift] 공식 문서 - 구조체와 클래스 (Structures and Classes)

안녕하세요. 개발하는 정주입니다. 오늘은 구조체와 클래스 (Structures and Classes)를 정리해보겠습니다. * 완벽한 번역이 아닌 내용을 한 줄 한 줄 읽는 것에 의의를 두었습니다. * 파파고의 힘을 빌려 번역했으며 잘못된 번역이 있다면 댓글로 알려주세요. 새로 배운 점 구조체 및 클래스를 인터페이스 파일과 구현 파일로 분리하지 않는 것이 Swift만의 특징이라는 사실 object라는 단어가 클래스 인스턴스만을 지칭한다는 사실 struct를 더 많이 사용하는 이유가 클래스의 추가적인 기능때문이라는 점 구조체나 클래스에서 UpperCamelCase, lowerCamelCase를 맞추는 행위가 표준 스위프트 타입과 일치하려고 하는 것이라는 점 콜렉션은 복사 성능 비용을 감소시키려고 최적화 한다..

[Swift] 공식 문서 - 열거형 (Enumerations)

안녕하세요. 개발하는 정주입니다. 오늘은 열거형 (Enumerations)를 정리해보겠습니다. * 완벽한 번역이 아닌 내용을 한 줄 한 줄 읽는 것에 의의를 두었습니다. * 파파고의 힘을 빌려 번역했으며 잘못된 번역이 있다면 댓글로 알려주세요. 새로 배운 점 열거형 타입은 ‘복수형 (plural) 보단 단수형 (singular)’ 이름을 부여해야 명확하다는 점 CaseIterable를 채택함으로서 모든 케이스 집합체를 가질 수 있다는 점 Associated Values에 대한 내용 case 이름 앞에 var 나 let annotation을 하나만 적어도 된다는 점 원시 값으로 문자열을 사용할 땐 그 case 이름에 있는 문장이 각 case 의 암시적인 값이 된다는 점 열거형 initializer는 nil..

반응형