IOS/Swift

    [Swift] ObservableObject이용해 옵저버(Observer) 패턴 구현하기

    [Swift] ObservableObject이용해 옵저버(Observer) 패턴 구현하기

    옵저버 패턴이란? 옵저버 패턴이란 데이터 스트림과 데이터 스트림을 구독하는 구독자로 이루어진 패턴이다. 데이터 스트림은 자신이 가지고 있는 객체가 변화시 변화된 값을 발행하며, 구독자는 이 값을 구독하여 발행된 값을 이용해 특정한 작업을 수행한다. 데이터 스트림은 '발행자'라고 불리기도 해 '발행자 구독자 패턴'이라고 부르기도 한다. ObservableObject란? ObservableObject는 값을 발행하는 객체를 제공하는 Combine Framework의 타입이다. *Combine Framwork는 Swift에서 쓸 수 있는 여러 event-processing operator을 제공해 비동기 작업을 도와주는 프레임웍이다. ObservableObject의 위 특성은 옵저버 패턴을 구현하기 위해 사용..

    [Swift] ViewController의 lifecycle methods 알아보기

    ViewController의 lifecycle methods viewController은 화면에 보여지기 전부터 화면에서 사라질 때까지 다음 5단계의 lifecycle 메서드들을 수행한다. viewDidLoad ↓ viewWillAppear ↓ viewDidAppear ↓ viewWillDisappear ↓ viewDidDisappear 각 단계에 맞는 작업을 수행하는 것이 매우 중요하다. 아래에서 각 메서드가 언제 불리는지 알아보도록 하자. viewDidLoad view가 로드됐을 때 한 번만 불린다. 이 단계에서는 view를 초기화 하는 작업을 한다. viewWillAppear view가 사용자에게 보여지기 전에 불린다. UI 컴포넌트의 visibility를 조절하거나 할 때 유용하다. 이 메서드는 ..

    [Swift] TableView 이용해 화면에 목록 표시하기

    [Swift] TableView 이용해 화면에 목록 표시하기

    TableView란? TableView는 화면에 목록을 표시하기 위한 UI구성요소이다. TableView의 구성요소 TableView는 TableView와 TableViewCell 두가지로 이루어진다. TableView: TableViewCell을 여러개 담기 위한 컨테이너 TableViewCell: 하나의 아이템 TableView 만들기 1. TableView는 TableView에 TableViewCell을 넣는 형태로 만들어진다. 따라서 TableViewCell을 만들 수 있도록 다음과 같이 구조를 만들도록 하자. 이 때 TableViewCell의 Identifier은 ResuableCell이 된다. 2. 우리는 UITableView의 각 아이템을 만들기 위해 UITableViewDataSource ..

    [Swift] 위치 권한 요청 방법 및 요청 문구 변경 방법 알아보기

    [Swift] 위치 권한 요청 방법 및 요청 문구 변경 방법 알아보기

    위치 권한 요청 방법 iOS 의 위치 권한 요청은 다음의 3단계로 이루어진다. CoreLocation 모듈 추가 CLLocationManager 초기화 CLLocationManager에서 location 권한 요청 import CoreLocation // 1. CoreLocation Module Import class [클래스명]: UIViewController { let locationManager = CLLocationManager() // 2. CLLocationManager 초기화 override func viewDidLoad() { super.viewDidLoad() locationManager.requestWhenInUseAuthorization() // 3. Location 요청 } 위치 권..

    [Swift] extension 키워드 이용해 타입 기능 확장하기

    클래스 기반 모델의 문제점 클래스 기반 모델은 보통 protocol(interface)를 확장하는 방식으로 함수를 만들어낸다. 하지만, 문제는 하나의 클래스는 하나의 protocol만을 확장하지 않는 경우가 많다는 것이다. 특히 iOS의 ViewController의 경우는 여러 기능이 들어가야 하기 때문에 여러 protocol을 상속받는다. 하지만 여러 프로토콜을 상속받게되면 하나의 클래스에 여러 함수를 구현해야 되기 때문에 클래스가 복잡해진다. 예를 들어 사람 클래스에 커피샵 직원 프로토콜과 Programming을 위한 프로토콜을 상속한다고 해보자. 그러면 다음과 같이 Person class가 매우 커진다. class Person : CoffeeShopEmployee, Programming{ func ..

    [Swift] Background Thread에서 Task 실행하기

    Background Thread에서 Task 실행이 필요한 이유 예를 들어 우리가 서버에 특정한 데이터를 보내줄 것을 요청을 했다고 해보자. 그러면 다음과 같이 URLSession을 만들고 URLSession의 dataTask를 이용해 데이터를 받아온다음 메서드를 수행해야 한다. func performURLRequest(with urlString: String) { if let url = URL(string: urlString) { let session = URLSession(configuration: .default) let task = session.dataTask(with: url) { (data, response, error) in //get responseData self.dosomeThing(..

    [Swift] internal parameter name과 external parameter name

    Swift func의 parameter Swift func는 external parameter name과 internal parameter name이라는 신기한 기능이 있다. 이것은 외부에서 받을 파라미터 이름과 내부에서 사용할 파라미터의 이름을 구분하기 위해 만들어진 것인데 다음과 같은 구조로 되어 있다. 이루어진다. func [func name]([external] [internal]: Int) -> Int { } 예를 들어 더하기를 위한 func을 만든다고 해보자. 이때 외부에서 받을 파라미터 이름을 n1과 n2로 하고 내부에서 사용할 이름을 number1과 number2로 한다면 func이 다음과 같이 만들어질 수 있다. func add(n1 number1: Int,n2 number2: Int) ..

    [Swift] JSONDecoder 사용하여 JSON 데이터 파싱하기

    JSONDecoder란? JSONDecoder는 JSON 데이터를 Swift는 객체로 파싱하도록 도와주는 Decoder이다. JSONDecoder 사용하기 JSONDecoder을 이용해 JSON을 Swift 객체로 파싱하기 위해서는 다음의 과정이 필요하다 Decodable을 상속 받는 struct 생성하기 Decodable에 저장된 데이터를 파싱하기 Decodable struct 만들기 Decodable 객체를 만들기 위해서는 JSON이 무엇인지 이해해야 한다. JSON이 무엇인지 모른다면 먼저 아래의 글을 통해 JSON이 무엇인지 알고보자. [JSON] JSON은 무엇인가? JSON이란 JSON(JavaScript Object Notation) 은 데이터를 키(key)-값(value) 쌍으로 만들어 저..

    [Swift] 함수형 프로그래밍 알아보기 : 클로저(Closures), 일급객체

    [Swift] 함수형 프로그래밍 알아보기 : 클로저(Closures), 일급객체

    스위프트와 함수형 프로그래밍 스위프트는 함수형 프로그래밍을 지원하는 프로그래밍 언어이다. 함수형 프로그래밍에서는 함수가 일급객체가 된다. 일급객체란 변수를 뜻한다. 즉, 함수를 기존 변수들처럼 주고 받을 수 있는 것이 바로 함수형 프로그래밍이다. 함수를 변수로 바꿀 수 있으면 코드가 매우 간결해지고 직관적이 된다. 자 그러면 함수형 프로그래밍에서 함수를 어떻게 변수로 주고 받는지를 살펴보자. 우리가 2개의 숫자를 더하거나 곱하는 앱을 만든다고 해보자. 우리가 변수로 함수를 쓰지 못한다고 할 때 다음과 같이 코드를 만들 수 있다. func calculator(number1: Int, number2: Int, operation: String) -> Int { switch (operation) { case "..

    [Swift] protocol이란 무엇인가?

    [Swift] protocol이란 무엇인가?

    protocol이란? protocol은 타입으로 Swift의 class나 struct의 행동(func)을 정의하는 역할을 한다. *Java, Kotlin, Dart, C#의 interface와 같은 역할을 한다. 보통 프로그래밍에서의 protocol(프로토콜)이라 함은 프로그램(컴퓨터) 간에 데이터를 교환 방식을 정의하는 규칙을 말한다. 즉, 프로토콜은 코드 구현이 없는 규칙일 뿐이다. 따라서 프로토콜을 사용하는 프로그램에서 프로토콜을 보고 구현을 한다. Swift에서도 마찬가지로 protocol은 행동을 정의하기만 할뿐 구현을 하지 않는다. protocol의 특징 protocol은 행동을 정의한다. protocol은 타입이다. protocol은 행동을 정의한다 예를 들어 Shop protocol이 있다..