Swift 127

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

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

[Swift] async / await 간단 정리 & 실습

서론 async / await에 대한 Swift 가이드를 읽으면서 한숨이 푹 나왔습니다. 이게 무슨 말인지 모르겠고... 단어도 어렵고 ㅎㅎ;; async / await에 대해 따로 정리해야할 필요성을 느껴 포스팅을 하게 되었습니다. 아마 async / await와 task, actor에 대한 것은 꾸준히 공부하면서 글을 작성할 듯 합니다. 아무튼 이번 포스팅은 깊은 개념 정리가 아니라 간단 정리로 생각해주시면 감사하겠습니다. 동시에 간단 실습도 함께 진행합니다! async / await에 대한 Swift 가이드는 여기에서 확인할 수 있습니다. async / await 탄생 배경 async / await는 비동기를 처리하는 기능입니다. 기존에는 completion handler는 에러일 때 complet..

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

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

[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] Initialization 실습

선행 포스팅 이번 포스팅은 초기화(Initialization)을 실습하는 내용입니다. Initialization 문서가 너무 길더군요... 문장도 어렵고 내용도 많다보니 최근 포스팅 중 가장 힘들었습니다 ㅎㅎ; 말로만 이해하기엔 붕 뜨는 개념이 있어 실습하면서 이해하기로 했습니다. let 초기화 저는 지금까지 let은 반드시 선언과 동시에 초기화를 해줘야 한다고 생각했습니다. 근데 init() 안에서 초기화를 해줘도 되더라고요.. 너무 당연히 안 될 거라고 생각했는데 세상에 "당연히"라는 것은 없다는 것을 또 한 번 느꼈습니다. class Human { let name: String init(name: String) { self.name = name } } var human: Human = Human(n..

[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] Method와 Subscripts 실습하기

선행 포스팅 Swift 레퍼런스 중 Methods와 Subscripts 내용을 번역한 포스팅입니다. 자세한 개념 설명은 위 두 개의 포스팅에서 다루었고, 문서의 내용 중 몇 가지를 직접 실습해보겠습니다. mutating 실습 mutating 키워드는 구조체나 열거형에서만 사용 가능합니다. class에서 mutating을 쓰면 컴파일 에러가 발생해요. 원래 구조체나 열거형의 메서드 안에서 자신의 프로퍼티를 수정할 수 없습니다. 만약 수정을 시도하면 이렇게 mutable 하지 않다는 에러가 뜹니다. 에러를 펼쳐보면 mutable하게 만들라고 하면서 Fix 를 지원하는데요. 여기서 Fix를 누르면 struct SomeClass { var value: Int = 0 mutating func increase() ..

반응형