Swift/개념 & 응용 99

[Swift] async/await와 [weak self]

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

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

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

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

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

[Swift] Initialization 실습

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

[Swift] Method와 Subscripts 실습하기

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

[Swift] Property Wrapper

Property Wrapper Property Wrapper는 Swift 5.1에 나온 개념으로, 프로퍼티가 저장되는 방식을 관리하는 코드와 프로퍼티를 정의하는 코드 사이에 분리 계층을 추가합니다. 구조체, 클래스, 열거형의 local stored variable에서만 사용 가능하고, 전역 변수나 연산 프로퍼티에서는 사용 불가능해요. 정의는 아주 어렵지만... 보일러 플레이트 코드를 줄일 수 있는 유용한 기술입니다. (*보일러 플레이트 코드 : 유사한 코드가 여러 곳에서 사용되며, 반복적으로 비슷한 형태를 띄는 코드) SwiftUI에서 자주 보인다고 하는데요(전 아직 SwiftUI를 안 해봄 ㅠ) @Published, @Binding, @ObservedObject, @State 등이 Property Wr..

[Swift] 프로퍼티(Property) - 2

1편 보러가기 [Swift] 프로퍼티(Property) - 1 프로퍼티(Property) property는 value를 특정 클래스, 구조체, 열거형과 연결하는 역할을 합니다. 말은 어렵지만 클래스, 구조체, 열거형에서 값을 쓸 수 있도록 해주는게 property라는거에요. var hello: Stri jeong9216.tistory.com 프로퍼티 옵저버(Property Observers) 프로퍼티 옵저버는 프로퍼티의 값이 변경됨을 감지하고 적절한 동작을 수행할 수 있도록 합니다. 프로퍼티의 값이 새로 할당될 때마다 호출되고 같은 값이 할당되도 호출이 됩니다. 프로퍼티 옵저버는 아래 세 가지 상황에서 사용할 수 있습니다. 저장 프로퍼티를 정의할 때 설정 저장 프로퍼티를 Overriding 할 때 설정 ..

[Swift] 프로퍼티(Property) - 1

프로퍼티(Property) property는 value를 특정 클래스, 구조체, 열거형과 연결하는 역할을 합니다. 말은 어렵지만 클래스, 구조체, 열거형에서 값을 쓸 수 있도록 해주는게 property라는거에요. var hello: String = "Hello" 이 코드도 property를 나타낸건데 hello는 property 이름, String은 타입, "Hello"는 값입니다. "Hello"를 쓰기 위해서는 hello를 이용해야 하죠. Property에는 크게 4가지가 존재합니다. 저장 프로퍼티(Stored Property) 지연 저장 프로퍼티(Lazy Stored Property) 연산 프로퍼티(Computed Property) 프로퍼티 옵저버(Property Observers) 타입 프로퍼티(T..

[Swift] Value 타입과 메모리 저장 공간

서론 지난 포스팅에서 Class와 Struct의 차이점을 다루며 Reference 타입과 Value 타입에 대해 다루었습니다. [Swift] Class와 Struct Class와 Struct 새로운 데이터 구조를 정의할 때 구조체와 클래스 중에 무엇을 사용할지 고민합니다. 클래스와 구조체의 차이에 대해 알아보고 어떤 상황에서 무엇을 쓰면 좋을지 알아보겠습니다. jeong9216.tistory.com Reference 타입과 Value 타입의 차이 중 하나가 저장되는 메모리 공간인데요. Reference 타입은 Heap, Value 타입은 Stack에 저장된다고 설명했고, 그렇게 알고 있는 분이 많으실 겁니다. 하지만 타입에 따른 저장 공간이 상황에 따라 달라질 수 있다는 거 아시나요? 오늘은 Value ..

[Swift] 함수(function)와 메서드(method) 차이

포스팅을 쓰다보니 메서드와 함수 중 어떤 단어가 맞는지 정확히 모르겠어서 이 기회에 정리를 한 번 해봅니다 ㅎㅎ 함수(function) 함수는 소프트웨어에서 특정 동작을 수행하는 일정 코드 부분을 의미합니다. 같은 함수를 여러 상황에서 여러 차례 호출할 수 있으며 일부분을 수정하기 쉽다는 것이 특징입니다. 전역이든 지역이든 상관 없이 독립된 기능을 수행하면 함수라고 합니다. hello 라는 이름의 함수를 정의하고 호출하여 실행한 모습입니다. 독립적으로 존재하면서 hello 라는 문자열을 출력하는 동작을 수행하니 함수의 정의에 부합하죠? 메서드(method) 메서드(method)는 클래스, 구조체, 열거형에 포함되어 있는 함수입니다. 즉 메서드도 함수의 일종이라는 것입니다. 근데 iOS 포스팅을 할 때는 ..

반응형