일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
- 오브젝트
- 책임주도설계
- 상속
- 서브 타이핑
- OOP
- 명령-쿼리 분리
- 객체지향
- 일관성 있는 협력
- 설계 재사용
- OCP
- 알고리즘
- '기존 설계 재사용
- 객체 생성 사용 분리
- 의존성
- 믹스인
- 다형성
- Swift#flatMap#map#Monad#함수형 프로그래밍#Optional
- 런타임 의존성
- 합성
- 유연한 설계
- 유여난 설계
- 상속 조합 폭발적 증가
- dip
- 행동 호환성
- 메서드를 통한 해결
- iSP
- 추상화
- 컴파일 타임 의존성
- 하향식 접근
- Apple # HIG #iOS15 #iOS14 #Human #Interface #Guidelines #Apple developer # Apple human interface guidelines
- Today
- Total
목록전체 글 (62)
도니의 iOS 프로그래밍 세상

1. Swift Concurrency의 도입 배경 iOS 13.0부터 도입된 Swift Concurrency는 비동기 프로그래밍을 보다 편리하게 할 수 있습니다. 그전에, Escaping closure를 사용해서 비동기 처리하는 방식의 문제점은 두가지였습니다. 첫번째로, 가독성이 좋지 않고, 복잡한 코드일수록 중첩된 클로저를 계속해서 작성해야 합니다. 두번째로, 중첩 클로저를 작성하며 에러코드 작성까지 완벽하게 하는 것은 힘들며 이로인해 프로그램 버그를 유발할 수 있습니다. 밑에 코드를 살펴보시죠. 해당 함수는 썸네일 이미지를 다운로드 받는 함수입니다. 이때, 이미지를 서버로부터 다운로드 받을때 escaping closure가 호출됩니다. 그리고 받은 데이터를 가지고 다시 prepareThumnail이라..

지난 포스팅글에서는 ARC의 정의, weak unowned, strong reference cycle, closure와 clousure 순환참조에 대해서 알아봤습니다. 이번 시간에는 UIkit에서 흔하게 발생할 수 있는 delayed deinitialization, memory leak에 대해서 알아보겠습니다. Escaping Closure와 Non-escaping closure 두가지 사례로 나뉩니다. Escaping Closure에서의 Memory leak Escaping Closure는 함수가 반환된 후 호출되는 클로저를 의미합니다. 해당 클로저는 함수가 실행이 완료된 이후에도 별도로 동작하기 때문에 클로저 실행이 완료되어야 메모리에서 해제가 가능합니다. 이러한 성질로 인해 메모리 leak을 유발시..

안녕하세요, 지난 시간에는 ARC의 정의, Strong Reference Cycle, weak unowned의 차이에 대해서 공부했습니다. 이번 시간에는 weak unowned의 예시로 들었었던 View Controller의 클로저 내에서 weak self를 해주는 이유를 바로 알고는 싶지만, 그 전에 closure, closure와의 순환 참조를 통해서 ARC 기초를 마무리하도록 하겠습니다! 클로저는 Reference type 클로저는 reference type이라는 걸 알고 계셨나요? 이전 포스팅에서도 말했듯, reference type의 경우 “참조”가 가능하고, reference count를 증가시키는 것 또한 가능합니다. 그렇다면, closure와 “누군가”도 서로 참조를 일으키는 “순환 참조”..

안녕하세요, 지난 포스팅에선 Strong Reference와 그로 인해 발생하는 Strong Reference Cycle을 해결하는 방법에 대해서 배웠습니다. 그때 순환참조를 해결하기 위해서, 직접 참조를 nil로 지정해 Reference Count를 감소 시키는 방법, 참조를 weak, unowned reference로 함으로써 Reference Count를 증가시키지 않는 방법에 대해서 배웠습니다. 그럼 이번시간에는 weak, unowned는 무엇이며, 이들이 어떻게 Reference Count를 증가시키지 않았는지에 대해 배우겠습니다. Weak, Unowned 사용법 Weak와 Unowned의 가장 큰 공통점은 특정 객체를 참조할 때 Reference Count를 증가시키지 않는 것입니다. 이 두가..

안녕하세요, 지난 포스팅에선 ARC의 정의, ARC의 작동원리에 대해서 공부했습니다. 이번 포스팅에선 ARC의 Counting 방식으로 인해 생기는 Strong Referecne Cycle에 대해서 공부하곘습니다. Memory Leak 지난 포스팅에선, 객체에 대한 count가 0이 됐다면, 더이상 메모리에서 사용하지 않는다고 판단하고 자동으로 ARC를 통해 클래스 "객체"를 메모리로부터 Free 시킨다. 라고 하였습니다. 즉 누구도 해당 instance에 접근하지 못한다고 판단하면 메모리에서 deallocate 시키는 것입니다. 하지만, 누구도 instance에 접근하지 못하고, 사용하지 않음에도 메모리에서 deallocate가 이뤄지지 않으면 어떻게 될까요? Memory Leak이 발생할것입니다. S..

IntrinsicContentSize IntrinsicContentSize는 Intrinsic(본래 갖추어진) + Size => 본래 갖추어진 사이즈를 의미합니다. 애플 문서에서의 정의를 볼까요? View 자체의 속성만을 고려한 view의 자연스러운 사이즈를 의미합니다. 따라서, View들은 자체 속성만을 고려한 "타고난" 사이즈가 존재한다고 이해하시면 좋습니다. 이는 매우 중요한 개념인데요, 타고난 크기가 존재한다는 것만으로도 우리는 별도로 처리해야할 일들이 적어집니다. 어떤 일들이 줄어드는지 밑에서 확인하겠습니다. IntrinsicContentSize를 갖거나, 갖지 못하는 것들 UIKit에서는 많은 View종류들이 존재합니다.(UITextView, UILabel, UITextField, UIView..

이전 포스팅에서는 Structure와 Class의 차이에 대해서 공부했습니다. 그때 Value Type인 Structure에서 반드시 값의 복사를 통해서 값을 전달한다고 했지만, 반드시 그런것은 아닙니다! Swift의 Structure의 추가 설명에서 Collection Type인 array, dictionary, String은 복사로 인한 퍼포먼스 코스트를 줄이기위해 최적화된 별도의 방식을 사용합니다 라고합니다. 그것이 오늘 소개할 COW(Copy On Write)입니다!! Swift에서의 COW(Copy On Write) 스위프트 문서상의 설명으로는 복사를 즉각적으로 하지 않고, collection들은 값들이 저장된 메모리를 원본 객체와 복사본들끼리 공유합니다. 만약, collection의 복사본들중..

Struct, Class Struct와 Class는 일반적으로 프로그램의 구성요소로서 범용적이고 유연한 구조를 자랑합니다. Swift문서의 설명인데 조금 원론적인 것 같네요. 쉽게 말해서, Struct와 Class는 한 객체안에 많은 정보를 담고 싶을때 가장 자주 쓰이는 형태입니다. 두 값은 굉장히 자주 사용되는데, 두가지의 차이점은 무엇이 있을까요? Reference Type, Value Type 두 값의 차이에서 가장 큰 점은 Class는 Reference Type, Struct는 Value Type이라는 점입니다. Value Type인 Structure, Enum Structure와 Eum은 Value Type으로서 변수나 상수에 할당될때, 함수에 전달될 때 값이 복사됩니다. 즉, 변수끼리 값을 전..
1. ARC가 무엇인가? Swift에서는, 사용자 앱의 메모리 사용을 추적하고 관리할 때 Automatic Reference Counting (ARC)라는 것을 사용한다. 대부분 메모리 사용을 사용자가 직접 관리해야 하는 C와 다르게, 더이상 메모리에서 사용하지 않는다고 판단했을 때 자동으로 ARC를 통해 클래스 "객체"를 메모리로부터 Free 시킨다. 2. ARC의 판단기준 특정 객체가 더이상 사용되지 않는 다는 것을 ARC는 어떻게 판단할까? ARC는 특정 클래스 객체를 참조하는 변수, 상수, 프로퍼티들의 갯수를 카운팅한다. 특정 객체에 "적어도" 하나라도 참조변수가 존재한다면 ARC에서는 메모리 해제를 발생하지 않는다. 반대로, 활성화된 참조변수가 존재하지 않는다면 ARC는 특정 객체를 메모리로부터..

주기적으로 알람을 보낼 때도 있고, 중요한 정보를 언제든지 보낼 수 있다. 이때 디바이스가 사용 중 혹은 lock 상태이든 간에 notification center에서 보내주게 된다. 알람은 로컬 와 remote가 존재하며 local은 디바이스에서 기원하고 보내진다. remote notification을 하려면, push notification이라고 하는 서버로부터 오는 것이며 서버를 직접 운용해야 한다. 그렇지 않으면 푸시 notification을 받을 수 없기 때문이다. Notification의 동작 방식은 두 가지로 존재하고 커스텀 한 디테일 뷰가 존재한다. detail view에는 네 개의 버튼을 넣을 수 있다. 메일 같은 게 왔을 때 actionable notification을 네 개까지..