Swift

    [Swift] COW(Copy-on-Write)에 대하여

    mutating 키워드를 찾아보다가 알게된 cow에 대한 개념을 정리한 글입니다. COW (Copy-On-Write) 직역하면 쓰기(Write)에서 복사(Copy) 한다는 뜻이다. 이것을 설명하기 위해 예를 들어보자. 우리가 알고있는 구조체는 값 타입이기 때문에 새로운 변수로 값이 전달될때 값 복사가 일어난다고 알고 있지만 사실은 조금 다르다. Swift에서 기본 데이터 타입(Int, Double, String)과 컬렉션 타입(Array, Dictionary)은 구조체로 구현돼있지만 아래 같은 상황에서 값 복사가 일어나지 않는다. var first = [1, 2, 3, 4, 5] var second = first var third = first 만약 first의 원소 개수가 대략 천만개라면 값을 전달할때..

    [Swift] JSON 객체를 구조체로 변환하기

    일반적으로 Swift에서 API를 통한 HTTP통신으로 데이터를 주고받을때 Data 타입의 객체를 사용했는데, 소켓 통신을 하면서 JSON 형식의 객체(JSON Object)를 사용했다. JSON 객체를 바로 사용하기엔 불편함이 많아서 구조체로 바꾸기 위해 사용했던 방법을 기록한다. 이전까지 뜻을 정확히 모른 상태에서 사용하다가 이번 기회에 JSON에 대해 알아봤다. JSON이란? JavaScript Object Notation의 약자로 자바스크립트 언어에서 배열 또는 키-값 쌍으로 이루어진 데이터 객체를 전달하기 위해 사람이 읽을 수 있는 텍스트 형식을 사용하는 포맷이다. 프로그래밍 언어와 플랫폼에 독립적이라는 특징이 있어서 다양한 환경에서 사용되며 Swift에서도 객체를 JSON 형식으로 변환하거나 ..

    [Swift] Singleton과 Thread-Safe

    여러 개의 뷰 컨트롤러가 유저의 아이디와 닉네임을 사용해야하는 상황이 있었다. 각 뷰 컨트롤러 클래스에 유저의 아이디와 닉네임을 저장하는 프로퍼티를 정의하여 초기화 시 그 값들을 넘겨주는 방식이었는데, 그렇게 하지않고 유저 정보를 저장하는 공유 객체를 만들어서 필요할때마다 참조하면 편할 것 같다는 생각이 들어 싱글톤 디자인 패턴을 적용하려고 했다. 로그인이 완료된 시점에 싱글톤 객체를 생성하고 로그아웃 시 객체 메모리를 해제하는 방법을 찾다가 우연히 Thread-Safe에 대해 공부하게 된 것을 정리한다. 보통 Swift에서 싱글톤 패턴 구현 방법을 찾으면 아래의 방법이 사용된다. class Singleton { static let shared = Singleton() private init(){} } ..

    [Swift] 초기화(Initialization)란?

    이 글은 스위프트 공식 문서를 한국어로 번역한 Swift Language Guide의 초기화 챕터를 간단하게 정리한 글 입니다. 공식 문서를 번역해주신 분들에게 감사의 말씀을 전합니다. 초기화란? 초기화는 클래스, 구조체, 열거형 타입의 인스턴스를 사용하기 위해 준비하는 단계로서, 타입마다 초기자(initializer)를 정의하여 초기화할 수 있습니다. 초기자는 init 이라는 키워드를 사용하여 정의할 수 있고 이때 여러 파라미터를 갖도록 만들 수 있습니다. 인스턴스를 사용하기 위해서는 내부의 모든 저장 프로퍼티가 초기값을 갖고 있어야 합니다. 따라서 저장 프로퍼티의 선언과 동시에 값을 할당하여 기본값을 설정하거나 그렇게 하지 않고 초기자를 통해 특정 값을 갖도록 할 수도 있습니다. 1. 옵셔널 타입의 ..