Jupyo's Daily Story
iOS 개발자로서 반드시 알아야 할 것 (Part 1) 본문
Things You Should Definitely Know as an iOS Dveloper (Part 1)
Things You Should Definitely Know as an iOS Developer (Part 1)
In my past years of iOS Development and interviewing different iOS candidates, I have realized that there are certain topics in iOS that…
medium.com
※ 본 내용은 위 링크의 내용을 번역 및 정리한 것입니다. 수정이 필요한 부분이 있다면 댓글로 남겨주세요.
지난 몇 년간 iOS 개발과 다른 iOS 개발자들을 인터뷰하면서 iOS에는 모든 사람이 공통적으로 알아야 할 특정 주제가 있다는 것을 깨달았습니다. 이 글에서 간략하게 알아보도록 하겠습니다.
- Memory Management (ARC)
- Retain Cycle
- 일상적으로 사용되는 디자인 패턴
- 다양한 Property Attributes와 작동 방법 (Objective-C 특정)
참고 : 위의 각 섹션을 간략하게 살펴 보겠습니다. 일부 요점을 놓칠 수도 있습니다.
이 글의 목적은 iOS 개발자가 되기 전에 확실히 알아야 할 사항이 무엇인지 알 수 있도록 돕는 것 입니다.
Memory Management
iOS 개발을 하다보면 ARC(Automatic Reference Counting) 이라는 용어를 들어봤을 겁니다.
지금부터 이것에 대해 알아보도록 하겠습니다.
먼저 Reference Counting(참조 계수) 이 무엇을 의미하는지 이해해봅시다.
Reference Counting 은 모든 객체(Object)에 계수가 부여되는 간단한 개념입니다. 만약 객체를 활성 상태로 유지하고자 한다면, 참조 카운터가 증가합니다. 반대로 객체를 비활성 상태로 유지하면, 참조 카운터가 감소합니다.
이것을 수동으로 유지할 필요가 없이 Automatic(자동) 으로 처리해주는 ARC 를 제공하며, iOS 는 몇 가지 기본 규칙을 사용하여 자동으로 처리합니다. 예를 들어, "new" 로 시작하는 모든 객체는 소유자가 해당 객체에 대한 참조를 유지하기를 원하고 ARC가 자동으로 scenes 뒤에 카운터를 증가 시킨다는 것을 의미합니다. ARC가 도입되지 전에는 release, retain 와 같은 기능을 사용하여 수동으로 객체 수를 유지해야 했습니다.
요약 : 여기를 클릭하여 ARC 가 어떻게 작동하는지 WWDC 의 상세 영상을 참조해주세요.
Retain Cyle
Retain Cycle 또는 강한 참조 주기(Strong Reference Cycle) 는 주기에 참여하는 모든 객체가 서로를 유지하고 서로에 대한 강한 참조를 갖는 상황을 설명하기 위해 iOS 에서 일반적으로 사용되는 용어입니다. 이 상황을 메모리 누수라고 합니다.
(Tip : Xcode 에서 제공하는 누수 도구를 사용하여 이러한 주기를 감지합니다.)
위의 이미지에서 Object A에는 Object C에 대한 참조가 있고, Object C에는 Object B에 대한 참조가 있으며, Object B에는 Object A에 대한 참조가 있습니다. 모든 참조가 Strong Reference(강한 참조) 라고 가정한다면, 비록 이러한 객체에 대한 모든 참조가 파괴되더라도 이 주기는 깨지지 않고 메모리 누수로 간주될 것입니다. 이 순환을 깨기 위해서는 위의 참조 중 하나가 Weak Reference(약한 참조) 가 되어야 합니다. 이것은 약한 참조에 대한 모든 참조가 없어진 것을 확인한 다음 자동으로 nil로 바뀝니다.
Design Patterns
-
MVC
- Model View Controller 은 가장 일반적으로 사용되는 패턴입니다. 이름에서 알 수 있듯이 3가지 주요 부분이 있습니다.
- 모델(Model) 은 데이터 유지, 처리 및 조작을 담당합니다.
- 뷰(View) 는 모델의 데이터를 UX-friendly fashion 으로 나타내기 위해 사용됩니다.
- 컨트롤러(Controller) 는 모델과 뷰 간의 상호작용에 사용됩니다.
- iOS에서 뷰와 컨트롤러의 기능은 뷰 컨트롤러(View Controller) 에 의해 수행됩니다. (이 부분은 완전히 다른 주제입니다.)
-
Delegate Pattern
- Delegate Pattern 은 iOS 에서 가장 많이 사용되는 패턴 중 하나입니다.
- self 객체에게 자신을 대신하여 작업을 수행하도록 지시합니다.
- UICollectionViewDelegate 가 일반적인 예 중 하나입니다. (collectionView.delegate = self)
- 일반적으로 1대1 커뮤니케이션을 위해 위임합니다.
-
Notification Pattern
- Notification Pattern 은 iOS에서 모든 객체에 정보를 브로드캐스트(Broadcast) 하는데 사용할 수 있습니다.
- iOS는 동일한 작업을 수행하기 위해 NSNotifications를 제공합니다.
- Delegate Pattern 보다 Notification Pattern을 언제 선택할지도 알아야 합니다.
-
KVO
- key-Value Observing은 객체의 특정 키/속성 값의 변화를 관찰하는데 사용할 수 있습니다.
-
Singleton
- Singleton Pattern은 객체의 전역 상태를 만드는데 사용됩니다.
- 생성 한 후에는 앱 세션 전체에서 항상 동일한 인스턴스를 반환합니다.
- 앱의 세션 내내 객체를 생상한다는 단점도 있으므로, 주의해서 사용해야 합니다.
Property Attributes(Objective-C specific)
-
Strong
- Strong 속성은 선언 된 속성에 강한 참조가 있고 객체가 소유하고 있음을 알리는데 사용합니다. 값은 객체에 의해 유지.
-
Nonatomic
- 일반적으로 잠금이 사용되지 않으므로 스레드로부터 안전하지 않음을 의미합니다.
- Multiple thread가 변수에 엑세스 할 수 있습니다.
-
Atomic
- 스레드로부터 안전하고 한 번에 하나의 스레드만 변수에 액세스 할 수 있음을 의미합니다.
- 퍼포먼스(Performance)의 비용을 동반합니다.
-
Weak
- 객체가 소유하지 않으며 참조 횟수가 증가하지 않습니다.
- 참조를 보유한 객체가 파괴되면 자동으로 nil 값이 할당됩니다.
-
Assign
- Weak과 유사하지만 유일한 차이점은 제거되지 않는다는 것입니다.
-
Copy
- Strong과 유사한 소유 관계를 가지며, 전달되는 값이 유지되는 대신 복사된다는 점만 다릅니다.
'그 외' 카테고리의 다른 글
개발 규칙 - 공백/줄내림 (8) | 2024.11.12 |
---|---|
iOS 개발자로서 반드시 알아야 할 것 (Part 2) (0) | 2020.11.09 |
Xcode Light/Dark Mode info.plist 설정 (0) | 2020.10.12 |
마크다운 정리 2 (0) | 2020.01.15 |
마크다운 정리 1 (0) | 2020.01.14 |