본문 바로가기

iOS34

[25일차] Concurrency 동시성 (sync/Async) * Concurrenty (동시성) - 사용자 인터랙션 처리 (Main Thread에서 처리) - 네트워킹 - 백그라운드에서 파일 다운로드 - 파일 저장하고 읽기 컴퓨터에서는 여러 개의 스레드가 동시에 수행되면서 백그라운드에서 수많은 작업들이 이루어진다. * GCD (Grand Centeral Dispatch) : 해야 할 일들을 GCD로 전달해주면 시스템에서 안전하게 수행될 수 있도록 처리 (Queue FIFO 구조로 처리) * DispatchQueue 1) Main Queue : 메인 스레드에서 작동하는 큐 ex) DispatchQueue.main.async { ... } 2) Global Queue : 시스템에 의해 관리되는 큐 # QoS (Quality of Service) : 큐의 우선순위를 결.. 2020. 8. 15.
[24일차] Network 통신 우리가 사용하는 대부분의 앱 서비스에는 'Network' 통신이 필요하다. 로그인, 장바구니, 결제 등등 서버와의 통신이 필요한 기능의 대부분에 쓰여지는 기술이다. * App + Concurrency (동시성) : 앱 서비스 내에서 네트워크 통신이 이루어지는 과정이라도 동시적으로 사용자 터치 반응에 대한 처리는 이루어져야 한다. * HTTP : 앱과 서버 사이에서 데이터를 주고 받기 위한 네트워크 통신규약 * HTTP Request Method 1. POST : Create 2. GET : Read 3. UPDATE : Update 4. DELETE : Delete * Content-Type : 전달되는 데이터 형식(text/html, application/json, image/png, video/mpe.. 2020. 8. 14.
[23일차] TodoList 추가/삭제 TodoList 샘플 앱 마지막으로 "추가(+) / 삭제 (-)" 기능을 추가하고자 한다. 1) [Today] 옵션 : ON/OFF 토글형식으로 선택값에 따라, 다른 카테고리로 분류 2) [+] 추가 버튼 : Input Text에 입력한 데이터를 목록에 추가 3) [-] 삭제 버튼 : 삭제한 데이터가 Todo.json 파일 내에서도 삭제 처리 2020. 8. 12.
[22일차] InputText 와 소프트 키보드 영역 앱에서 정보를 입력하기 위해서는 InputText와 소프트 키보드가 필요하다. 이번 수업에서는 상태에 따라 소프트키보드가 동적으로 Show/Hide 하는 기능을 구현해보고자 한다. 우선, InputText에 커서가 위치했을 때, 소프트 키보드를 보여주는 코드를 구현한다. 그 다음은, InputText에 입력을 마친 후 소프트키보드 영역을 숨김처리가 필요하다. Tap Gesture Recognizer 이벤트를 처리하는 UI를 추가하여, View 영역에 터치이벤트를 확인한다. 소프트키보드 영역 숨김처리는 resignFirstResponder() 로 처리한다. * resignFirstResponder() : 텍스트필드의 현재 상태를 포기했다는 의미 (키보드가 자동으로 내려가는 효과) 2020. 8. 11.
[21일차] Codable 이란? 실무에서 자주 사용하는 JSON 데이터를 실제로 활용하기 위해서는 파싱이라는 과정이 꼭 필요하다. 하지만, Swift에서는 Codable이라는 것이 이를 자동으로 처리해준다. (매우 간편하고 활용도가 높은 최고!) Codable의 사전적인 의미는 아래와 같다. "A type that can convert itself into and out of an external representation." 자신을 변환하거나 외부표현(external representation)으로 변환할 수 있는 타입입니다. Codable은 Decodable과 Encodable 프로토콜을 준수하는 타입(프로토콜) 이다. - Decodable : 자신을 외부표현(external representation)에서 디코딩 할 수 있는 타입.. 2020. 8. 10.
[20일차] TodoList 앱 만들기 - 1 최초로 만드는 iOS 앱으로 TodoList(할일) 앱을 만들어보고자 한다. 우선 만들기 전에, 강의에서 필요로 하는 개념에 대한 정리를 해보고자 한다. * 데이터 저장 : NSCoding, Property List, Serialization, Core Data, Realm - 데이터가 많을 때 : Core Data, Realm 권장 - Codable(Swift 4) : JSON 데이터를 효율적으로 다룰 때 사용 * Tab Controller 추가 방법 : StroyBorard에서 View 선택 및 Editor -> Embed in -> Tab Controller 선택 * 할일을 추가/수정/삭제하는 클래스(TodoManager)에 대한 함수를 정의해보자. // 여러개의 TodoList 목록을 관리 (To.. 2020. 8. 8.
[19일차] Designated Init vs. Convenience Init * designated initialize : 직접적인 initialize * convenience initialize : 간접적인 initialize * Convenience initialize 사용하는 이유? : initialize 파라미터가 너무 많을 때, 간략히 하고자 사용 ☆ designated vs convenience - DI는 자신의 부모의 DI를 호출해야 함 - CI는 같은 클래스의 이니셜라이저를 꼭 하나 호출해야 함 - CI는 궁극적으로 DI를 호출해야함 위의 예제와 같이 CI를 이용하면 클래스 객체 생성을 간단하게 이용할 수 있다. CI 이용 시, 궁극적으로 DI를 반드시 호출해주어야 한다. 2020. 8. 7.
[18일차] Class 생성자 이해하기 (2-phase Initialization) * 상속은 언제 사용하면 좋은가? (1) Single Responsibility (단일 책임) : 하나의 클래스는 한 가지의 역할만 해야 한다. (2) Type Safety (타입이 분명해야 할 때) : 특정 조건의 타입 객체를 사용하고자 할 때 (3) Shared Base Classes (다자녀가 있다) : 동일한 행위를 다중 객체에서 사용 (4) Extensibilty (확장성이 필요한 경우) (5) Identity (정체를 파악하기 위해) * 상속된 자식 클래스는 부모 클래스의 형태와 다르게 생성할 수 있다. ex) let student1 = Student(firstName: "Mike", lastName: "Kim") let student2 = StudentAthlete(sports: ["Base.. 2020. 8. 7.
[17일차] Class와 Struct를 사용해야 할 때 * 이럴 때 Struct 쓰자 (1) 두 Object를 "같다, 다르다"로 비교해야 하는 경우 (2) Copy 된 각 객체들이 독립적인 상태를 가져야 하는 경우 (3) Object의 데이터를 여러 스레드에 걸쳐 사용할 경우 (각 Object가 독립적으로 존재하므로 다중 스레드를 사용하더라도 오류가 날 확률이 낮다.) * 이럴 때 Class 쓰자 (1) 두 Object의 인스턴스 자체가 같음을 확인할 때 (2) 하나의 객체가 필요하고, 여러 대상에 의해 접근되고 변경이 필요한 경우 # 쉽게 사용하는 Tip) 1. 일단 Struct로 쓰자 2. 그 이후에 Class로 바꿔보자 (상황에 따라 다름) - 공식 Doc https://developer.apple.com/swift/blog/?id=10 # 실무 Ti.. 2020. 8. 5.