[디자인패턴] 디자인 패턴을 사용하는 이유
·
CS/디자인패턴
서론 MVVM을 포함한 다른 디자인 패턴 포스팅을 작성하기 전에, 디자인 패턴을 왜 사용하는지를 먼저 알아야겠다고 생각했습니다. 왜 쓰는지도 모르는데 종류는 뭐있고 어떤 특성이 있는지 알아봤자 뭐해요!? 오늘 디자인 패턴을 사용하는 이유에 대해 알아두고 이후에 세부적인 패턴을 공부해봅시다. 디자인 패턴이란? 소프트웨어 설계 시 특정 맥락에서 자주 발생하거나, 공통적인 문제들을 해결하기 위한 방법 중 하나입니다. 과거 개발 과정에서 발견된 설계의 노하우를 축적하고 재사용하기 좋은 형태로 정리한 일종의 설계 디자인 방법론입니다. 요즘에는 디자인 패턴과 소프트웨어 아키텍처를 통칭하여 사용하는 것 같습니다. (개인적인 의견임) 실제로는 소프트웨어 아키텍처가 디자인 패턴보다 더 큰 범위이지만 공통되는 개념으로 인..
[Swift] GCD(Grand Central Dispatch) - 2 / Dispatch Queue
·
Swift/개념 & 응용
* GCD 포스팅은 2편으로 구성되어 있습니다. 1편은 여기에서 볼 수 있습니다. Dispatch Queue 종류 Dispatch Queue는 세 가지 종류가 있습니다. Main Queue, Global Queue, Custom Queue 인데요. 하나씩 알아보도록 합시다. Main Queue Main Queue는 Main Thread에서 작업을 보관하고 수행하는 Queue입니다. Main Thread에서 동작하기 때문에 단 하나만 존재할 수 있고, 자연스럽게 Serial 특성을 갖습니다. (Concurrent는 여러 Thread로 분산해야 하는데 Queue가 단 하나만 존재하므로 분산될 수가 없다) Main Queue는 UI 업데이트를 담당하는데요. 화면 위에 UI를 그리는 작업을 Main Queue에..
[Swift] GCD(Grand Central Dispatch) - 1
·
Swift/개념 & 응용
* GCD 포스팅은 총 2편으로 작성되었습니다. 1편에서는 GCD가 무엇인지, serial/concurrent, sync/async에 대해 알아봅니다. 2편에서는 Dispatch Queue의 종류와 특성에 대해 알아볼 계획입니다. GCD(Grand Central Dispatch)란? Dispatch, also known as Grand Central Dispatch (GCD), contains language features, runtime libraries, and system enhancements that provide systemic, comprehensive improvements to the support for concurrent code execution on multicore hardwa..
[Swift] async/await와 [weak self]
·
Swift/개념 & 응용
서론 최근 completion handler를 async/await로 리팩토링하면서 [weak self]에 대해 궁금한 점이 생겼습니다. 이번 포스팅은 자세한 내용이 아니라 간단 궁금증 해결(?)인 점 이해해주시고 틀린 점이 있다면 댓글로 알려주시면 감사하겠습니다. completion handler completion Handler는 escaping 클로저를 이용한 비동기 처리 방법입니다. 클로저도 참조 타입 중 하나이기 때문에 클로저에서 self를 사용하게 되면 클로저와 self 사이에 강한 순환 참조가 생기게 됩니다. 강한 순환 참조가 발생하게 되면 ARC에 의해 메모리 해제가 되지 않아 메모리 leak이 발생하게 됩니다. 그래서 문제를 방지하고자 completion handler를 이용할 때는 [w..
[iOS] 카멜레온 개발 일지 - 6 (async/await 적용하기)
·
iOS 프로젝트/카멜레온
completion handler 리팩토링 기존 비동기 처리를 completion handler를 이용했습니다. (자세한 내용은 여기를 확인해주세요.) 최근에 공부한 async / await를 이용해 리팩토링을 진행해보았습니다. 이번 포스팅에서는 아주 일부분만 간단하게 다루려고 해요! 그럼에도 코드가 달라진게 충분히 보이거든요. 기존 코드 오늘 포스팅에서 다룰 코드는 파이어베이스에서 최신 버전과 강제 업데이트 버전을 가져오는 역할로 아래 로직을 수행합니다. 파이어베이스에서 version 값을 읽는다 version 값을 읽은 뒤 version/data를 가져온다. 1번이 끝난 뒤 2번이 진행돼야 하기 때문에 completion handler를 이용해 처리했습니다. FirebaseService.shared...
[Swift] 공식 문서 - Automatic Reference Counting(ARC)
·
Swift/Swift 가이드
안녕하세요. 개발하는 정주입니다. 오늘은 "Automatic Reference Counting"를 정리해보겠습니다. * 완벽한 번역이 아닌 내용을 한 줄 한 줄 읽는 것에 의의를 두었습니다. * 파파고의 힘을 빌려 번역했으며 잘못된 번역이 있다면 댓글로 알려주세요. 새로 배운 점 참조 카운트는 클래스의 인스턴스에서만 적용된다. ARC는 메모리 해제 뿐만 아니라 메모리 할당, 추적의 역할도 한다. 약한 참조는 다른 인스턴스의 수명이 더 짧을 때 사용해야 한다. 미소유 참조에 대한 개념 미소유 참조는 다른 인스턴스의 수명이 같거나 더 길 때 사용해야 한다. 모두 nil이 허용되면 weak를 이용해 강한 순환 참조를 방지한다. nil이 허용되는 하나의 속성과 nil이 될 수 없는 다른 속성일 때는 unowne..
[Swift] 공식 문서 - Opaque Types
·
Swift/Swift 가이드
새로 배운 점 Opaque 리턴 타입을 갖는 함수나 메서드는 리턴 값의 타입 정보를 숨깁니다. 함수의 리턴 타입으로 프로토콜 타입을 사용하는 것은 프로토콜을 준수하는 어떠한 타입을 리턴할 수 있다는 유연성을 제공합니다. 너무 어렵다... Opaque Types 오페이크(Opaque) 리턴 타입을 갖는 함수나 메서드는 리턴 값의 타입 정보를 숨깁니다. 함수의 리턴 타입으로 구체적인 타입을 제공하는 대신에, 리턴 타입은 프로토콜이 제공하는 것으로 묘사될 수 있습니다. 리턴 값의 내부 타입이 private로 남아있을 수 있기 때문에 타입 정보를 숨기는 것은 모듈과 모듈을 호출하는 코드 사이의 경계에서 유용합니다. 타입이 프로토콜인 값을 리턴하는 것과는 달리, opaque 타입은 타입 identity를 유지합니..
[Swift] 공식 문서 - 제네릭(Generics)
·
Swift/Swift 가이드
새로 배운 점 제네릭은 Swift에서 가장 강력한 기능 중 하나이며, 대부분의 Swift 표준 라이브러리는 제네릭 코드로 빌드됩니다. 하나 이상의 타입 파라미터를 사용할 수 있는데, 각 타입 파라미터는 꺽쇠 괄호 내에서 콤마로 구분해 작성하면 됩니다. 타입 파라미터가 사용되는 제네릭 타입 또는 함수 간의 관계를 내포하는 이름을 사용합니다. 의미있는 관계가 없다면 T, U, V처럼 영문자를 관례로 사용합니다. 제네릭 타입을 확장할 때, 익스텐션(extension)의 정의의 일부로 타입 파라미터 리스트를 제공하지 않아도 됩니다. 원본 타입 정의에서 타입 파라미터 리스트를 익스텐션의 바디 내에서 사용할 수 있고, 원본 타입 파라미터의 이름들은 원본 정의에서의 타입 파라미터를 참조하는데 사용됩니다. 타입 제약은..
[Swift] 프로토콜(Protocols) 간단 실습
·
Swift/개념 & 응용
서론 이 포스팅은 프로토콜-1과 프로토콜-2를 실습하는 내용입니다. 자세한 개념은 위 두 개의 프로토콜 가이드 포스팅을 참고해 주세요! 참고로... 이번 포스팅에서는 정의와 채택하는 방법을 주로 실습합니다. Delegation 내용이 한 번에 이해하기가 힘들더라고요. 내용도 많고 중요하기도 해서 이 부분은 따로 포스팅하기로 했습니다. 따라서 이번 포스팅은 간단히 어떻게 사용하는지를 알아보는... 초간단 실습 포스팅으로 생각해주시면 감사하겠습니다 ㅎㅎ; 프로토콜 정의와 채택 프로토콜은 메서드와 프로퍼티, 특정 Task나 일부 기능에 적합한 다른 요구사항들의 청사진(상세한 계획)을 정의합니다. 프로토콜 정의는 protocol 키워드를 이용해 가능합니다. protocol SomeProtocol { // pro..
[Swift] 공식 문서 - 프로토콜(Protocols) - 2
·
Swift/Swift 가이드
* Protocols 가이드 1편은 여기에서 볼 수 있습니다. 새로 배운 점 제네릭(generic) 타입은 프로토콜 이름 뒤에 where 절이 있을 때만 프로토콜의 요구사항을 만족합니다. Swift는 다음과 같은 커스텀 타입에 대해 Equatable 구현을 제공합니다. Equatable을 따르는 저장 프로퍼티만 가진 구조체 Equatable을 따르는 associated 타입만 가진 열거형 associated 타입이 없는 열거형 Swift는 다음과 같은 커스텀 타입에 대해 Hashable 프로토콜을 따르도록 할 수 있습니다. Hashable을 따르는 저장 프로퍼티만 가지고 있는 구조체 Hashable을 따르는 associated 타입만 가지고 있는 열거형 associated 타입이 없는 열거형 raw va..
유정주
'분류 전체보기' 카테고리의 글 목록 (22 Page)