전체 글

GCD Sync, Async, Serial, Concurrent 조합해보기
GCD를 활용해 비동기 코드를 작성하며 자주 헷갈리는 sync, async 그리고 Serial, Concurrent를 조합했을 때 어떻게 동작하는지 그림과 함께 정리해보려고 합니다. GCD가 무엇인지는 이 곳에서 확인 가능합니다!Serial + Syncvar numbers = [0, 1, 2, 3, 4] let dispatchQueue = DispatchQueue(label: "custom") print("Serial + Sync 실행결과") (0..

동시성, 병렬성, 동기(sync), 비동기(async) 개념 정리
목차동시성(Concurrency)이란멀티태스킹이란동시성과 멀티태스킹은 같은 말일까?병렬성이란동시성과 병렬성의 차이동기(synchronous)란비동기(asynchronous)란동시성(Concurrency)이란동시성이란 이름만 놓고 본다면 실제로 동시에 동작해야 할 것 같지만, IT용어 측면에서 동시성이란 아래와 같은 의미를 지닌다고 합니다.Concurrency means that an application is making progress on more than one task - at the same time or at least seemingly at the same time (concurrently).동시성은 하나의 Processor가 여러 task를 동시에 처리하는 것처럼 보이게 하는 것이다. 하나..

캐시 데이터 용량 표시 방식 개선하기: ByteFormatter
캐시 데이터 용량 표시 방식 개선하기: ByteFormatter프로젝트를 진행하며 이미지 캐시를 제거하는 기능을 개발하게 되었는데요.캐시 데이터 용량을 어떻게 표기할까 고민하다 너무 작지도 크지도 않도록 MB 단위로 표현하기로 정하고 byte를 1024 로 2번 나누어 MB로 변환하여 표기했습니다.하지만 코드리뷰를 진행하며 팀원분께 더 나은 방식을 배웠는데요.까먹지 않도록 정리해두려고 합니다!왜 ByteFormatter를 사용해야 할까?기존 방식에서는 용량을 항상 MB 단위로 표시했습니다. 이렇게 되면 GB 이상의 큰 용량을 표현하거나, KB나 Byte 단위의 작은 용량일 때는 어색해 보일 수 있습니다. 이를 개선하기 위해 ByteFormatter를 사용하면 Byte, KB, MB, GB 등 적절한 단위..

GCD 공식문서 읽고 정리하기
이 글은 공식문서를 번역해 나만의 언어로 작성한 글입니다.의역이나 오역이 있을 수 있으니 조심하세요! 😨개요GCD(Grand Central Dispatch)라고도 알려진 Dispatch는 macOS, iOS, watchOS 및 tvOS의 멀티코어 하드웨어에서 동시 코드 실행을 지원하는 체계적이고 포괄적인 개선을 제공하는 언어 기능, 런타임 라이브러리 및 시스템 향상 기능을 포함합니다.BSD 하위 시스템, Core Foundation 및 Cocoa API는 모두 이러한 향상된 기능을 사용하여 시스템과 애플리케이션을 보다 빠르고 효율적으로 실행하고 응답성을 향상시키도록 확장되었습니다.컴퓨팅 코어 수가 다른 여러 컴퓨터나 여러 애플리케이션이 경쟁하는 환경에서 단일 애플리케이션이 여러 개의 코어를 효과적으로 ..

네이버 부스트캠프 웹・모바일 9기 챌린지 과정 2주차 회고
⭐️ 2주차 한 줄 요약어..? 1주차보다 할만한데..? 왜지?✏️ Learned - 배운 점나는 이번 주에 어떤 것들을 배웠나요?학습뿐만 아니라 태도나, 마음가짐 등 넓은 부분에서 배운 것들을 적어보아요!효과적으로 주장하는 법을 배웠다.모든 주장에는 논리가 뒷받침되어야하고, 논리는 배경지식으로 부터 나온다.그렇다보니 논리적으로 주장하고 싶어 지식을 많이 쌓고 싶었고, 자연스레 구현보다 학습에 비중이 커졌다.다양한 CS지식들을 흡수했다.스포가 될 수 있을 것 같아 어떤 CS지식들을 흡수했는지는 언급하지 않겠지만, 평소 얕게만 알고있던 CS지식들을 깊게 공부할 수 있는 시간이었고, 동료들과 이야기하며 더 공부할 수 있었다.💖 Liked - 좋았던 점이번 주에 나는 어떤 순간이 가장 인상 깊었나요?좋은 감..

발행-구독 패턴(Publisher-Subscriber Pattern)
목차옵저버 패턴(Observer Pattern)이란?발행-구독 패턴(Publisher-Subscriber Pattern)이란?발행-구독 패턴의 장점발행-구독 패턴의 단점옵저버 패턴(Observer Pattern)이란?구독자 패턴을 공부하러 왔는데, 왜 옵저버 패턴이 먼저 나오냐구요? 🤔둘이 유사한 부분이 있어서 비교를 하며 설명하고자 옵저버 패턴을 먼저 간단하게 짚고 넘어가겠습니다 !가 아니라옵저버 패턴(Observer Pattern)은 객체의 상태 변화를 관찰하는 관찰자들, 즉 옵저버드의 목록을 객체에 등록하여 상태 변화가 있을 때마다 메소드 등을 통해 객체가 직접 목록의 각 옵저버에게 통지하도록 하는 디자인 패턴이다.주로 분산 이벤트 핸들링 시스템을 구현하는 데 사용된다.발행/구독 모델로 알려져 있..

함수형 프로그래밍 with. Swift
목차함수형 프로그래밍이란?순수 함수익명 함수고차 함수mapfilterreduce불변성불변성이 중요한 이유참조 투명성클로저와 익명함수와의 관계Swift 클로저함수형 프로그래밍이란?함수형 프로그래밍이란 자료처리를 수학적 함수의 계산으로 취급하고 상태와 가변 데이터를 멀리하는 프로그래밍 패러다임의 하나이다.Alonze Church가 고안한 람다 계산법을 기반으로 한다.자세한 내용은 여기에서 확인할 수 있습니다. 함수형과 객체지향의 가장 큰 차이는 함수형은 함수 자체가 일급 객체가 되지만, 객체 지향에서는 클래스가 일급 객체가 됩니다.그럼 여기서 일급 객체가 무엇인지 알아봐야겠죠?💡 일급 객체란?일급 객체(First Class Citizen)란 다른 객체들에 일반적으로 적용 가능한 연산을 모두 지원하는 객체를..

Swift 정규표현식
목차정규표현식이란?정규식 문법swift에서 정규표현식을 사용하는 방법matching되는 부분 찾기정규표현식이란?정규식은 특정한 규칙을 가진 문자열의 집합을 표현하는 데 사용하는 형식 언어이다.이것만 봐선 잘 이해가 안가는데,문자열을 메소드로 파싱해도 되지만, 문자열이 길어지거나 복잡해지고 가변적이라면 파싱하기 매우 까다롭잖아요?문자열에서 특정 패턴에 부합하는 부분만 찾고 싶을 때 사용하는 게 바로 정규식입니다.정규식 문법문법에 대해선 많은 블로그에서 다루고 있으니 자주 사용하는 것들만 정리해보겠습니다.Charcter의미|또는()그룹[]문자셋, 괄호안의 어떤 문자든[^]첫 문자로 ^를 쓰면 괄호 내용의 부정. 즉 괄호 안에 포함되지 않는 한 문자Charcter의미?없거나 있거나 (zero or one)*..

Static Dispatch & Dynamic Dispatch
Class 상속을 공부하다가 상속은 어떻게 동작할까? 라는 급 의문이 생겨 야크쉐이빙 하게 되었고, 정리로 남겨야겠다라고 생각해 쓰게 되었습니다 허허목차DispatchStatic DispatchDynamic Dispatch타입 별 Dispatch의 차이Reference Type에서의 DispatchValue Type에서의 DispatchProtocol에서의 DispatchDispatch디스패치(Dispatch)라고 하면 GCD가 먼저 떠오르는데요.이름은 같지만 오늘 알아볼 Dispatch는 어떤 메소드를 호출할 것인지를 결정하고 실행하는 메커니즘입니다.Swift에선 Static Dispatch, Dynamic Dispatch 2가지 방식이 있습니다.이러한 Dispatch는 내가 호출할 함수를 컴파일 타임..
Heap이 Stack에 비해 느릴 수 밖에 없는 이유
Heap이 Stack에 비해 느릴 수 밖에 없는 이유"스택이 힙보다 빠르다" 라는 표현은 모호한 표현입니다.정확한 표현은 "스택에 할당된 변수에 접근하는 것이 힙에 할당된 변수에 접근하는 것보다 빠르다" 입니다.왜냐하면, 스택과 힙 모두 가상 메모리에 불과하기 때문인데요.하드웨어로 내려가면 똑같이 물리 메모리인 RAM 어딘가에 저장되어 있고, 주소를 통해 논리적으로 구분되어 있기 때문에 둘의 속도가 다를 수 없습니다.그렇다면 접근하는 속도가 왜 차이 날까?현재 사용되는 대부분의 CPU는 FP(Frame Pointer)를 두어 함수의 스택 프레임의 시작주소를 저장하고 있습니다.그리고 컴파일러는 컴파일 과정을 통해 함수의 스택 프레임 내에 변수들의 크기와 순서를 알 수 있기 때문에, 어느 위치(offset)..

네이버 부스트캠프 웹・모바일 9기 챌린지 과정 1주차 회고
⭐️ 1주차 느낀점길기도 했고 짧기도 했던 1주차가 끝이 났다.챌린지 과정은 CS지식을 기반으로 난이도 높은 미션들을 수행한다는 걸 이미 알고 있었어서, 각오를 하고 임했음에도 정말 쉽지 않았다..미션들을 언급할 수 없지만, 미션을 진행하며 나의 처참한 CS지식을 느낄 수 있었다.그리고 그와 상반되게 CS지식들을 미션에 녹여넣고 피어 세션에서 코드 리뷰를 할 때 술술 이야기하는 걸 보고 감탄만 했던 것 같다.1주차 팀원들을 언급하지 않을 수가 없는데, 정말 좋은 팀원들을 만나 행복한 일주일을 보낸 것 같다.팀마다 피어 세션 분위기가 모두 달랐다고 하는데, 개인적으로 느끼는 우리 팀 분위기는 대학교 개발 동아리같은 느낌이었다.피어 세션이 시작되면 농담도 하고 하하호호 웃으면서 진행했다. 그리고 코드 리뷰를..

메모리의 구조
메모리의 구조Stack스택은 함수에 대한 정보를 저장한다.지역 변수, 매개 변수, 리턴 값, 호출 함수 정보 등함수 호출 시 스택에 해당 함수에 해당하는 공간 (Stack Frame)이 생기고, 함수 실행이 끝나면 사라진다.컴파일 단계에서 생성과 해제를 알 수 있는 값 타입이 저장된다.컴파일 타임에 크기가 결정된다.참조 타입 중에서도 크기가 고정되어 있거나, 언제 지워야할 지 컴파일러가 미리 예측 가능한 경우 가급적 stack을 사용해 성능을 향상시킨다.Heap 에 비해 접근 속도가 빠르다.힙 영역과 스택 영역이 다른 방향을 가지는 이유스택은 항상 커널의 반대 방향으로 자라기 때문에 커널을 만나지 않는다.스택이 아무리 커져도 접근 불가 영역인 커널을 건드리지 않는다.힙 영역은 스택과 달리 새로운 데이터가..