[회고] 신입 iOS 개발자가 되기까지 feat. 카카오 자세히보기

🍎 Apple 101

[Swift] Method Swizzling

Method Swizzling? 개념 Method Swizzling은 원래의 메서드를 runtime에 원하는 메서드로 변경해 사용할 수 있도록 하는 기법입니다. UIViewController의 viewWillAppear같은 메서드를 원하는 메서드로 변경해 여러 ViewController에 한번에 작업을 적용하는 방식으로도 사용이 가능합니다. 예를 들어 앱 분석기능을 적용하는 경우 여러 ViewController에 같은 동작을 수행해야하는 경우가 있습니다. 이럴 때 하나씩 적용하는 것보단, Method Swizzling으로 한번에 처리하는 것이 효율적인 것이지요. 사용예시 import UIKit extension UIViewController { static func methodSwizzling() { l..

🍎 Apple/Swift 2022.04.10

[Swift] Localizing (NSLocalizedString)

안녕하세요 이누입니다! Localizing에 대해 알고는 있었지만, 직접 적용시켜본적은 없었습니다. 다국어 지원은 글로벌 앱 서비스 제작에 상당히 중요한 부분이라 한번쯤은 적용해볼 필요가 있다고 느꼈습니다. 그래서 동아리에서 하고있는 인스타그램 클론코딩 과제에 Localizing을 적용해봤습니다. 하나씩 살펴보시죠! cf. 코드로 Localizing을 적용하는 것을 기준으로 설명했습니다. 사용과정 String 파일 생성 먼저 Strings 파일을 생성해야합니다. 이 때 파일명은 반드시 Localizable이어야 합니다. 그렇지 않으면 프로젝트 상에서 인식할 수 없어요! 경로는 상관없습니다. 저는 이렇게 생성해줬습니다. 언어 추가 이제 오른쪽 Localizable 파일을 선택하고 Inspector 영역에서..

🍎 Apple/Swift 2022.04.10

[SwiftUI] ForEach, Identifiable

본 게시글은 애플의 공식문서(https://developer.apple.com/documentation/swiftui/foreach)를 참고하여 작성되었습니다. ForEach 확인된 데이터의 기본 collection으로부터 계산된 view들을 만들 수 있는 구조체입니다. View Builder에는 for문을 적용할 수 없습니다. 대신 ForEach문을 사용합니다. 배열을 이용해 새로운 Bag of Views를 만들 수 있습니다. 단, collection의 요소는 Identifiable protocol을 채택해야 합니다. 배열은 요소들이 계속해서 추가 및 삭제되면서 순서가 바뀔 수 있습니다. 따라서 각 요소들이 고유한 identifier가 있어야 해당 요소로 만들어진 View를 확인할 수 있습니다. 만약 ..

🍎 Apple/SwiftUI 2022.03.30

[SwiftUI] Opaque Type, ViewModifier, View Combiner

Opaque Type some View는 View의 한 종류인것만 결정되어있고, 자세히 어떤 View인지는 컴파일러가 직접 판단하는 View입니다. Some은 Opaque Type (불투명 타입)을 표현합니다. Opaque Type Some은 computed property 혹은 함수의 구체적인 return type을 숨길 수 있도록 해줍니다. 이를 통해 간결한 코드 작성이 가능해집니다. Opaque Type은 Reverse Generic Type이라고 불리기도 합니다. Generic은 함수가 타입 제약을 유지하면서 다양한 타입을 허용할 수 있도록 합니다. Opaque은 함수가 자유로운 타입을 리턴할 수 있도록 합니다. ViewModifier SwiftUI에 내장된 프로토콜로, 기존의 뷰 또는 다른 Vi..

🍎 Apple/SwiftUI 2022.03.30

[UIKit] View Drawing Cycle

참고 https://tech.gc.com/demystifying-ios-layout/ https://jeonyeohun.tistory.com/336 View의 Drawing Cycle이란 View가 로드되거나 변경이 생겼을 때 이를 화면에 적용시켜 그리는 과정을 뜻합니다. 이들은 즉각적으로 처리되지 않고, Main Run loop에 의존적인 형태를 가집니다. Main Run loop iOS의 이벤트는 각 스레드마다 존재하는 Run loop를 통해 처리됩니다. 발생하는 이벤트들이 모두 시스템상의 이벤트큐에 들어가고, Run loop가 돌아가면서 이들을 하나씩 가져와 처리하는 방식입니다. 그 중에서도 Main Run loop는 사용자의 입력 이벤트를 처리하고 적절한 응답을 트리거하는 역할을 수행합니다. Up..

🍎 Apple/UIKit 2022.03.16

[Swift] Actor

참고 및 출처 https://docs.swift.org/swift-book/LanguageGuide/Concurrency.html https://medium.com/hcleedev/swift-actor%EB%9E%80-f8f58c68dab9 https://zeddios.tistory.com/1290 Actor class Counter { var count: Int = 0 func increment() { self.count += 1 } } 이런 경우에 let counter = Counter() DispatchQueue.global().async { counter.increment() } // global counter.increment() // main 이런식으로 2개의 스레드에서 동시 접근을 하면 Xc..

[Swift][문서의역] Task

참고 및 출처 https://developer.apple.com/documentation/swift/task/ https://www.avanderlee.com/concurrency/tasks/ Task & TaskGroup Task 인스턴스를 생성할 때 해당 Task가 수행할 작업을 포함하는 클로저를 함께 제공하게 됩니다. Task는 생성 직후 실행을 시작할 수 있습니다. 명시적으로 시작하거나 예약하지 않아도 됩니다. Task를 만들면 해당 인스턴스를 사용하여 작업과 상호작용합니다. 예를 들어 Task의 작업이 완료될 때까지 기다리거나 취소할 수 있습니다. Task의 작업이 완료될 때까지 기다리거나 취소할 때까지 기다리지 않고 Task에 대한 참조를 버리는 것은 프로그래밍적 에러가 아닙니다. Task는..

[Swift][문서의역] Concurrency (async & await)

참고 및 출처 https://docs.swift.org/swift-book/LanguageGuide/Concurrency.html Concurrency Swift는 구조적 방식으로 비동기(asynchronous) 및 병렬(parallel) 코드 작성을 지원했습니다. 비동기 코드는 한번에 프로그램의 한 부분만 처리되지만 정지 및 재실행이 가능합니다. 네트워크에서 데이터를 가져오거나 파일을 읽어오는 등의 긴 기간의 연산을 하는 동안 UI를 갱신하는 등의 비교적 단기간의 연산을 수행할 수 있습니다. 병렬 코드는 여러개의 코드들을 동시에 실행할 수 있습니다. 예를 들어 4개의 코어를 가진 프로세서는 각 코어마다 하나의 코드를 배치하여 동시에 4개의 코드를 실행할 수 있는 것입니다. 병렬 및 비동기 코드는 유연하..

[Swift] Generic

Swift - Generic Generic을 사용하면 좀 더 유연하게 Funtion 및 Type을 작성할 수 있습니다. 중복을 피하고 그 의도를 추상적인 방식으로 표현하는 코드를 작성합니다. 아래와 같은 방식으로 사용합니다. func swapTwoValues(_ a: inout T, _ b: inout T) { let temporaryA = a a = b b = temporaryA } 이름은 자유롭게 지정할 수 있습니다. 일반적으로는 T,U,V와 같은 단일 문자를 많이 사용합니다. Generic 뒤에 단일 클래스 혹은 프로토콜을 배치하여 Generic의 타입을 제한할 수도 있습니다. func someFunction(someT: T, someU: U) { // function body goes here }..

🍎 Apple/Swift 2022.03.07

[Swift] NotificationCenter

NotificationCenter NotificationCenter는 등록된 Observer에게 정보를 broadcast해주는 역할을 수행합니다. addObserver(_:selector:name:object:) 혹은 addObserver(forName:object:queue:using:) 메서드를 통해 알림(NSNotification 객체)을 받을 객체를 등록할 수 있습니다. 이 때 어떤 알림을 받아야하는지도 지정합니다. 따라서 하나의 객체에 이 메서드를 여러번 호출하는 것으로 여러 알림에 대한 Observer 역할을 하나의 객체가 동시에 수행하도록 할 수 있습니다. 실행중인 각 앱마다 default notification center가 존재하며, 필요할 경우 새로운 notification center..

🍎 Apple/Swift 2022.03.07