본문 바로가기

분류 전체보기71

[iOS/Combine] 동시성 프로그래밍의 필요성과 Queue(큐)의 역할 CPU, 코어, 그리고 프로세스와 스레드의 개념을 살펴본 포스팅의 중요한 키워드와 개념을 한번 더 되짚고 넘어가자면 다음과 같습니다. 컴퓨터 뇌 역할을 담당하는 하드웨어, CPU는 2개의 작업 처리 방식을 가지고 있습니다. ① 다수의 코어(Core)를 활용한 병렬적(Parallelism) 작업 ➟ 여러개의 코어를 중심으로 멀티 프로세스, 멀티 스레드를 통해 병렬적 작업을 실행 ② 프로세스를 갈아 가며, 작업하는 동시적(Concurrency) 작업 ➟ 마치 '동시에 실행되는 것 처럼' 보이도록 프로세스를 번갈아 실행하는 작업 ➟ 프로세스를 번갈아 매우 빠르게 처리하므로, 마치 동시(찰나)에 진행되는 것 처럼 보임 하지만, 여기서 한가지 의문점이 발생할 수 있는데 말입니다.. 다수의 코어와 스레드(멀티 .. 2023. 4. 10.
[iOS/Swift] 유용한 대표 고차함수, map, filter, reduce 다루기 요 근래 코딩테스트를 슬쩍 건드려 보구 있는데 말입니다😨 배열 관련 문제를 풀때, 고차함수를 활용하는게 여간 손에 익질 않아 길고 긴 하드 코딩으로 꾸역꾸역 통과하는 경우가 많았는데요.. 그래서, 이번 포스팅에서는 배열을 다룰때 자주 활용되는 map, filter, reduce 예시 코드를 통해 정리해보는 시간을 가져볼까 합니다. 근데, 고차함수가 무엇인가요? 다른 함수를 ①매개변수로 받거나, ②함수의 결과를 반환하는 함수 매개변수로 받고, 함수의 결과로 받는다라.. 이전에 다뤘던 클로저의 1급 객체함수의 특징과 비슷하지 않나요? 고차함수란 Swift에서 이미 제공되고 있는 표준 라이브러리로서, 함수형 패러다임을 지원하는 Swift에서는 다양한 고차함수를 사용할 수 있습니다. 주로 사용하는 map,.. 2023. 4. 5.
[iOS/Combine] CPU와 코어, 그리고 프로세스와 스레드의 개념 동기, 비동기, 동시성 프로그래밍, 스레드, 큐.. 프로그래밍을 학습하는 과정에서 느닷없이 마주치게 되는 익숙한 용어지요? 하지만, 프로그래밍을 언어(문법) ➟ 개발 프레임워크(UIKit, SwiftUI) 순서로 접한 저로서는 막상 두렵고, 어렵기만 한 해당 용어와 개념을 접근하기엔 상당히 부침이 있었습니다. (🫣 언제 써야되는거고, 왜 써야하는거지?) 사실, 바로 Combine을 살펴보고자 했는데.. 관련된 CS 기본 개념에 대한 이해가 필요할 것 같아 아래와 같은 주제로 3회차에 걸친 포스팅을 통해 확실하게 짚고 넘어가볼까 합니다. 1차 : CPU와 코어, 프로세스와 스레드 2차 : 동시성 프로그래밍의 중요성과 큐(Queue)의 역할 3차 : 스레드 작업처리 방식과 큐의 작업 분산방식 (Combin.. 2023. 4. 3.
[iOS/Swift] Extension(확장)을 통한 타입에 새로운 기능 부여하기 오랜만에 Swift 문법 포스팅으로 돌아왔습니다🥳 요 근래 UIKit을 활용해 클론 프로젝트를 진행하다보니, ViewController에 기능을 더하는 extension 기능을 자주 사용하게 되더군요! 해서, Extension에 대해 간단하게 살펴보는 포스팅을 시작해볼까 합니다. Extension(확장)이란? 구조체, 클래스, 열거형, 프로토콜 타입 등 새로운 '기능'을 추가 우리가 자주 사용하는 Chrome Browser에서의 확장 프로그램과 같이 기존에 이미 만들어진 무언가에 새로운 '기능'을 더하는 의미로 이해하시길 바랍니다. Swift에서의 Extension은 클래스, 구조체, 열거형 등의 타입으로 만들어진 무언가에 프로퍼티, 메서드, 초기값을 확장시키는 기능을 가지고 있습니다. 심지어, 프로토콜.. 2023. 3. 23.
[iOS/Error] Components가 nill일 경우 (this class is not key value coding-compliant for the key) UIKit에서 Build를 기다리는 도중, 아래와 같은 오류코드가 발생한 후, 실행이 안되는 경우를 종종 경험하실 수 있습니다! Terminating app due to uncaught exception 'NSUnknownKeyException', reason: ... terminating with uncaught exception of type NSException (lldb) 코드 상으로는 완벽한것 같은데, 위와 같은 런타임에러가 발생하는 이유는 무엇일까요? 이유는 즉, IBOutlet 혹은 IBAction와 같은 컴포넌트(Componets)의 값이 비어있기(nil) 때문입니다! Components는 Optional 타입 Components와 연결되는 변수는 강제 언래핑되며, Inspector 내.. 2023. 3. 19.
[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. 3. 17.