안녕하세요, 루피입니다. 오늘은 DispatchObject에 대해 공부 해보도록 하겠습니다. 바로 시작합니다.DispatchObjectDispatch Type의 가장 기본적인 Class 입니다. 설명에 따르면 DispatchQueue, DispatchGroup 그리고 DispatchSource를 포함하여 많은 Dispatch Object 타입이 있다고 합니다. 또한, 이 기본 Dispatch Object 인터페이스들은 iOS 앱 개발 시, 실제 작업의 흐름과 리소스 관리를 보다 세밀하게 제어할 수 있도록 도와준다고 하는데요. 예를 들면, 메모리 관리는 물론, 작업 실행을 일시 중지하고 재개하는 기능, 객체에 관련된 추가 정보를 설정하는 기능, 작업 중 발생한 데이터를 로깅하는 등의 다양한 작업을 수행..
iOS/Swift
안녕하세요, iOS 개발하는 루피입니다! 오늘은 Swift 프로토콜에 대해 정리해 보도록 하겠습니다. 바로 시작합니다.1. 프로토콜이란?특정 역할을 하기 위한 메서드, 프로퍼티, 기타 요구사항 등의 청사진을 정의합니다. 쉽게 생각하면 프로토콜이란 일종의 약속입니다. 프로토콜은 직접 구현하지 않고 약속만 합니다.너는 나를 채택하면 이런 변수를 가지고 있어야!너는 나를 채택하면 이런 메서드를 가지고 있어야 해!라고 약속을 하는 건데요. 이때 약속에 대한 직접 구현은 구조체, 클래스, 열거형 등을 통해 이루어져야 합니다. 즉, 프로토콜은 정의를 하고 제시를 할 뿐이지 스스로 기능을 구현하지는 않습니다!!! 우선 프로토콜을 사용하는 방식에 대해서 먼저 살펴 보도록 하겠습니다.1) 프로토콜 선언protocol..
안녕하세요, iOS 개발하는 루피입니다! 오늘은 Swift 공식문서를 바탕으로 Where 에 대해 공부해 보겠습니다. 바로 시작합니다.Where 절 이란?where 절은 특정 패턴과 경합하여 조건을 추가하는 역할을 합니다. 우리는 특히 크게 두 가지 용도로 사용할 수 있습니다.패턴과 결합하여 조건 추가타입에 대한 제약 추가쉽게 말해 특정 패턴에 Bool 타입 조건을 지정하거나 어떤 타입의 특정 프로토콜 준수 조건을 추가하는 등의 기능이 있습니다.예제 코드로 알아보기글을 적는 거보다 아무래도 코드 몇 줄 적어보는게 더 이해가 빠르지 않을까요??? 바로 코드로 알아보겠습니다.1. 값 바인딩에서let tuples: [(Int, Int)] = [(1, 2), (1, -1), (1, 0), (0, 2)]for t..
안녕하세요, iOS 개발하는 루피입니다! 오늘은 Swift 공식문서를 바탕으로 제네릭에 대해 공부해 보겠습니다. 바로 시작합니다.제네릭이란?제네릭은 쉽게 말해 모든 타입에 동작할 수 있는 유연하고 재사용 가능한 함수와 타입을 작성할 수 있도록 돕는 Swift의 강력한 도구입니다. Swift 표준 라이브러리 대부분은 제네릭 코드로 되어 있다고 합니다. 예를 들어, 우리가 자주 사용하는 Array, Dictionary, Set 등의 타입은 모두 제네릭 컬렉션입니다. 우리가 Int 나 String 타입의 요소를 갖는 배열을 갖는다고 해서 그에 맞게 컬렉션을 새롭게 만드는 게 아니라 우리는 타입만 정해주면 되지 않나요?? 이게 제네릭이 가져다 주는 강력함입니다! 코드를 통해 보겠습니다.func swapTwoIn..
안녕하세요, 루피입니다. 오늘은 Swift 메모리 관리의 핵심인 ARC에 대해 정리해보겠습니다. Swift 공식 문서를 바탕으로 ARC의 기본 동작 원리부터, 메모리 누수의 주범인 강한 참조 사이클이 왜 발생하는지, 그리고 weak와 unowned를 사용해 이를 어떻게 해결하는지 총정리해 보겠습니다. 바로 시작합니다.1. ARC란? ARC는 Automatic Reference Counting(자동 참조 카운팅)의 약자로, Swift가 앱의 메모리를 추적하고 관리하는 핵심 메커니즘입니다. 클래스 인스턴스처럼 참조 타입 데이터는 Heap이라는 메모리 영역에 저장되는데, ARC는 이 인스턴스가 더는 필요 없을 때 자동으로 메모리에서 해제해주는 역할을 합니다.잠깐 그러면 struct 나 enum 같은 값타입은 ..
안녕하세요, iOS 개발하는 루피입니다. 저번 시간에는 공식문서를 의역해보고 정리해 봤다면, 오늘은 Delegate 패턴을 직접 구현해 사용해 보고 정리하는 시간을 가져보려 합니다. 바로 시작하겠습니다.Delegate 패턴을 왜 사용하는가?Delegate 패턴을 왜 사용할까요? 일단 Delegate 패턴이 무엇인가? 에 대한 답변을 먼저 찾아보겠습니다!Delegate 패턴 쉽게 위임자 패턴입니다. 무슨 말이냐고요?? 조금 더 쉽게 말해 보겠습니다!! 내가 해야 하는 일이 있어요 ㅠㅠ 아 근데 내가 하기 너무 귀찮단 말입니다. 그러던 중 한 녀석이 보이는 거죠. 그러고 저는 말합니다. 아니 외칩니다. 야 너가 해!! 그냥 깡패가 따로 없나요??? ㅋㅋㅋㅋㅋㅋㅋ 이런 식으로 다른 객체에게 역할을 위임한다고 ..
안녕하세요, iOS 개발하는 루피입니다. 오늘은 Delegate 패턴 공식문서를 의역하고 정리해보겠습니다. 바로 시작하겠습니다.이벤트를 Delegate를 통해 처리하기Overview앱에서 발생하는 이벤트를 Cocoa 객체와 상호작용하여 처리할 때, Delegate를 사용할 수 있습니다.Delegate 프로토콜 채택하기Cocoa API는 종종 Delegate 메서드가 포함된 프로토콜을 제공합니다. 예를 들어 사용자가 창 크기를 조정하는 이벤트를 발생하면, 해당 이벤트를 감지한 클래스(위임자)가 지정된 대리자의 메서드를 호출합니다. 이를 통해 앱이 이벤트에 어떻게 반응할지 커스텀할 수 있습니다. 예제는 NSWindowDelegate 프로토콜을 채택하고, 그 중 하나인 window(_:willUseFullSc..
안녕하세요, iOS 개발하는 루피입니다. 오늘은 공식문서를 바탕으로 KVO(Key-Value Observing) 디자인 패턴에 대해 정리해 보겠습니다. 바로 시작하겠습니다.한 객체의 속성 변경 사항을 다른 객체들에게 알립니다. 공식문서 제일 상단에 쓰여있는 문구입니다.다른 객체의 속성을 지켜보고 있다가. "어 바뀌었네?" 하고 다른 객체에게 "야!! 저기 바뀌었어"라고 말해주는 거 같습니다. RxSwift로 프로젝트를 진행하면서, 배운 구독하고 있다가 변화가 감지되면 반응한다는 개념과 유사한 거 같은데요?? 맞습니다. KVO 는 코코아 프레임 워크에서 제공하는 기본적인 관찰 메커니즘으로, Objective-C 런타임을 기반으로 동작합니다. 따라서 이와 유사하게 옵저버 디자인 패턴 방식을 채택해 써드 파..
안녕하세요, iOS 개발하는 루피입니다. 오늘은 공식문서를 바탕으로 디자인 패턴 중 싱글톤에 관해 정리해 보겠습니다.바로 시작하겠습니다.Singleton(싱글톤) 싱글톤패턴은 하나의 클래스에서 오직 하나의 인스턴스만 가지는 디자인 패턴으로 클래스의 전역적으로 접근 가능한 공유 인스턴스를 제공하기 위해 사용됩니다. 앱 전반에서 공유되는 리소스나 서비스를 통합적으로 관리하기 위해 직접 싱글톤을 생성할 수 있습니다.예를 들어, 효과음을 재생하는 오디오 채널이나 HTTP 요청을 처리하는 네트워크 매니저를 싱글톤으로 구현할 수 있습니다. 이해가 가시나요? 조금 더 자세히 설명해 보도록 하겠습니다. 인스턴스를 생성하는 데는 생각보다 많은 비용이 드는데요. 이게 단순 작업보다는 I/O 바운드 경우를 확연하게 두드러집..
안녕하세요, 루피입니다. 저번 글에서는 함수형 프로그래밍의 의미에 대해 알아보았는데요. 오늘은 저번에 말씀 들렸던 거처럼 함수형 프로그래밍의 특징과 명령형 프로그래밍과의 차이점에 대해 살펴보겠습니다. 바로 시작합니다.함수형 프로그래밍 특징순수 함수 : 동일한 입력 값에 대해 항상 동일한 출력값을 반환하며, 외부 상태를 변경하지 않는 함수. (저번 글에서 수학적 함수랑 같은 의미라고 말씀 들렸습니다.불변성 : 데이터는 한 번 생성되면 변경되지 않습니다. (저번 글에서 원본 데이터를 변경하기보다는 하나의 데이터를 새로 생성하는 방식을 의미하는 것 같습니다.)고차 함수 : 함수를 인자로 받거나 반환값으로 사용하는 함수입니다. (일급 함수의 개념입니다.)참조 투명성: 동일한 입력값에 대해 항상 동일한 결과를 반..