iOS (27) 썸네일형 리스트형 Concurrency - 기초 동시성(Concurrency) 프로그래밍비동기 프로그래밍 이해1. 비동기 처리가 필요한 이유네트워크 통신과 비동기 처리네트워크 통신(서버와 통신)은 부하가 많이 걸리는 일임. 예를 들어 서버로부터 데이터를 가져와 테이블 뷰로 표현한다고 가정을 해보자. 만약 비동기 처리가 되어있지 않다면 테이블뷰를 스크롤 할 때마다 버벅이게 될 거임! 🤔왜 그럴까? 비동기 처리를 하지 않으면 UI관련 메커니즘이 제대로 동작하지 않기 때문?? 비동기 처리를 하지 않으면 메인 쓰레드에서 모든 작업을 처리함. 그러나 작업의 길이가 길어지게 되면서(네트워크 통신) 과부하가 걸리게 되는거임. 그래서 메인 쓰레드는 UI작업만 남기.. Type Erasure, Opaque Type Type Erasure에 대해 살펴보도록 하겠습니다.이걸 공부하는 이유는 제가 swiftUI를 공부하면서 뷰 만들 때 항상 some 키워드가 앞에 붙자나요.맨날 무의식적으로 사용하다가 어느순간 이게 근데 뭐하는건데 왜 붙지 생각이 들어서관련 내용을 정리해보도록 하겠습니다! 아래와 같이 ContentView를 그리는 View가 있을 때 View 타입 앞에 some 키워드가 붙습니다.struct ContentView: View { var body: some View { Text("Hello, world!") .padding() }} some은 computed property또는 함수의 구체적 return Type을 숨기는 것(불투명한 타입)을 제공할 수 있음(ret.. Access Control(접근제어자) 안녕하세요!! 정~말 오랜만에 글을 씁니다!!!한동안 이래저래.. 나태하게 지냈는데 다시 맘잡구 천천히 시작해보겠습니다! 오늘은 비교적 간단한 내용을 가져왔는데여.바로 접근제어자입니다. Swift 접근제어자에 대해 정리해 보겠습니다. 저는 앱을 만들때 보면 접근 제어자를 default 아니면 private 정도만 쓰게 되더라구요. 접근제어자를 사용하는 이유는 모듈, 소스파일 등 요소의 접근을 제어하기 위해서잖아요? (객체지향의 은닉화 구현.. 뭐 그런거?)뭐 접근을 제어해서 상세 구현을 숨기고, 불필요한 접근을 막아서 코드를 좀 더 좋게 만들 수 있따 그런거잖아여.이렇게 두루뭉실하게만 알고 있기도 하고, 너무 의식하지 않고 생각없이 사용해온 것 같아서 좀 더 세분화해서 접근 관리를 할 필요가 있지 않나라.. [weak self] 왜 쓸까!! 어느순간부터 개발을 할 때 [weak self] 를 거의 무조건 붙히는데여 메모리 누수와 참조 문제와 관련이 있다고 공부했었던 기억이 있는데 잘 기억도 안나고.. 그냥 무의식적으로 항상 넣고 있길래 정리를 한번 해보려고 합니다. 여기서는 메모리에 관한 부분은 다루지 않고 참조에 관한 내용만 다뤄보도록 하게씀 (ARC 이런건 따로 정리해 볼 예정) 클로저 내부에서 외부 변수를 사용하게 되면 변수를 클로저 내부적으로 저장을 하고, 이때 해당 변수의 타입(값, 참조)에 상관없이 참조타입으로 memory capture를 하게 됩니다. 참조에 대해서 코드로 설명을 더 해보겠음! var a = 5 let closure = { print(a) } print(a) // 5 a = 10 closure() // 10 위와.. SwiftUI 내부 동작 원리 SwiftUI 내부 작동 원리 When SwiftUI looks at your code, what does it see? 이번시간에는 swiftUI가 우리의 코드를 볼 때 내부 동작에 대해서 한번 학습해 보겠습니다. 이를 위해서 아래의 세가지를 살펴볼 예정입니다! Identity, Lifetime, Dependencies Identity는 SwiftUI가 앱의 다양한 업데이트 시 각 element를 동일하거나 혹은 별개로 인식하는 방법입니다. Lifetime은 시간의 흐름에 따른 뷰와 데이터의 존재를 추적하는 방법입니다. Dependency는 인터페이스를 업데이트해야하는 시기와 이유를 이해하는 방법입니다. 이 개념들을 통해 SwiftUI는 변경해야 하는 사항, 방법, 시기를 결정하여 화면에 표시되는 동적.. KVO(Key-Value Observing) KVO(Key-Value Observing) KVO는 객체의 프로퍼티 변화를 다른 객체에 알리는 Cocoa Programming Pattern 논리적으로 분리된 models과 views 사이의 변경사항을 전달하는데 유용 NSObject에서 상속받은 클래스만 사용 가능 바로 코드를 보면서 한번 살펴 보겠습니다~! class Person { var name: String init(name: String) { self.name = name } } 다음과 같은 클래스에서 KVO를 이용해 상태 변화를 감지하고 싶다고 가정해보겠습니다. KVO를 사용하기 위해서는 우선 다음과 같은 코드를 추가해줘야 합니다. NSObject 상속 변화할 프로퍼티에 @objc dynamic 추가 class Person: NSObject.. Metatype(.self, .Type, .Protocol) 오늘 강의를 듣는데 .self가 나오면서 메타타입이 나오는거에요 그래서 어 그게 머지? 하고 찾다가 시작된 블로그…글..임미다.. 글을 쓰기전에 앞서서… 소들이님이랑 수진날진님.. 블로그로 이해한 후 작성하려 했으나…. 쓰다보니까 따라쓰기가 되어 가더라구요 ㅠㅠ(너무 잘 정리하셔따..) 그래서 혹시 보시는 분들은 ㅇ아래 링크타고 들어가서 보시면 훨~씬 이해가 잘 되실껍니다!!! Swift) Metatype(.self, .Type, .Protocol) 정복하기 (1/2) Swift) Metatype(.self, .Type, .Protocol) 정복하기 (1/2) 안녕하세요, 소들입니다 :D 오늘은 바로 2월 1일 설날이랍니다 눈 뜨자마자 갑자기 Metatype 포스팅이 하고 싶어져서 포스팅을 하고 있는 사.. Struct는 뭐고 어떻게 사용할까? 구조체와 클래스 (Structures and Classes) 구조체와 클래스 (Structures and Classes) - Swift 실제로 값 타입에 대해 이전 챕터에서 광범위하게 다뤘습니다. 실제로 Swift에서 정수, 부동 소수점, 부울, 문자열, 배열 그리고 딕셔너리와 같은 기본 타입의 모두는 값 타입이고 구조체로 구현 bbiguduk.gitbook.io 오늘은 구조체에 대해서 알아보겠습니다! 저번에는 구조체, 클래스, 열거형을 비교하면서 간단하게 알아봤었는데 구조체에 대해 좀 집중적으로 볼게요! Struct 상수나 변수 메서드 등을 내부적으로 정의해 사용자 정의 타입을 만들 때 사용되는 타입 인스턴스로 생성해서 직접 사용할 수 있음 공식문서에서 제공하는 구조체의 기능은 다음과 같습니다. (클래.. Optional Optional 옵셔널(Optional)은 언어적인 차원에서 안전성을 높이기 위해 사용하는 개념임 간단하게 말하면 nil 타입을 사용할 수 있는 타입들을 Optional Type이라고 부름! nil 값이 없음을 의미하는 값 이거는 정수형의 0이나 문자열의 “”(빈문자열) 과는 다르게 진짜 값이 없음을 의미함 위 딕셔너리 처럼 값이 없을 때 오류를 처리하는 것이 아니라 nil을 내보냄으로써 안전성을 높힘 이러한 nil 값을 반환하기 위해서는 해당 타입이 옵셔널 타입이어야 함! 그럼 어떻게 옵셔널 타입을 선언할 수 있을깎??? 타입 앞에 ? 를 붙혀주면 끝임 var result: Int? = nil 위와 같이 하면 nil 값을 가질 수 있는 Optional Int가 되는거임 따라서 nil 또는 nil이 아닌.. AnyObject AnyObject | Apple Developer Documentation AnyObject | Apple Developer Documentation The protocol to which all classes implicitly conform. developer.apple.com AnyObject는 특정하지 않은 타입에 대해 동작하도록 만들어진 타입임 이와 유사한 타입으로 Any도 있습니다! 그리고 타입 캐스팅과도 살짝 연관이 있는데 타입 캐스팅을 하려면 상속관계에 있어야 하잖아요?? 근데 Any나 AnyObject 타입일 경우는 상속 관계가 아니더라도 ㄱ가능해집니다! AnyObject 모든 클래스가 암시적으로 준수하는 프로토콜 클래스, 클래스 타입, 클래스-only 프로토콜에서 타입으로 사용할 수 있.. 이전 1 2 3 다음