본문 바로가기

iOS82

Swift) Delegate Delegate? 진짜 Delegate 이거.. 너무 복잡하게 생각했던건가 생각도 드는데.. 이해가 조금 되서 쓰는 것도 있지만, 이해하고 정리하려 포스팅하는 것도 없지 않아 있다. 그냥 우선 쉽게 접근하기 위해 Delegate 뜻이 뭔지부터 알아보자 뭐 더 많은 뜻이 있겠지만, 우리가 알아야하는 Delegate의 뜻은 "위임하다" 이다. (영국식으로 ㅋㅋ) 우리는 위임을 알아야한다. 위임은 내가 할 일은 다른 사람에게 넘기는 것, 대신 시키는 것 이라는 의미를 가진다. 위임하면 사장-직원 같은 수직적인 관계가 생각나는데, 위임은 그저 내가 할 일을 누군가에게 시키는 것이기 때문에 수평적인 관계에서도 가능하다. 들어가기 전 먼저 알아야 할 핵심은 수직/수평적 관계를 따지는 것이 아닌 내가 할 일을 을 다.. 2022. 2. 13.
SOLID SOLID 솔옴 옷 예쁘지 ㅋㅋ 역사? 의의? SOLID 원칙의 의의,, 생겨난 이유가 무엇일까? 재사용성 고려, 재사용성을 높임으로써 높은 확장성을 가지게 된다. 재사용성을 높이기 위해 하나의 클래스는 하나의 책임을 가지게 한다. 낮은 결합도 (높은 응집력)를 가져 작은 변화가 큰 Side Effect를 가져오지 않게한다. 유지보수가 쉬워진다. 써놓고 보니 뭔가 위의 목록은 이유를 말하는 것 같진 않다. 좀 풀어서 써보면.. 재사용성을 높인다 재사용성을 높이기위해 불필요하게 묶여있는 실들을 제거 -> 의존성 분리 의존성을 분리하기 위핸 하나의 클래스는 하나의 책임만을 가짐 하나의 클래스가 하나의 책임을 가짐으로써 Testable Code와 동시에 높은 확장성, 유지보수성을 가지게 되는 긍정적인 효과를 .. 2022. 2. 13.
Swift) App LifeCycle App-Based Life-Cycle State (iOS 12 and earlier) [참고] 이미지 출처 OS는 각각의 앱마다 모두 상태 변화를 제어하여 어떤 앱은 실행시키고, 어떤 앱은 백그라운드, 어떤 앱은 종료하는 등 다양한 처리를 한다. Apple에서 정의하는 앱의 상태(App State)는 크게 5가지로 구분된다. Not Running: 앱이 시작되지 않았거나, 실행되었지만 시스템에 의해 종료된 상태 Inactive: 앱이 전면(Foreground)에서 실행중이지만, 아무런 이벤트를 받지 않는 상태, 앱의 상태 변화 과정에서 잠깐 머무는 단계 Active: 앱이 전면(Foreground)에서 실행중이며, 이벤트를 받고있는 상태 Background: 앱이 백그라운드에 있지만, 여전히 코드가 실행.. 2022. 2. 13.
Swift) weak, unowned weak 이전 글에서 다룬 weak에 대해 새로이 안게 있어서.. class Person { var name: String weak var puppy: Puppy? init(name: String) { self.name = name } deinit { print("Person deinit") } } class Puppy { var name: String var owner: Person? init(name: String) { self.name = name } deinit { print("Puppy deinit") } } var john: Person? = Person(name: "John") var jackson: Puppy? = Puppy(name: "Jackson") john?.puppy = jacks.. 2022. 2. 13.
Swift) 순환 참조 , strong, weak 순환 참조란 순환 참조란 여러 클래스 인스턴스가 서로간에 강한 참조상태(Strong Reference)를 가질 때 발생하고, 순환 참조가 발생하게되면 서로간의 참조가 해제되지 않기때문에 메모리 누수(Leak)가 발생할 수 있다. 순환 참조 예 class Person { var name: String var puppy: Puppy? init(name: String) { self.name = name } deinit { print("Person deinit") } } class Puppy { var name: String var owner: Person? init(name: String) { self.name = name } deinit { print("Puppy deinit") } } var john: P.. 2022. 2. 13.
Swift) ARC ARC ARC는 Automatic Reference Counting의 약자이다. 레퍼런스 카운트를 자동으로 해준다고 이름에서 바로 알 수 있다. ARC의 이름..의 좀 더 깊은.. 뜻을 알기위해 ARC가 있기 전에 있던 방식을 알아보자 ARC 이전엔? ARC가 있기 전엔 MRC(Manual Reference Counting)라는 것이 있었다. MRC도 마찬가지로 MANUAL이란 이름에서 알 수 있듯이 레퍼런스 카운트를 수동으로 해주었다는 것을 알 수 있다. retain, new, alloc등을 사용해 레퍼런스 카운트를 올리고, release 등을 사용하여 레퍼런스 카운트를 내려 레퍼런스 카운트가 0이 되면 클래스 인스턴스를 deinit 시켜줬었다. ARC는 그럼 뭔데요 MRC 방식은 RC를 언제 올려주고.. 2022. 2. 13.