iOS [iOS/Swift] weak self를 활용한 메모리 누수 관리 예제 살펴보기 @escaping Closure의 정의와 기능, 메모리 누수(Memory leak)까지 앞선 포스팅을 통해 살펴보았습니다. 그렇다면 실제 프로젝트에서는 어떤 방식으로 위와 같은 개념을 다루게 되며, 참조 타입인 weak을 통해 메모리 누수를 해결하는지 살펴보도록 하겠습니다. weak self는 어떤 경우에 사용하나요? 지연 할당으로 인해 순환 참조로 인한 메모리 누수가 발생될 가능성이 있는 경우 프로젝트를 진행하는 과정에서 활용되는 API Parsing 이나 Timer 와 같이 @escaping Closure를 통한 지연 할당, 즉 어떠한 동작 이후에 실시되는 행위를 구현하고자 할 경우 반드시 특정 객체에 대한 Reference, 참조가 발생하게 됩니다. 만약, 두 개 이상의 객체가 강한 참조(Stron.. 2023.09.30 [iOS/AutoLayout] 부등식 제약조건(Constraint Inequalities)과 제약 우선 순위(Constraint Priorities)를 통한 Layout 만들기 앞선 AutoLayout, 그리고 제약 조건(Constraints)의 개념과 예시에서는 모두 공통적인 하나의 전제 조건을 가지고 있었습니다. 예를 들어, ' A와 B라는 UIView의 간의 Horizontal(수평) 간격 ' 의 경우, // A single equal relationship BView.leading = 1.0 * AView.trailing + 20.0 위와 같이 등식(equalitites)을 활용하여 제약관계를 코드로 정의내릴 수 있었습니다. 하지만, 이는 제약조건의 일부에 불과합니다. 이번 포스팅을 통해 더욱 유연하고 정확한(Nonambiguos) 레이아웃을 구상하는 방법을 알아보겠습니다. 부등식(Inqualities), 그리고 제약 우선순위(Priorities)의 활용 부등식, 그리고.. 2023.08.05 [iOS/Swift] 메모리 누수가 발생하는 원인과 해결방안(Strong, weak, unowned) 지난 포스팅에서 예고한 [메모리 누수]에 대한 내용을 다뤄볼까 합니다. 다만, 이번 포스팅에서는 탈출 클로저가 아닌 일반적인 예시 코드를 통해 정상적인 ARC 작동과정 메모리 누수 발생 (Memory leak) 해결 방법 위 3가지 순서로 미처 다루지 못한 메모리 누수의 원인과 해결과정을 살펴볼 예정입니다. 메모리 누수(Memory leak)와 3가지 참조유형 순환 참조(Retain Cycle)로 인하여 Reference Count가 0으로 수렴하지 않아 발생하는 문제 본론으로 들어가기에 앞서, 메모리 누수(Memory leak)에 대해 살펴볼까요? 그 전에, CS 내용 중, ARC 동작 방식에 대한 사전지식이 필요하겠지요. 메모리 누수(Memory leak)란? 둘 이상의 객체간의 강한 상호참조 관계인.. 2023.07.19 [iOS/AutoLayout] 동일한 형태이나, 다른 방식의 모호하지 않은 레이아웃 만들기(Example of Nonambiguous Layout Solutions) AutoLayout 4번째 포스팅을 시작해보도록 하겠습니다. 지난 포스팅에서 다룬 '모호하지 않은 레이아웃(nonAmbiguous Layout)'에 이어, 1개 뷰의 레이아웃이 아닌, 2개의 UIView간의 관계를 설정하는 과정을 살펴볼까 합니다. 아래서 다룰 예시는, 제약을 위한 절대적인 해답이 아닌 모호하지 않은 레이아웃을 만들기 위한 다양한 방식 중 하나이므로 추후 원하는 화면을 구현하기 위한 참고용으로서 확인하시길 바랍니다. 모호하지 않은 레이아웃 만들기 (2) 상위 뷰(혹은 Container), 그리고 인접 뷰(neighborhood)와의 관계를 통한 AutoLayout 완성 앞서 언급한 바와 같이, 이번 포스팅에서는 2개의 UIView가 활용되는 AutoLayout을 연습해보고자 합니다. .. 2023.07.14 [iOS/Swift] Non-Escaping Closure 와 Escaping Closure(@escaping) 아래 코드는 흔히 프로젝트를 진행하며 활용하고, 마주치게 되는 비동기 처리 혹은 네트워크 관련 메서드입니다. func fetchGithubProfiles(username: String, completion: @escaping (Result) -> Void) { // ... do { let decoder = JSONDecoder() let profiles = try decoder.decode(GithubProfile.self, from: data) completion(.success(profiles)) } catch let error { completion(.failure(NetworkError.decodingError(error))) } } 위 fetchGithubProfiles 메서드의 completi.. 2023.07.06 more Computer Science [CS/Basic] 예시 코드와 함께 살펴보는 ARC 메모리 관리 과정 지난 포스팅에 이어.. 편리하고 유용한 메모리 관리 모델인 ARC(Automatic Reference Counting)의 작동 과정을 예시코드와 함께 알아보도록 하겠습니다. ARC의 이해를 위한 예시 코드 ARC는 Reference Count의 증가와 감소를 통해 메모리를 관리, 해제하는 모델 ARC의 작동 과정을 살펴보기 위해, 아래와 같은 예시 코드를 활용하도록 하겠습니다. Animals란 클래스가 있습니다. 이름(name) 프로퍼티를 담고 있습니다. 또한, RC의 증가와 감소, 해제를 확인하기 위해 init 및 deinit 메서드를 포함합니다. class Animals { var name: String init(name: String) { self.name = name print("\(name)이 .. 2023.03.17 [CS/Basic] 메모리 관리의 시작, ARC(Automatic Reference Counting) Heap과 Stack에 대해 어느정도 이해가 되셨다고 하신다면.. 이번 포스팅에서는 Swift에서 어떻게 메모리를 관리를 하는지 살펴보고자 합니다. 면접 단골 질문 중 하나인, ARC(Automatic Reference Counting)에 대해 알아보기에 앞서 RC란 무엇이고, (ARC의 구체적인 메모리 관리 과정은 다음 포스팅에서 이어집니다) Heap과 RC(Reference Counting)의 관계 RC란, Heap 영역에 저장되는 데이터의 효율적인 관리를 위한 일종의 '참조 카운팅' 시스템 앞선 포스팅에서 살펴본 Heap에 대해 간단하게 정리하고 넘어가자면.. 개발자, 사용자에 의해 할당하며, 해제되는 관리 가능한 영역 클래스 인스턴스(Class Instance)나 클로저와 같은 '참조타입' 값이.. 2023.03.16 [CS/Basic] 메모리 영역, Heap과 Stack엔 어떤 데이터가 쌓일까? 메모리 구조의 4가지 영역 중, Heap과 Stack 영역을 조금 더 자세히 살펴보고자 합니다. 해당 두 영역의 개념을 다시 한번 상기하고, Swift 메모리 상에서 데이터가 쌓이는 과정을 알아보겠습니다! 본 포스팅의 경우, 메모리 구조와 관련된 추가적인 학습 이후 개념상 맞지 않은 부분이 있다면 지속적으로 보완 할 예정입니다. Heap 과 Stack 메모리 영역은 어떻게 할당할까? 메모리 내 저장(할당)되는 기준은 바로 Semantics! 앞서 메모리 구조에서 다룬 Heap과 Stack에 대한 내용을 되짚어 보자면.. Heap ➟ 컴파일단계에 사용자에 의해 할당/해제하는 영역 Class, Closure와 같은 참조타입이 저장 Stack ➟ 런타임 단계에서 프로그램이 자동으로 할당/해제하는 영역 함수 .. 2023.02.23 [CS/Data Structure] 자료구조란 무엇인가요? 자료구조, 알고리즘.. 용어는 참 익숙한데, 어디서부터 어떻게 시작을 해야할지😭 그래도, 어느하나 허투루 넘어가지 않는 성격인지라 부족한 CS 지식이 발목을 잡지 않도록, 효율적인 데이터 구조를 만들기 위한 Data Structure, 자료구조에 대한 포스팅을 앞으로 기록해 나갈 예정입니다. 우선, 왜 우리가 자료구조를 알아야 하는지 살펴봐야겠지요? 자료구조(Data Structure) 논리적으로 정의된 규칙에 의해 데이터를 효율적으로 관리하기 위한 표현, 혹은 구조 자료구조란, 단어 그대로 '데이터(Data')의 '형태(구조)'를 의미합니다. 프로그램이 잘 작동하기 위해, 우선적으로 개발자는 '효율적인' 코드를 작성해야 하는건 당연한 이야기겠지요? 여기서 '효율적'인 코드를 실현하기 위해선, 한가지 전.. 2023.02.16 [CS/Basic] 메모리 구조는 어떻게 구성되어있을까? CS나 Swift 문법 관련된 포스팅을 하면서, '객체는 클래스란 틀을 바탕으로 메모리 상에 할당되는 결과물(Object)' 'Swift의 상수와 변수, 그리고 저장 프로퍼티는 메모리 상에 저장' 위와 같이 [메모리]라는 단어를 자주 사용해 왔습니다. 그런데, 실제로 메모리는 단일한 구조가 아닌 4가지의 공간, 구조로 구성되어 있다고 하는데 말입니다.. 이번 포스팅에서는 해당 구조에 대해 살펴보는 시간을 가져볼까 합니다. (ARC와 같은 면접 단골문제와도 연관되어 있으니, 반드시 짚고 넘어가야겠지요?) 메모리란 무엇인가요? 주 기억장치인 하드웨어 RAM을 의미하며, 프로그램을 실행하기 위한 정보를 저장 컴퓨터에서 동작하는 모든 프로그램은 RAM이란 기억장치 내 고유한 영역을 할당받습니다. 즉, RAM =.. 2023.02.12 more