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

🍎 Apple/Swift 30

[Swift] URL Loading System

URL Loading System URL을 통해 네트워크에 존재하는 서버와 통신하는 기술입니다. 이에 포함된 프레임워크는 높은 수준의 API를 제공하기 때문에 이것만으로 서버연동, 다운로드, 업로드 기능을 구현할 수 있습니다. URLSession 이 시스템에서 가장 중요한 것이 URLSession입니다. 이를 통해 네트워크 연결을 설정하고 요청과 응답을 처리할 수 있습니다. URLSession은 네가지 Session 타입을 가집니다. Shared : 기본 설정을 기반으로 단순한 네트워크 요청을 수행할 수 있습니다. Default : 세션을 직접 구성할 수 있습니다. Degation을 제공하기 때문에 세부적인 제어도 가능합니다. 해당 세션을 통해 전송된 응답은 Disk 및 Memory에 캐싱됩니다. Eph..

🍎 Apple/Swift 2022.05.12

[Swift] CodingKeys / Custom CodingKeys

CodingKeys CodingKeys struct Model: Codable { var name: String var number: Int } // JSON File { "myName" : "Inu", "number" : 5 } 우리는 주로 Codable Protocol을 채택하여 모델을 구성합니다. 이 때 구현하려는 구조체의 속성과 JSON Data의 Key값이 일치해야 정상적으로 Decoding됩니다. 그런데 사실 구현하려는 구조체의 속성과 JSON Data의 Key값이 일치하는 경우는 거의 없습니다. 위의 예시의 name과 myName처럼 다른 것이 일반적입니다. 이 때 사용되는 것이 CodingKeys 입니다. struct Model: Codable { var name: String var nu..

🍎 Apple/Swift 2022.05.12

[Swift] JSON Encoding / Decoding

JSON Encoding / Decoding JSON JavaScript Object Notation의 약자입니다. 네트워크를 통해 데이터를 주고받을 때 사용되는 표준 포맷입니다. 우리는 Swift 데이터를 JSON 데이터로 변환하고, JSON 데이터를 Swift 데이터로 변환할 필요가 있습니다. 이를 Encoding 및 Decoding이라고 합니다. Dictionary와 같이 Key-Value 형태를 가지며, 전체 데이터가 일반 Text로 구성되어 있습니다. JSONEncoder(Decoder) let encoder = JSONEncoder() do { let jsonData = try encoder.encode(instance) } catch { print(error) } let decoder = J..

🍎 Apple/Swift 2022.05.12

[Swift] ATS (App Transport Security)

iOS - ATS (App Transport Security) ATS란 iOS 9에 도입된 보안기능 TLS, AES, SHA-2를 사용하여 구성되어 있습니다. 기본적으로 암호화되지 않은 정보(HTTP)를 허용하지 않습니다. (HTTPS 사용권장) 설정을 수정하면 HTTP 접속을 허용할 수 있지만 앱 심사에 통과되지 못할 가능성이 있기 때문에 일반적으로 권장되지는 않습니다. 이를 수정해야하는 '정당한' 이유가 있어야 합니다. 설정 방법 아래는 ATS 설정을 수정하는 방법입니다. info.plist에서 주로 설정을 관리합니다. info.plist에서 Add Row를 클릭해 새로운 열을 생성합니다. App Transport Security Settings을 입력합니다. 여기에 미리정의된 Key와 Value를 ..

🍎 Apple/Swift 2022.05.12

[Swift] 순열과 조합 구현

지난 포스팅에서 Queue를 구현해봤는데요 알고리즘 문제에는 순열 및 조합도 가끔 쓰이죠! 그래서 이번엔 순열과 조합을 구현해봤습니다. 순열 (Permutation) 순열은 전체에서 중복없이 순서를 고려해 n개를 배열하는 경우의 수입니다. 해당 특성에 맞게 DFS를 사용해 접근했습니다. 따라서 Stack과 재귀함수 둘 모두를 사용할 수 있습니다. Stack 사용 func permutation(_ array: [T], _ n: Int) -> [[T]] { var result = [[T]]() if array.count < n { return result } var stack: [([T], [Bool])] = array.enumerated().map { var visited = Array(repeating:..

🍎 Apple/Swift 2022.04.25

[Swift] Queue (Deque) 구현

최근 Swift로 알고리즘 문제를 해결하고 있습니다. 그런데 Swift에는 Queue(Deque)가 없어 종종 불편할 때가 있더라구요 그래서 한번 직접구현해봤습니다. Swift로 구현한다는 것에 목적이 있는 포스팅이기 때문에 Queue와 Deque에 대한 설명은 생략하겠습니다. 참고 : https://velog.io/@seri_ous/Swift-%ED%81%90-Swift-Algorithm-Club-%EB%B2%88%EC%97%AD 구현 class Queue { var array: [T?] var head = 0 var isEmpty: Bool { return count == 0 } var count: Int { return array.count - head } var first: T? { if isEm..

🍎 Apple/Swift 2022.04.25

[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

[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