[Swift] 공식 문서 - 프로토콜(Protocols) - 1
·
Swift/Swift 가이드
* Protocols 가이드는 너무 길어서 두 편으로 나눠 포스팅합니다. 2편은 여기에서 볼 수 있습니다. 최하단에도 링크를 적어두었습니다. 새로 배운 점 구현해야 하는 요구사항을 지정하는 것 이외에도 이러한 요구사항 중의 일부를 구현하거나 추가 기능을 구현하도록 프로토콜을 확장할 수도 있습니다. Property 요구사항(requirements)은 항상 var 키워드를 앞에 붙여서 변수 프로퍼티로 선언합니다. 프로토콜에서 메서드들은 메서드의 body와 괄호를 제외하고 나머지를 작성합니다. 프로토콜에서 메서드는 가변 매개변수는 허용하지만 기본값은 설정할 수 없습니다. 프로토콜에 mutating을 사용한 경우, 이 프로토콜을 따르는 클래스를 구현할 때는 mutating을 명시하지 않아도 됩니다. 프로토콜을 ..
[Swift] 공식 문서 - 익스텐션(Extensions)
·
Swift/Swift 가이드
새로 배운 점 익스텐션은 원본 코드를 건들지 않고 타입을 확장할 수 있는 기능이며, retroactive 모델링이라고 합니다. 익스텐션은 Objective-C의 카테고리와 유사합니다. 익스텐션으로 designated 이니셜라이저 또는 deinitializer는 추가할 수 없습니다. 만약 익스텐션을 사용하여 모든 저장 프로퍼티에 기본 값이 설정되어 있고, 어떠한 커스텀 이니셜라이저를 정의하지 않은 값 타입에 이니셜라이저를 추가하면, 익스텐션 이니셜라이저에서 기본 이니셜라이저와 멤버와이즈 이니셜라이저를 호출 할 수 있습니다. 만약 익스텐션을 사용하여 다른 모듈에서 선언된 구조체에 이니셜라이저를 추가하면, 새로운 이니셜라이저는 모듈에 정의된 이니셜라이저를 호출하기 전까지 self에 접근할 수 없습니다. 익스텐..
[Swift] 공식 문서 - 중첩 타입(Nested Types)
·
Swift/Swift 가이드
새로 배운 점 Swift는 중첩 타입(Nested Types)를 정의할 수 있습니다. 즉, 지원하는 타입의 정의 내에서 클래스, 구조체, 열거형을 중첩할 수 있습니다. Nested Types 열거형은 종종 특정 클래스나 구조체 기능을 지원하기 위해 만들어지기도 합니다. 보다 복잡한 타입의 Context 내에서 사용하기 위해서는 유틸리티 클래스 및 구조체를 정의하는 것이 편리할 수 있습니다. 이를 위해 Swift는 중첩 타입(Nested Types)를 정의할 수 있습니다. 즉, 지원하는 타입의 정의 내에서 클래스, 구조체, 열거형을 중첩할 수 있습니다. 타입을 다른 타입에 중첩키시려면 지원하는 타입의 외부 중괄호 안에 해당 정의를 작성하면 됩니다. 타입은 필요한만큼 중첩할 수 있습니다. Nested Typ..
[Swift] 공식 문서 - 타입 캐스팅(Type Casting)
·
Swift/Swift 가이드
새로 배운 점 클래스와 서브클래스의 계층 구조가 있는 타입 캐스팅을 사용하여 특정 클래스 인스턴스의 타입을 확인하고 그 인스턴스를 같은 계층에 있는 다른 클래스로 캐스팅할 수 있습니다. Any 또는 AnyObject 타입에서 알고 있는 상수나 변수의 특정 타입을 찾으려면, switch문에서 is 또는 as 패턴을 사용할 수 있습니다. Type Casting 타입 캐스팅(Type Casting)은 인스턴스의 타입을 체크하거나 해당 인스턴스를 인스턴스 자신의 클래스 계층에서 다른 슈퍼클래스 또는 서브클래스로 처리하는 방법입니다. Swift에서 타입 캐스팅은 is와 as 연산자로 구현됩니다. 이 두 연산자는 값의 타입을 체크하거나 다른 타입으로 그 값을 캐스팅하는 간단하고 효과적인 방법입니다. Defining..
[Swift] async / await 간단 정리 & 실습
·
Swift/개념 & 응용
서론 async / await에 대한 Swift 가이드를 읽으면서 한숨이 푹 나왔습니다. 이게 무슨 말인지 모르겠고... 단어도 어렵고 ㅎㅎ;; async / await에 대해 따로 정리해야할 필요성을 느껴 포스팅을 하게 되었습니다. 아마 async / await와 task, actor에 대한 것은 꾸준히 공부하면서 글을 작성할 듯 합니다. 아무튼 이번 포스팅은 깊은 개념 정리가 아니라 간단 정리로 생각해주시면 감사하겠습니다. 동시에 간단 실습도 함께 진행합니다! async / await에 대한 Swift 가이드는 여기에서 확인할 수 있습니다. async / await 탄생 배경 async / await는 비동기를 처리하는 기능입니다. 기존에는 completion handler는 에러일 때 complet..
[Swift] 공식 문서 - 동시성(Concurrency)
·
Swift/Swift 가이드
새로 배운 점 동시성이 필요한 코드에서 Swift 언어 수준에서 제공하는 동시성을 사용하면 Swift가 컴파일 타임에 문제를 잡는데 도움을 줄 수 있습니다. Swift의 동시성 모델은 Thread 위에서 구축되었지만, 직접 상호작용 하지는 않습니다. 비동기 메서드 내부에서 실행 흐름은 오직 다른 비동기 메서드를 호출할 때만 일시 정지되는데, 일시중지는 암시적이거나 우선적이지 않기 때문에 가능한 모든 일시중지 지점은 await로 표시됩니다. await 키워드가 사용된 코드는 실행을 일시 중지할 수 있어야 하기 때문에, 프로그램의 특정 장소에서만 비동기 함수나 메서드를 호출할 수 있습니다. 비동기 함수, 메서드, 프로퍼티의 본문에 있는 코드 @main으로 표시된 구조체, 클래스, 열거형의 static mai..
[Swift] 공식 문서 - 에러 핸들링(Error Handling)
·
Swift/Swift 가이드
새로 배운 점 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)
·
Swift/Swift 가이드
새로 배운 점 옵셔널 체이닝은 2계층 이상의 프로퍼티나 메서드, 서브스크립트를 호출할 때에도 사용할 수 있습니다. 옵셔널 체이닝을 사용하여 옵셔널 값에 대해 메서드를 호출하고 그 메서드 호출이 성공했는지 확인할 수 있습니다. 이 방법은 메서드의 반환값이 정의되지 않은 경우에도 사용할 수 있습니다. 메서드의 리턴 값에 추가 옵셔널 체이닝을 사용하고 싶다면, 물음표를 메서드의 괄호 뒤에 적으면 됩니다. Optional Chaining 옵셔널 체이닝(Optional Chaining)은 현재 nil일 수도 있는 옵셔널 프로퍼티, 메서드, 서브스크립트를 참조하고 호출하는 과정입니다. 만약 옵셔널이 값을 가지고 있다면 프로퍼티, 메서드, 서브스크립트는 성공적으로 호출됩니다. 만약 nil이라면 nil을 반환합니다. ..
[Swift] Initialization 실습
·
Swift/개념 & 응용
선행 포스팅 이번 포스팅은 초기화(Initialization)을 실습하는 내용입니다. Initialization 문서가 너무 길더군요... 문장도 어렵고 내용도 많다보니 최근 포스팅 중 가장 힘들었습니다 ㅎㅎ; 말로만 이해하기엔 붕 뜨는 개념이 있어 실습하면서 이해하기로 했습니다. let 초기화 저는 지금까지 let은 반드시 선언과 동시에 초기화를 해줘야 한다고 생각했습니다. 근데 init() 안에서 초기화를 해줘도 되더라고요.. 너무 당연히 안 될 거라고 생각했는데 세상에 "당연히"라는 것은 없다는 것을 또 한 번 느꼈습니다. class Human { let name: String init(name: String) { self.name = name } } var human: Human = Human(n..
[Swift] 공식 문서 - 인스턴스 해제(Deinitialization)
·
Swift/Swift 가이드
새로 배운 점 슈퍼 클래스의 소멸자는 슈퍼클래스의 서브클래스에 의해 상속되고, 슈퍼클래스의 소멸자는 자동으로 서브클래스의 소멸자의 끝에 호출됩니다. Deinitialization Deinitialization는 클래스 인스턴스가 해제될 때 즉시 호출됩니다. Deinitialization는 deinit 키워드를 사용하여 작성할 수 있으며, init 키워드를 사용하여 이니셜라이저를 작성하는 방법과 유사합니다. Deinitialization는 오직 class 타입에서만 사용할 수 있습니다. How Deinitialization Works Swift는 인스턴스가 더이상 필요 없을 때 자동으로 인스턴스를 할당 해제하여 리소스를 해제합니다. Swift는 인스턴스의 메모리 관리를 Automatic Reference ..
유정주
'Swift' 카테고리의 글 목록 (7 Page)