Swift 127

[Swift] GCD(Grand Central Dispatch) - 1

* GCD 포스팅은 총 2편으로 작성되었습니다. 1편에서는 GCD가 무엇인지, serial/concurrent, sync/async에 대해 알아봅니다. 2편에서는 Dispatch Queue의 종류와 특성에 대해 알아볼 계획입니다. GCD(Grand Central Dispatch)란? Dispatch, also known as Grand Central Dispatch (GCD), contains language features, runtime libraries, and system enhancements that provide systemic, comprehensive improvements to the support for concurrent code execution on multicore hardwa..

[Swift] async/await와 [weak self]

서론 최근 completion handler를 async/await로 리팩토링하면서 [weak self]에 대해 궁금한 점이 생겼습니다. 이번 포스팅은 자세한 내용이 아니라 간단 궁금증 해결(?)인 점 이해해주시고 틀린 점이 있다면 댓글로 알려주시면 감사하겠습니다. completion handler completion Handler는 escaping 클로저를 이용한 비동기 처리 방법입니다. 클로저도 참조 타입 중 하나이기 때문에 클로저에서 self를 사용하게 되면 클로저와 self 사이에 강한 순환 참조가 생기게 됩니다. 강한 순환 참조가 발생하게 되면 ARC에 의해 메모리 해제가 되지 않아 메모리 leak이 발생하게 됩니다. 그래서 문제를 방지하고자 completion handler를 이용할 때는 [w..

[Swift] 공식 문서 - Automatic Reference Counting(ARC)

안녕하세요. 개발하는 정주입니다. 오늘은 "Automatic Reference Counting"를 정리해보겠습니다. * 완벽한 번역이 아닌 내용을 한 줄 한 줄 읽는 것에 의의를 두었습니다. * 파파고의 힘을 빌려 번역했으며 잘못된 번역이 있다면 댓글로 알려주세요. 새로 배운 점 참조 카운트는 클래스의 인스턴스에서만 적용된다. ARC는 메모리 해제 뿐만 아니라 메모리 할당, 추적의 역할도 한다. 약한 참조는 다른 인스턴스의 수명이 더 짧을 때 사용해야 한다. 미소유 참조에 대한 개념 미소유 참조는 다른 인스턴스의 수명이 같거나 더 길 때 사용해야 한다. 모두 nil이 허용되면 weak를 이용해 강한 순환 참조를 방지한다. nil이 허용되는 하나의 속성과 nil이 될 수 없는 다른 속성일 때는 unowne..

[Swift] 공식 문서 - Opaque Types

새로 배운 점 Opaque 리턴 타입을 갖는 함수나 메서드는 리턴 값의 타입 정보를 숨깁니다. 함수의 리턴 타입으로 프로토콜 타입을 사용하는 것은 프로토콜을 준수하는 어떠한 타입을 리턴할 수 있다는 유연성을 제공합니다. 너무 어렵다... Opaque Types 오페이크(Opaque) 리턴 타입을 갖는 함수나 메서드는 리턴 값의 타입 정보를 숨깁니다. 함수의 리턴 타입으로 구체적인 타입을 제공하는 대신에, 리턴 타입은 프로토콜이 제공하는 것으로 묘사될 수 있습니다. 리턴 값의 내부 타입이 private로 남아있을 수 있기 때문에 타입 정보를 숨기는 것은 모듈과 모듈을 호출하는 코드 사이의 경계에서 유용합니다. 타입이 프로토콜인 값을 리턴하는 것과는 달리, opaque 타입은 타입 identity를 유지합니..

[Swift] 공식 문서 - 제네릭(Generics)

새로 배운 점 제네릭은 Swift에서 가장 강력한 기능 중 하나이며, 대부분의 Swift 표준 라이브러리는 제네릭 코드로 빌드됩니다. 하나 이상의 타입 파라미터를 사용할 수 있는데, 각 타입 파라미터는 꺽쇠 괄호 내에서 콤마로 구분해 작성하면 됩니다. 타입 파라미터가 사용되는 제네릭 타입 또는 함수 간의 관계를 내포하는 이름을 사용합니다. 의미있는 관계가 없다면 T, U, V처럼 영문자를 관례로 사용합니다. 제네릭 타입을 확장할 때, 익스텐션(extension)의 정의의 일부로 타입 파라미터 리스트를 제공하지 않아도 됩니다. 원본 타입 정의에서 타입 파라미터 리스트를 익스텐션의 바디 내에서 사용할 수 있고, 원본 타입 파라미터의 이름들은 원본 정의에서의 타입 파라미터를 참조하는데 사용됩니다. 타입 제약은..

[Swift] 프로토콜(Protocols) 간단 실습

서론 이 포스팅은 프로토콜-1과 프로토콜-2를 실습하는 내용입니다. 자세한 개념은 위 두 개의 프로토콜 가이드 포스팅을 참고해 주세요! 참고로... 이번 포스팅에서는 정의와 채택하는 방법을 주로 실습합니다. Delegation 내용이 한 번에 이해하기가 힘들더라고요. 내용도 많고 중요하기도 해서 이 부분은 따로 포스팅하기로 했습니다. 따라서 이번 포스팅은 간단히 어떻게 사용하는지를 알아보는... 초간단 실습 포스팅으로 생각해주시면 감사하겠습니다 ㅎㅎ; 프로토콜 정의와 채택 프로토콜은 메서드와 프로퍼티, 특정 Task나 일부 기능에 적합한 다른 요구사항들의 청사진(상세한 계획)을 정의합니다. 프로토콜 정의는 protocol 키워드를 이용해 가능합니다. protocol SomeProtocol { // pro..

[Swift] 공식 문서 - 프로토콜(Protocols) - 2

* Protocols 가이드 1편은 여기에서 볼 수 있습니다. 새로 배운 점 제네릭(generic) 타입은 프로토콜 이름 뒤에 where 절이 있을 때만 프로토콜의 요구사항을 만족합니다. Swift는 다음과 같은 커스텀 타입에 대해 Equatable 구현을 제공합니다. Equatable을 따르는 저장 프로퍼티만 가진 구조체 Equatable을 따르는 associated 타입만 가진 열거형 associated 타입이 없는 열거형 Swift는 다음과 같은 커스텀 타입에 대해 Hashable 프로토콜을 따르도록 할 수 있습니다. Hashable을 따르는 저장 프로퍼티만 가지고 있는 구조체 Hashable을 따르는 associated 타입만 가지고 있는 열거형 associated 타입이 없는 열거형 raw va..

[Swift] 공식 문서 - 프로토콜(Protocols) - 1

* Protocols 가이드는 너무 길어서 두 편으로 나눠 포스팅합니다. 2편은 여기에서 볼 수 있습니다. 최하단에도 링크를 적어두었습니다. 새로 배운 점 구현해야 하는 요구사항을 지정하는 것 이외에도 이러한 요구사항 중의 일부를 구현하거나 추가 기능을 구현하도록 프로토콜을 확장할 수도 있습니다. Property 요구사항(requirements)은 항상 var 키워드를 앞에 붙여서 변수 프로퍼티로 선언합니다. 프로토콜에서 메서드들은 메서드의 body와 괄호를 제외하고 나머지를 작성합니다. 프로토콜에서 메서드는 가변 매개변수는 허용하지만 기본값은 설정할 수 없습니다. 프로토콜에 mutating을 사용한 경우, 이 프로토콜을 따르는 클래스를 구현할 때는 mutating을 명시하지 않아도 됩니다. 프로토콜을 ..

[Swift] 공식 문서 - 익스텐션(Extensions)

새로 배운 점 익스텐션은 원본 코드를 건들지 않고 타입을 확장할 수 있는 기능이며, retroactive 모델링이라고 합니다. 익스텐션은 Objective-C의 카테고리와 유사합니다. 익스텐션으로 designated 이니셜라이저 또는 deinitializer는 추가할 수 없습니다. 만약 익스텐션을 사용하여 모든 저장 프로퍼티에 기본 값이 설정되어 있고, 어떠한 커스텀 이니셜라이저를 정의하지 않은 값 타입에 이니셜라이저를 추가하면, 익스텐션 이니셜라이저에서 기본 이니셜라이저와 멤버와이즈 이니셜라이저를 호출 할 수 있습니다. 만약 익스텐션을 사용하여 다른 모듈에서 선언된 구조체에 이니셜라이저를 추가하면, 새로운 이니셜라이저는 모듈에 정의된 이니셜라이저를 호출하기 전까지 self에 접근할 수 없습니다. 익스텐..

[Swift] 공식 문서 - 중첩 타입(Nested Types)

새로 배운 점 Swift는 중첩 타입(Nested Types)를 정의할 수 있습니다. 즉, 지원하는 타입의 정의 내에서 클래스, 구조체, 열거형을 중첩할 수 있습니다. Nested Types 열거형은 종종 특정 클래스나 구조체 기능을 지원하기 위해 만들어지기도 합니다. 보다 복잡한 타입의 Context 내에서 사용하기 위해서는 유틸리티 클래스 및 구조체를 정의하는 것이 편리할 수 있습니다. 이를 위해 Swift는 중첩 타입(Nested Types)를 정의할 수 있습니다. 즉, 지원하는 타입의 정의 내에서 클래스, 구조체, 열거형을 중첩할 수 있습니다. 타입을 다른 타입에 중첩키시려면 지원하는 타입의 외부 중괄호 안에 해당 정의를 작성하면 됩니다. 타입은 필요한만큼 중첩할 수 있습니다. Nested Typ..

반응형