본문 바로가기

분류 전체보기71

[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. 3. 16.
[iOS/Swift] 타입에 의존하지 않는 범용코드, 제네릭(Generic) SwiftUI를 다루던 도중, body 메서드가 채택하는 요상한 some View 이름의 타입을 발견하게 되었는데요.. 해당 타입을 '불 투명 반환타입(Opaque return type)', 또는 '역 제너릭 타입' 이라고 불린다 카니.. 부랴부랴 급하게 제네릭(Generic)에 대한 포스팅을 들고 왔습니다. 제네릭(Generic)이란? 특정 타입에 의존하지 않는, 유연한 코드를 위한 Swift의 강력한 도구 중 하나 제네릭(Generic)의 사전적 정의는 다음과 같습니다. Generic 포괄적인, 총칭의, 이름이 붙지 않은 '일반적'이란 뜻의 'General'과 동일한 어원 Swift 표준 라이브러리의 대다수는 이러한 '제네릭'으로 선언되어 있으며, Collection Type 중, Array와 Dic.. 2023. 3. 12.
[iOS/SwiftUI] some view와 불투명 반환타입(Opaque return type) Xcode를 통해 SwiftUI 프로젝트를 생성한 이후, 첫 화면인 ContentView에 담긴 코드를 유심히 살펴보다 보면.. 위와 같이 구조체(Struct), 그리고 View 프로토콜을 채택하고 있다는건 얼추 이해가 가는데.. 뷰를 그리는 body 메서드는 some View 라는 요상하게 생긴 타입을 반환하고 있습니다!? 궁금한 점은 어물쩡 넘어갈 수 없으니, 해당 키워드가 무슨 역할을 맡고 있고, 왜 작성되어야 하는지 살펴보는 포스팅 시간을 가져볼까 합니다. 불투명한 반환 타입(Opaque Return Type) 제너릭 타입과는 반대로, 함수의 '내부'에서 타입을 결정 사실, 프로토콜과 함께 다뤄야 하는 문법적 요소이나 불투명 반환타입을 살펴보기 위해 'someView'는 매우 좋은 예시가 되며, .. 2023. 3. 8.
[iOS/Swift] immutable한 구조체, mutating을 적용한다면? 이전에 다룬 구조체(Struct)의 주요한 특징을 기억하시나요? 참조 타입인 클래스(Class)와는 달리, 인스턴스 객체가 생성될 때 마다 별도의 값을 가지게 되는, '값 타입(Value Type)'이란 부분이 구조체의 중요한 특징 중 하나였습니다. 그렇기 때문에 ~ 클래스는 인스턴스 메서드를 활용해 내부 인스턴스 값을 변경할 수 있으나, 구조체는 '값' 자체를 복사하여 사용하므로 그렇지 못한다고 생각했지만...? 구조체의 성질을 '변화' 시켜서 내부 데이터 값을 수정할 수도 있습니다! 그 시작으로 mutable과 immutable이란 용어를 짚고 넘어가보도록 하겠습니다. mutable과 immutable 구조체는 상수(Constant)와 동일한 변화되지 않는(Immutable) 성질이다. mutatin.. 2023. 3. 7.
[iOS/Swift] 약속을 위한 청사진(Blueprint), 프로토콜(Protocol) 사실 요 프로토콜(Protocol)은 클래스 파트에서 함께 다뤘어야 하는데, 비슷하게 생긴 클래스와 구조체를 먼저 비교하고 넘어가야 이해가 쉬울것 같아.. 이제서야 뒤늦게 부랴부랴 포스팅을 시작해봅니다😅 이번 시간엔 아~주 간단하게, 프로토콜(Protocol)의 개념과 선언방식만 알아보겠습니다. 프로토콜(Protocol)이란 무엇인가요? 최소한의 요구사항과 규칙을 준수하기 위한 청사진(BluePrint) 청사진(BluePrint)이라고 하니, 지난번에 다룬 클래스의 추상화, 상속성 어쩌구 내용이 떠오르지 않으신가요? 프로토콜은, 클래스나 구조체, 열거형 등 일종의 '틀' 이라 불리는 이들에게 더 높은 위치에서 '요구사항'과 '규칙'을 설정합니다. 왜 필요하나요? 클래스 혹은 구조체 등 특정 '틀'이 구조.. 2023. 3. 5.
[CS/Basic] 메모리 영역, Heap과 Stack엔 어떤 데이터가 쌓일까? 메모리 구조의 4가지 영역 중, Heap과 Stack 영역을 조금 더 자세히 살펴보고자 합니다. 해당 두 영역의 개념을 다시 한번 상기하고, Swift 메모리 상에서 데이터가 쌓이는 과정을 알아보겠습니다! 본 포스팅의 경우, 메모리 구조와 관련된 추가적인 학습 이후 개념상 맞지 않은 부분이 있다면 지속적으로 보완 할 예정입니다. Heap 과 Stack 메모리 영역은 어떻게 할당할까? 메모리 내 저장(할당)되는 기준은 바로 Semantics! 앞서 메모리 구조에서 다룬 Heap과 Stack에 대한 내용을 되짚어 보자면.. Heap ➟ 컴파일단계에 사용자에 의해 할당/해제하는 영역 Class, Closure와 같은 참조타입이 저장 Stack ➟ 런타임 단계에서 프로그램이 자동으로 할당/해제하는 영역 함수 .. 2023. 2. 23.