Dynamic Key decoding
·
프로그래밍언어/swift
👋 들어가기 전또 다시 오랜만에 포스팅을 하게 됐다. 지금은 익명의 프로젝트에 급작스럽게 합류하여 앱 개발을 하던 중 신선한 경험을 하게되어그 경험을 적어보려한다.  이번 시간의 주제는 동적 키 형태를 디코딩 하는 방법을 간단하게 정리해보자.✊ 문제발생만약 서버에서 다음과 같은 형태로 데이터를 보낸다면 우리는 어떻게 처리해야할까 ??// Case1{ "data": { "a":100 }}// Case2{ "data": { "b": nil }}// Case3{ "data": { "c": -100 }} 어디가 불편할까 ??  data안의 key값이 계속 변하는 상황이다..☝️서버 개발자님 "해줘"서버 개발자님 key값 통일해주세요 ~~ 단 칼에 거절 백엔드 상황을 들어보니 충분히..
GC vs ARC
·
프로그래밍언어/swift
👋 들어가기 전Swift를 주 언어로 사용하면서 ARC에 대한 내용은 많이 살펴봤지만 군대에서배운 나의 첫 언어 JAVA의 메모리 관리 도구인 GC(Garbage collector)에 대해서는 따로 깊게 알아보지 않았다.  이해하기 쉽게 ARC와 비교하며 이번 기회에 두개의 개념을 다시 정리해보자.🗑️ ARC 먼저 익숙한 ARC 부터 살펴보자. Automatic Reference Counting의 약자로  말그대로 자동적으로 참조 카운팅을 기반으로 메모리를관리하는 기술이다.🎉 등장 배경Objective-C에서는 MRC(Manual Reference Counting)를 사용했다. 즉, 할당과 해제를 개발자가 직접해줬다. 하지만 휴먼에러가 발갱하는 위험이 있기 때문에 이 역할을 자동으로 하는 기술이 바..
클로저와 self
·
프로그래밍언어/swift
클로저간단하게 클로저를 먼저 정리해보자.함수는 이름이 있는 클로저클로저는 1급 객체이다.클로즈는 참조타입이므로 기본적으로 힙에 할당된다.Closure란 내부 함수와 내부 함수에 영향을 미치는 주변 환경을 모두 포함한 객체이다.클로저 캡처클로저 캡처란 매개변수나 지역변수가 아닌 외부 context를 사용하기 위해 주변 외부의 context를 참조하는 것클로저는 값을 캡처할 때, Value / Reference 타입에 관계 없이 모두 Reference 캡처를 사용한다. 즉 , 참조를 한다는 뜻캡처 리스트 값 타입은 값을 복사해서 캡처 - 외부 요인에 의한 값 변경을 방지!참조 타입은 캡처리스트 내에서 weak, unowned 참조 선언 (강한 참조 해결)클로저와 self @escaping 키워드클로저와 s..
swift 기본 타입
·
프로그래밍언어/swift
Swift 기본 타입많이 늦은 감이 있지만...  이번 시간에 정리하고 가자. 타입비트범위특징Bool1비트true / false 참과 거짓을 나타내는 논리형 데이터Character가변적 유니코드유니코드 스칼라 값 (최대 21비트)단일 유니코드 문자String가변적 유니코드 문자열 길이에 따라 다름유니코드 문자들의 시퀀스, 길이에 따라 동적으로 크기가 변함Int88비트-128 ~ 1278비트 정수Int1616비트-32,768 ~ 32,76716비트 정수Int3232비트-2,147,483,648 ~ 2,147,483,647-21억 ~ 21억32비트 정수Int6464비트-9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807-922경 3,372조 3,685억 4,775..
디스패치 학습하기 (4) [ Extension Dispatch ]
·
프로그래밍언어/swift
이번 학습은 extension에서 동작하는 dispatch를 알아보자.extension을 할 수 있는 3가지 경우는 다음과 같다.값 타입에서 확장래퍼런스 타입에서 확장프로토콜에서 확장각 각의 상황에서 어떤 디스패치가 동작하는 지 알아보자. Value Type 확장 시 Dispatch상속의 가능성이 없기 때문에, 확장(exension)을 해도 Static Dispatch로 동작한다. struct Human { func sayHello() { print("Hello Human!") }} extension Human { func sayHo() { print("Ho~~") }} let human: Human = .init()human.sayHello() ..
디스패치 학습하기 (3) [ Value Type Dispatch, Protocol Dispatch ]
·
프로그래밍언어/swift
이번에는 단순한 값 타입과 프로토콜을 이용 했을 때 동작하는 Dispatch를 알아보자 Value Type에서의 DispatchValue Type인 구조체, 열거형은 상속을 할 수 없다는 특징 때문에 오버라이딩이 될 가능성이 없고, 따라서 Static Dispatch 를 사용한다 Protocol에서의 Dispatch프로토콜은 기본적으로 메서드의 선언부만 제공하기 때문에 실제 사용할 때 프로토콜 타입을 참조로만 사용할 경우 해당 인스턴스에 맞는 메서드를 호출해야하므로 Dynamic Dispatch를 사용한다.  두개의 struct가 Human 프로토콜을 채택했지만 왼쪽은 값타입인 구조체를 이용했기 때문에 Static Dispatch가 이루워지고 오른쪽은 프로토콜을 타입을 사용했고 해당 인스턴스 타입에 맞..