iOS Dev/Swift
Swift Reference Count 고찰 ( with side table )
Swift ARC 의 기본적인 개념은 아래 포스팅을 참고해주시면 감사하겠습니다. Swift ARC ( Automatic Reference Counting ) 정리 추상적으로 "메모리를 관리해주는 것" 으로 이해하고 있었지만, JAVA 의 GC ( 가비지 컬렉터 ) 와의 차이점을 명확하게 설명하게 어려워서 포스팅을 작성했습니다. 프로그래밍 언어의 메모리 관리 linux-studying.tistory.com 필자는 iOS 를 처음 공부하며 클로저 캡처리스트를 작성할 때 unowned 를 남발했던 기억이 있습니다. 그 후 앱 크래시를 유발할 수 있다는 조언을 듣고 강한 순환 참조가 발생할 수 있는 상황에서는 weak 키워드를 사용했습니다. weak 와 unowned 를 사용하면 레퍼런스 카운트가 올라가지 않고..
iOS JSON 을 Decoding 하는 여러 가지 방식들
JSON 는 자바스크립트에서 객체를 표현하는 방식으로 REST API 에서 널리 사용되는 방식입니다. iOS 에서는 Codable 을 통해 쉽게 JSON 을 디코딩할 수 있는데요. Codable 과 Dictionary 로 디코딩 하는 방법을 살피고 예외적인 상황까지 이번 포스팅에서 다루고자 합니다. Codable Codable 은 Decodable & Encodable 프로토콜을 모두 준수하는 타입입니다. 따라서 Encode 할 필요가 없다면 Decodable 만 채택해도 네트워킹 처리에는 문제가 없습니다. Decodable 는 프로토콜이기 때문에 Class, Struct, Enum 모두 채택할 수 있습니다. 추가적으로 CodingKeys 를 통해 Key 값을 변경할 수 있습니다. Encode and D..
지금까지 받았던 코드 리뷰 정리 ( iOS, Swift )
부스트코스 iOS 과정을 수료하면서 조언 받았던 내용을 정리합니다. 1. 프로퍼티/메서드를 private 로 선언 후 필요에 따라 Access Control 를 조정한다. OOP 정보은닉과도 관련되어 있는 내용입니다. 소프트웨어 유연성을 늘리기 위해서는 객체간의 의존성을 낮추는 것이 중요한데요. 모든 프로퍼티/메서드가 Internal 로 설정되어 있다면, 어떤 부분이 외부에서 접근 가능한지 파악하기 어렵지만, 필요한 부분만 Access Control 를 조정한다면 개발자가 이를 파악하기 쉬운 장점이 있습니다. 2. Retain Sycle 을 방지하기 위해 Weak, Unowned 키워드를 적절하게 사용한다. Swift 는 ARC 를 통해 메모리를 관리합니다. GC 보다 효율적이지만, 개발자의 오판에 의해..
Swift Optional ( enum, wrapped ) 정리
Swift 는 다른 언어와 다르게 Optional 이라는 타입으로 nil 을 처리 합니다. ( nil == Null ) 일반 변수에 nil 값은 대입이 불가하고 nil 사용이 필요할 때 Optional 타입을 사용합니다. 내부 구현은 Enum (열거형) 으로 이루어져 있고, 값이 없는 none 케이스와 값이 존재하는 some 케이스를 가지고 있습니다 * 은 Generic 이다. * @frozen 어노테이션은 Swift 4.2 에 추가된 기능으로 Enum Type 에 더이상 추가될 Case 가 존재하지 않음을 명시해준다. ( Default Case 필요 X, 컴파일 속도 향상 ) Optional 선언 선언은 다음과 같습니다. Optional 으로 선언하고 값이 존재한다면 some 존재하지 않다면 none ..
Swift ARC ( Automatic Reference Counting ) 정리
추상적으로 "메모리를 관리해주는 것" 으로 이해하고 있었지만, JAVA 의 GC ( 가비지 컬렉터 ) 와의 차이점을 명확하게 설명하게 어려워서 포스팅을 작성했습니다. 프로그래밍 언어의 메모리 관리 C, C++ 과 같은 언어는 Heap 영역에 할당된 메모리를 개발자가 직접 관리하지만 대부분의 현대적인 언어들은 포인터를 언어 내부적으로 사용하고 ( 감추고 ) 메모리를 자동적으로 관리합니다. 이에 크게 두가지 방식이 있습니다. RC ( Reference Count ) 사용 언어: Swift, Rust ... 참조 시점: Complie time 특정 객체가 참조되면 Count 를 1 증가시키고, 반대로 참조 해제되어 Count 가 0이 되면 메모리에서 객체를 해제하는 기술입니다. 장점 : 컴파일 시점에 적용되므..
윈도우 10 에서 Swift 5 사용하기 ( Visual Code, WSL )
Swift 는 공식적으로 Mac OS, Linux 계열 OS를 지원하고 있습니다. Swift For Windows 라는 오픈소스 프로젝트가 있지만, Swift 4.1.2 버전까지만 지원되고 유지 보수가 중단되어 사용에 어려움이 있습니다. 이번 게시글에서는 윈도우 10의 WSL (리눅스 서브 시스템) 기능을 활용하여, Swift 개발 환경을 구축하는 방법을 다루겠습니다. 1. WSL 설치하기 * 윈도우 10 / 64 비트 환경에서만 설치가 가능합니다. 윈도우 키를 누르고 "Windows 기능 켜기/끄기" 를 검색하여 제어판에 들어갑니다. "Linux용 Windows 하위 시스템" 옵션을 체크하고 확인을 누릅니다. 윈도우가 재부팅 되고, 설치가 진행됩니다. 재부팅이 완료되면, Microsoft Store 에..
iOS "UITableView Section Header 로드되지 않는 문제" 해결
위 영상처럼 처음 로드했을 때에는 섹션 헤더가 제대로 보이지만, ( xib 를 사용한 Custom Section Header ) 나중에 해당 섹션만 reload 했을 때 Section Header 가 보이지 않는 문제가 발생했습니다. Stack Overflow 에 나와있는 일반적인 해결 방법은 아래와 같습니다. 1. UITableViewDelegate 프로토콜에서 heightForHeaderInSection 리턴하기. 2. reloadRows 대신 reloadSection 으로 해당 섹션 리로드 하기 제 경우에는 위 두가지 방식으로도 해결되지 않아서 구글링을 하며 더 찾아보았습니다. // UITableView Delegate func tableView(_ tableView: UITableView, vie..