Swift 76

Swift의 기본 연산자

이번 포스트에서는 Swift의 기본 연산자에 대해 살펴보도록 하겠습니다. 할당 연산자 할당 연산자는 값을 초기화하거나 이미 설정된 값을 새로운 값으로 변경하는 역할을 가지고 있습니다. 아래와 같이 상수, 변수 모두 사용할 수 있습니다. 또한 튜플 형식을 사용하여 여러 개의 값을 한 번에 할당할 수도 있습니다. let num1 = 10 var num2 = 5 num2 = num1 // 결과 : num2 = 10, num1 = 10 let (numX, numY) = (10, 20) // numX는 10, numY는 20이 할당됩니다. C 혹은 Objective-C와는 달리 Swift에서 할당 연산자는 값을 반환하지 않는 특징을 하지고 있습니다. 즉, C 혹은 Objective-C에서 성공적으로 값이 할당된 ..

iOS App Extension Lifecycle 생명주기

이번 포스트에서는 iOS 플랫폼에서 제공하는 App Extension의 Lifecycle 생명주기와 Host App과 어떻게 Communication을 하는지 알아보도록 하겠습니다. App Extension은 iOS 8.0에서 새로 나온 기능으로, Host App과는 별개의 Process로 동작하는 확장 Framework입니다. App Extension은 App이 아니며 App 간에 이루어지는 Inter Process Communication 역시 아닙니다. 실행 시에도 App과는 완전히 다른 독립된 프로세스(process)로 실행되기 때문에 완전히 다른 주소 공간(Isolated address space)를 가지게 됩니다. App Extension의 동작 방식을 간략하게 그림으로 살펴보도록 하겠습니다...

클라이언트 2020.01.25

GCD에 대해 알아보기 (Dispatch Queue)

이번 포스트에서는 GCD에 대해 알아보도록 하겠습니다. GCD는 Grand Central Dispatc의 약자로 대표적으로 Dispatch Queue라는 것이 있습니다. GCD는 멀티 스레드를 구현하기 위해 Apple에서 제공하는 API 입니다. Dispatch Queue Dispatch Queue는 응용 프로그램이 블록 개체 형태로 작업을 제출할 수있는 FIFO 큐입니다. Dispatch Queue는 작업을 직렬 또는 동시에 실행합니다. Dispatch Queue에 제출 된 작업은 시스템이 관리하는 스레드 풀에서 실행됩니다. 앱의 메인 스레드를 나타내는 Dispatch Queue를 제외하고 시스템은 작업을 실행하는 데 사용하는 스레드를 보장하지 않습니다. 작업 항목을 동기식 또는 비동기식으로 스케줄합니..

클라이언트 2020.01.24

iOS Kingfisher로 비동기 이미지 불러오기

이번 포스트에서는 Kingfisher를 사용하여 비동기로 이미지를 불러오는 방법을 소개합니다. 이미지를 비동기로 불러오는 방법에는 크게 2가지가 있습니다. 1. 이미지를 불러온 후 UIImageView에 직접 적용하기 이미지를 재가공할 필요 없이 바로 적용할 경우 사용하는 가장 일반적이고 기본적인 방법입니다. 2. 이미지를 불러와서 UIImage로 저장한 후 해당 이미지를 후처리한 후 UIImageView에 적용하기 이미지를 재가공할 필요가 있을 경우 사용하는 방법입니다. 캐싱할 경우에도 사용할 수 있는 방법이 되겠습니다. 어플리케이션을 개발 할 때 두 가지 경우 모두 사용할 수 있기 때문에 알아두시면 좋을 것 같습니다. 1. 이미지의 URL을 통해 바로 UIImageView에 적용하기 특별한 부가 설명..

클라이언트 2020.01.24

iOS Core Data CRUD

Core Data의 CRUD (Create, Retrieve, Update, Delete)를 구현할 때 Fetched Result Controller를 구현하여 사용할 수 있습니다. Core Data는 영구적으로 어떤 데이터를 저장할 수 있도록 해주는 도구인데, 일반적인 Database와는 조금 다른 양상을 보입니다. 하지만 데이터베이스와 유사한 구조를 가지고 있으며 관계 또한 지정할 수 있기 때문에 직관적으로 데이터를 정형화할 수 있습니다. User Defaults와 다른 점은 User Defaults는 Key-Value의 구조를 가지고 있다면 Core Data는 Entity에 다양한 Key들이 있고 Entity에는 Key에 해당하는 값들이 존재합니다. 관계는 데이터베이스에서 1:1, 1:N, N:1,..

클라이언트 2020.01.10

iOS TDD - Unit Test 시작하기

이번 포스트에서는 iOS TDD(Test Driven Development)에 대해 알아보도록 하겠습니다. TDD에는 다음과 같이 세 가지 단계로 구분됩니다. TDD는 실패하는 테스트를 작성하고(red), 작성된 테스트를 통과하는 코드를 작성한 후(green), 작성한 코드를 리팩토링하는(refactor) 세 단계를 거칩니다. 일단 RED 단계를 거치기 위해 [PROJECT PROCESS] 'STEP1'의 기획서를 보고 해당 기능 구현에 대해 요구사항을 정리한 후 테스트 코드(Failing Test Code)를 작성합니다. class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() // Do any a..

클라이언트 2019.12.21

iPad에서 Multiple Windows 다중 창 지원 - (1)

WWDC 19에서 소개된 내용입니다. iPad에서 Multiple Windows를 지원한다는 소식입니다. 기존에는 하나의 앱은 하나의 창만 쓸 수 있었습니다. 분할 창을 쓴다고 해도 다른 앱을 사용해야 했습니다. (예를 들면, 카카오톡 + 사파리, 메모 + 사파리 처럼 서로 다른 어플) 이번 iPad 13이 나오면서 Scene 이라는 개념이 등장했습니다. Xcode 11버전에서 프로젝트를 생성하면 Scene Delegate라는 것이 생성됩니다. 기존에는 App Delegate만 있었는데 이제는 App Delegate와 Scene Delegate가 모두 생기게 됩니다. iPad OS 13이상에서 사용자는 앱 UI의 여러 인스턴스를 동시에 만들고 관리할 수 있으며, app switcher를 사용하여 서로 전..

클라이언트 2019.12.21

Swift - Error Handling (예외 처리)

이번 포스트에서는 Swift에서 예외를 정의하고 발생하는 방법에 대해 알아보도록 하겠습니다. Swift에서는 예외(Exception)를 Error라고 표현합니다. Swift에서 에러는 Error Protocol을 따르는 타입의 값으로 표현할 수 있습니다. Enum을 사용하여 예외를 정의할 수 있습니다. enum AppError: Error { case invalidSelection case insufficientFunds(coinsNeeded: Int) case outOfStock } 예외를 발생시킬 때는 아래처럼 사용할 수 있습니다. throw AppError.insufficientFunds(coinsNeeded: 4) 예외/에러 핸들링 (Exception/Error Handling) Swift에서는 ..

클라이언트 2019.11.29

Struct vs. Class에 대한 정리

이번 포스트에서는 Struct와 Class에 대하여 정리해보도록 하겠습니다. 아무 생각 없이 쓰다가 문득 이런 생각이 들 수도 있는데요 둘이 비슷한 것 같은데 왜 굳이 만들어 놓았을까? 과연 정말 비슷하면 만들어 놓았을까요? Swift에서는 Value-Type(값 타입), Reference-Type(참조 타입)을 제공하고 있습니다. JAVA에서도 이런 비슷한 이야기를 들은 적이 있을텐데 Call-By-Value, Call-By-Reference 가 그것입니다. 단순히 구조적인 차이부터 시작해서 실제 프로그램이 구동할 때 어떤 차이가 보이는지 알아보도록 하겠습니다. 차이점 1. 구조체는 Value-Type, 클래스는 Reference-Type struct Structure { var structValue ..

클라이언트 2019.11.27

Content Hugging vs. Content Compression Resistance

이번 포스트에서는 Content Hugging 속성과 Content Compression Resistance에 대해 알아보도록 하겠습니다. iOS Application을 개발하다보면 Auto Layout을 적용할 때가 있는데 여기에 Content Hugging Priority와 Content Compression Resistance Priority가 있습니다. Content Hugging : 최대 크기에 대한 제한 Content Compression Resistance : 최소 크기에 대한 제한 즉, Content Hugging은 Intrinsic Content Size를 최대 크기로 하여 제한한다는 것을 의미하고 Content Compression Resistance는 Intrinsic Content ..

클라이언트 2019.11.25