Swift 19

[Swift] rethrows란

함수나 메서드는 rethrows키워드를 사용하여 자신의 매개변수로 전달받은 함수가 오류를 던진다는 것을 나타낼 수 있습니다. 최소 하나 이상의 오류 발생 가능한 함수를 매개변수로 전달받아야합니다. 간단한 예제를 보면서 살펴보겠습니다. enum MyError: Error { case cannotDivide } func divideNumber(first: Float, second: Float) throws -> Float { if second == 0 { throw MyError.cannotDivide } return first/second } func calculateFunction(function: (Float, Float) -> Float) { print(function(2, 3)) } calculat..

Swift 2020.02.23

[Swift] 에러처리 전략

안녕하세요. iOS앱을 개발하면서 Swift로 에러처리에 대한 글을 작성해보려고 합니다. 에러처리를 적절하게 선택하면 코드 품질이 향상되고 프로그래머 의도가 명확해집니다. 그래서 언제 무엇을 사용해야하는지를 간단하게 적어보겠습니다. 에러는 크게 두 가지 범주로 나눌 수 있습니다. 프로그래머가 제어할 수 없는 런타임에 대한 에러(Optional, throw) - recoverable 프로그래머의 실수에 대한 에러 (Assertion, FatalError) - non-recoverable 1)Optional 옵셔널은 값이 있을 경우, 없으 경우에 대한 결과를 나타냅니다. try? 표현식을 사용합니다. 언제? - 에러가 간단할 때 예제 func someThrowingFunction() throws -> Int..

Swift 2020.02.23

[Swift] Extension이란

안녕하세요. 이번 글에서는 Swift에서 강력한 기능인 Extension에 대해서 간단하게 정리하려고 합니다. Extension이란 쉽게 말해서 새로운 기능을 추가한다는 개념입니다. 어떤 것들을 추가할 수 있나요? Computed Properties(연산 속성) Double 타입에 km라는 연산 속성을 추가하는 예제입니다. extension Double { var km: Double { return self * 1_1000.0 } } 하지만 저장 속성은 추가할 수 없습니다. 그 이유는 추가하기 위해서는 새 값을 저장하기 위해 추가 메모리가 필요한데 extension은 그런 작업을 관리 할 수 없습니다. Initializers(이니셜라이저) Default Initializers는 추가할 수 있습니다. 하지..

Swift 2020.01.05

[Swift] SwiftLint 적용하기

SwiftLint란 Swift Style Guide에 기반한 Swift 언어 스타일 및 컨벤션 검사 툴. Github : https://github.com/realm/SwiftLint realm/SwiftLint A tool to enforce Swift style and conventions. Contribute to realm/SwiftLint development by creating an account on GitHub. github.com 사용목적 1. 협업을 진행하다보면 각자 다른 코딩스타일로 개발하고 있습니다. 룰을 맞추고 효율적인 코드리뷰, PR을 진행하기 위함. 2.코딩 스타일에 들어가는 리소스를 줄이고 기능 개발, 비즈니스 로직에 집중하기 위함. Install 1. Podfile pod..

Swift 2020.01.05

[Swift] Extension(확장)으로 코드 가독성 올리기

안녕하세요. extension을 잘 사용하여 코드 가독성을 올릴 수 있는 방법을 간단하게 소개하려고 합니다. extension은 언제 사용하는가? extension(확장)은 기존 클래스, 구조체, 열거형, 프로토콜 타입에 새로운 기능을 추가할 때 사용합니다. 구성 및 예제 뷰컨트롤러는 많은 코드를 포함하고 있기 때문에 extension(확장)을 올바르게 사용하면 코드 구성을 크게 향상 시킬 수 있습니다. 일단 크게 Class Block, Private Extension, Protocol Extension 이렇게 분리할 것입니다. 1. Class Block 여기에는 private, public, 오버라이드 메소드, 생명주기 등 내부 메소드가 있는 부분입니다. final class ViewController..

Swift 2020.01.05

[Swift] 구조체란 무엇인가?

구조체란? 프로퍼티 값을 저장하거나 메소드를 제공하고 이것들을 캡슐화하여 표현하는 타입입니다. 구조체는 인스턴스가 값(Value) 타입입니다. 즉, 메모리가 공유되는 것이 아니라 인스턴스가 복사되는 것을 의미합니다. (원본을 변경해도 복사본에는 영향을 끼치지 않음) 특징 - 참조카운트가 없어서 메모리 관리에 안전하다. - 레퍼런스 타입이 아니여서 데이터 공유가 불가능하다. - Immutable 구현에 안전하다. - 상속이 불가능하다. - 클래스 보다 인스턴스 생성이 빠르다. 언제 쓰는 것이 좋은가? - 데이터를 참조하는 것 보다 복사하는 것이 합당할 때 - 데이터 공유가 필요 없는 경우 - 작고 간단한 데이터 - Immutable 구현이 필요한 경우 - 상속받거나 자신을 상속할 필요가 없을 경우

Swift 2020.01.03

[Swift] 델리게이트(Delegate) 패턴이란

델리게이트 패턴이란? 하나의 객체가 모든 일을 처리하는 것이 아니라 어떤 객체가 해야하는 일을 부분적으로 확장해서 대신 처리하는 것을 뜻합니다. 언제 사용해야하는가? 하나의 객체가 해야하는 일이 여러가지일 때 사용하는 것이 적합합니다. 그 외 객체간 소통할 수 있는 방법 Notification은 한 객체의 변화를 여러 객체들이 관찰해야하는 경우. 즉, 수신받는 객체가 많을 때 사용합니다. Closure같은 경우에는 콜백 블럭을 받기 위한 목적이 분명할 때. 즉, 내부의 블록을 호출시키는 코드를 읽고 다시 돌아와서 추적할 일이 없는 경우일 때 주로 사용합니다. 사용할 때 주의사항 Delegate 프로퍼티 변수를 약한 참조(weak)를 사용하지 않는다면 Strong Reference Cycle, 즉 메모리 ..

Swift 2020.01.03

[Swift] 타입메소드, 인스턴스 메소드란

인스턴스 메소드란 클래스, 구조체, 열거형의 인스턴스에 속한 메소드를 의미합니다. 예제 class Temp { func instanceMethod() { print("instanceMethod") } } let temp = Temp() temp.instanceMethod() 인스턴스 메소드를 호출하기 위해서는 Temp를 인스턴스화 후 해당 메소드를 호출해야합니다. 인스턴스 없이 독립적으로 호출할 수 없습니다. 타입 메소드란 타입 자체에서 호출할 수 있는 메소드를 의미합니다. 클래스를 위한 타입메소드는 func 키워드 앞에 class 키워드를 작성합니다. 구조체와 열거형을 위한 타입메소드는 func 키워드 앞에 static 키워드를 작성합니다. 예제 // class class Temp { class fun..

Swift 2020.01.03

[Swift] 노티피케이션 센터와 노티피케이션

iOS 환경에서 사용하는 옵저버 패턴을 사용하는 노티피케이션 센터와 노티피케이션에 대해 알아보려고 합니다. Notification 등록된 노티피케이션에 노티피케이션 센터를 통해 정보를 전달하기 위한 구조체입니다. 주요 프로퍼티 name : 알림을 식별하는 태그 var name: Notification.Namecs object : 발송자가 옵저버에게 보내려고 하는 객체. 주로 발송자 객체를 전달하는데 쓰입니다. var object: Any?cs userInfo : 노티피케이션과 관련된 값 또는 객체의 저장소 예) 특정 행동으로 인해 작업이 시작되거나 완료되는 시점에 다른 인스턴스로 노티피케이션이 발생 시 필요한 데이터를 같이 넘겨줄 수 있습니다.간단한 예로 네트워킹을 이용하는 앱이라면 네트워킹이 시작 및 ..

Swift 2018.09.16

[Swift] DispatchQueue란?

작업항목의 실행을 관리하기 위한 DispatchQueue에 대해 알아보려고 합니다. DispatchQueue는 작업항목의 실행을 관리하는 클래스입니다. 대기열(큐-Queue)에 추가된 작업항목은 시스템이 관리하는 스레드풀에서 처리하고 작업을 완료하면 스레드를 알아서 해제합니다. DispatchQueue의 장점은 일반 스레드 코드보다 쉽고 효율적으로 코드를 작성할 수 있습니다. 주로 iOS에서는 서버에서 데이터를 내려받는다던지 이미지, 동영상 등 멀티미디어 처리와 같이 CPU사용량이 많은 처리를 별도의 스레드에서 처리한 뒤 메인 스레드로 결과를 전달하여 화면에 표시합니다. 그리고 DispatchQueue를 생성 시 기본은 Serial입니다. Concurrent 유형으로 바꾸려면 별도로 명시만 해주면 됩니다..

Swift 2018.09.14