스위프트

    [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] 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] Struct와 Class의 차이는 무엇인가?

    [Swift] Struct와 Class의 차이는 무엇인가?

    Struct와 Class의 차이 Struct와 Class는 데이터 저장 방식, 가변성(Mutability), 상속 측면에서 다르다. 첫 째, Struct는 그 자체로 값으로 저장이 되지만 Class는 변수에 객체에 대한 주소값을 저장한다. 둘 째, Struct는 기본적으로 Immutable하지만 Class는 Mutable하다. 때문에 Struct의 내부 변수값을 바꾸기 위해서는 mutating이라는 강제로 mutability를 부여하는 접두어를 붙여야 한다. 셋 째, Struct는 상속이 불가능하지만, Class는 상속이 가능하다. 이는 불변성의 연장선으로 볼 수 있다. 데이터 저장 방식 struct의 데이터는 그 자체가 값으로 저장이 된다. 따라서 기존 struct가 새로운 struct에 할당되면 기존..

    [Swift 제어문] switch case 사용해 다중 조건 처리하기

    [Swift 제어문] switch case 사용해 다중 조건 처리하기

    switch case문 이란? switch case 문은 많은 분기를 처리하기 위해 만들어진 문법이다. switch 문의 필요성 if else 문으로 다양한 조건을 처리하려면 else if 를 무한 반복해야 하는데 이는 가독성을 매우 떨어트린다. if value == "A" { print("value is A") } else if value == "B" { print("value is B") } else if value == "C" { print("value is C") } ... 프로그래밍은 가독성이 매우 중요하므로, 분기가 4개 이상인 상황에서는 다음과 같이 switch case 문을 사용해 분기를 처리하는 것이 좋다. let value = "Hello Swift" switch(value){ case..

    [Swift 제어문] if 문 다루는 방법 한 번에 정리하기

    [Swift 제어문] if 문 다루는 방법 한 번에 정리하기

    if문이란? if문이란 제어구조의 일종으로 조건을 만족하면 if문제 종속된 블록을 수행하고 조건을 만족하지 못하면 수행을 하지 않도록 하는 프로그래밍 문법을 뜻한다. Swift의 if문 Swift의 if문은 다음의 구조를 따른다. if부터 '{' 전까지 괄호 없이 Condition을 써야 하며, '{ }' 로 감싸진 블록에 수행할 함수를 넣는다. if Condition { Block } 예를 들어 다음과 같이 사용할 수 있다. let value = "DBlog" if value == "DBlog" { print("value is DBlog") } 위 코드를 수행하면 결과는 다음과 같다. else if 문 사용해 여러 조건 만들기 여러 조건을 사용하려면 를 치려면 else if 문을 사용하면 된다. 앞에 ..

    [Swift] Optional을 다루는 다양한 방법 : nil 다루기

    [Swift] Optional을 다루는 다양한 방법 : nil 다루기

    Optional을 다루는 것이 필요한 이유 nil 이 가능한 타입을 다루기 위해서 Swift는 Optional을 사용한다. 하지만 Optional로 값이 오게 되면 Optional로 감싸여 있어 그 안에 있는 값을 사용하기 위해서는 Optional을 제거해야 한다. 이번 글에서는 다음의 dictionary를 사용해 Optional 타입의 변수가 들어왔을 때 어떻게 처리해야하는지에 대해 알아볼 것이다. let dictionary : [String : Int] = ["A" : 0, "B" : 1, "C" : 2] ! 을 이용한 옵셔널 강제 제거 첫 째로 !을 이용해 Optional을 강제 제거하는 방법이 있다. 예를 들어 아래와 같이 dictionary에서 값이 Optional로 오는 상황을 가정해보자. d..