적당한 고통은 희열이다

- 댄 브라운 '다빈치 코드' 중에서

반응형

분류 전체보기 568

[iOS GCD] Concurrency 동시성 프로그래밍이란? + 왜 필요할까

작업(task)을 분산시키고 여러 스레드에서 동시에 일을 할 수 있도록 처리하기 위해서 Sync & Async : 단일 작업. 작업 하나를 수행하는 특성? synchronous : 동기. 큐에 추가된 작업이 종료될때까지 기다리는 것. 한번에 하나의 작업만 실행되도록. 장점 : 설계가 매우 간단하고 직관적 단점 : 응답이 주어질 때까지 대기해야함 asynchronous : 비동기. 큐에 작업을 추가하지만 완료 응답을 기다리지 않고 동시에 실행될 수 있어, 여러 작업을 동시에 처리할 수 있도록 해주는 특성. 장점 : 응답을 기다리지 않고 다른 작업을 하므로 자원을 효율적으로 사용할 수 있다 단점 : 동기보다 설계가 복잡하다. Serial & Concurrent - Serial Queue : 작업들을 한번에 ..

[Swift GCD] GCD(Grand Central Dispatch)

멀티코어 환경에서 프로그램의 성능과 반응성을 높이고 더욱 효과적으로 사용할 수 있도록, 시스템 수준에서 GCD가 디스패치 큐를 이용해 multi threading을 지원하고 동시 작업을 관리해준다. 디스패치 큐는 작업들이 여러 쓰레드에서 동기적 or 비동기적으로 동작하며 동시에 일을 할 수 있도록, 큐(Queue)를 이용해 작업을 분산 처리 하는 FIFO 대기열이다. 디스패치 큐의 종류에는 main, global, private 큐가 있다. main 큐에서 실행되는 main thread는 iOS 에서 오직 하나만 존재하고, 모든 UI 작업들이 이 메인 쓰레드에서 처리된다. 메인 큐는 한 번에 하나의 task 밖에 실행하지 못하는 serial 큐이기 때문에, UI 실행에 영향을 끼칠 수 있는 네트워크 호출..

[Swift ARC] Strong Reference Cycles 강한 순환 참조

ARC가 참조 횟수를 추적하며 자동으로 메모리 관리를 해주지만, 강한 참조 횟수가 절대 0이 되지 않는 문제가 발생할 수도 있는데 이런 경우를 강한 순환 참조(strong reference cycle)라고 한다. 강한 순환 참조 문제는 두 클래스 인스턴스가 서로를 강한 참조하고 있을 때, 그리고 클로저에서 발생할 수 있다. 이는 강한 참조 대신 weak 이나 unowned references 를 사용하여 해결할 수 있다. Strong Reference Cycles 강한 순환 참조 ARC가 참조 횟수를 추적하며 더 이상 참조하는 곳이 없으면 자동으로 메모리 해제를 해주지만, 강한 참조 횟수가 0이 되지 않아 메모리에서 해제되지 않고 계속 남아있는 경우를 강한 순환 참조라고 한다. -> memory leak..

[Swift ARC] strong / weak / unowned references 강한 참조 약한 참조

Strong References 클래스 타입의 프로퍼티, 변수, 상수 등을 선언할 때 별도로 명시하지 않으면 기본적으로 강한 참조를 하게 된다 → reference count 1 증가 클래스의 인스턴스가 서로가 서로를 강한 참조할 때, 영구적으로 해제되지 않아 메모리 누수가 발생할 수 있다. 이를 해결하기 위해 weak references 또는 unowned references 를 사용할 수 있다. Weak References 인스턴스를 참조하더라도 참조 횟수를 늘리지 않음 참조하는 인스턴스가 해제되었을 때 자동으로 nil 값을 할당 nil 값을 저장할 수 있어야 하기 때문에 옵셔널과 var로 선언해야 함 Unowned References 인스턴스를 참조하더라도 참조 횟수를 늘리지 않음 weak 과의 차..

Runtime vs. Compile time 런타임과 컴파일타임

Compile Time 컴파일타임이란? : 개발 언어(high-level programming language)로 작성된 소스코드가, compile 과정을 통해 컴퓨터가 이해할 수 있는 기계어(low-level code / machine code)로 변환되는 과정을 말한다. 컴파일 타임 동안 컴파일러는 코드의 syntax, semantic, type 을 체크한다. Compile time Error 컴파일타임 에러란? : 소스코드가 컴파일 되는 과정 중에 발생하는 에러를 의미한다. 대표적으로 Syntax error, 파일 참조 오류 등과 같은 문제들로 인해 컴파일이 방해되어 발생하는 오류들이 있다. 컴파일 에러 발생 시, 현재 문제가 되는 소스코드를 알려준다. Run-Time 런타임이란? : 컴파일 과정을..

컴퓨터시스템 2023.02.06

[Swift ARC] Automatic Reference Counting

Swift에서는 Automatic Reference Counting 방식을 이용하여 메모리 관리를 자동으로 해주고 있다. 참조 타입인 클래스의 인스턴스를 관리할 때 사용되는 방식으로, 클래스의 새 인스턴스를 만들 때마다 ARC는 해당 인스턴스의 정보를 저장하기 위해 메모리에 할당하고, 해당 인스턴스를 참조하는 횟수(reference counting)를 추적하여 더 이상 사용되지 않을 경우 자동으로 메모리를 해제해준다. Reference Counting이란? 메모리를 제어하는 방법 중 하나로, garbage collection의 한 방식이다. 어떤 한 동적 단위(객체, Object)가 참조값을 가지고 이 단위 객체가 참조(참조 복사)되면 참조값을 늘리고 참조한 다음 더이상 사용하지 않게 되면 참조값을 줄이..

곰튀김 RxSwift 시즌 2

곰튀김 RxSwift 시즌 2 : https://youtu.be/iHKBNYMWd5I Github : https://github.com/iamchiwon/RxSwift_In_4_Hours 멀티쓰레드 이용한 데이터 다운로드 및 indicator 표시 비동기 처리 downloadJson 함수를 따로 빼서 그것만 멀티 쓰레드로 처리하도록. but 그러면 리턴값을 받을 수 가 없다? -> @escaping 클로저를 사용해서 결과 값을 전달 completion: @escaping (String?) -> Void … completion(json) Single argument function types require parentheses 그런데 만약 결과값이 옵셔널인 경우 escaping이 디폴트이기 때문에 생략 가..

월악산 영봉 눈꽃산행 - 보덕암 코스

2023-01-18 (수)악 소리가 절로 난다는 3대 악산 월악산에서 악 소리 한 번 안내고 아주 즐겁게 힐링하고 왔다. (3대 악산은 검색해봐도 의견이 분분하더라..)월악산 영봉에 가는 코스는 여러 개가 있는데 덕주사 코스, 보덕암 코스, 신륵사 코스 중에서 고민이 많이 되었다.보통 100대 명산 하시는 분들은 빠르게 정상 찍고 오기 위해 가성비 좋은 최단 코스로 신륵사를 많이 선택하는 것 같던데, 우리는 충주호 뷰가 멋지다는 보덕암 코스를 선택했다. 가기 전에 동행인의 추천으로 이시영님 유튜브를 보고 갔는데, 아주 도움이 되었던 것 같다. 산행 답사 하고온 느낌?월악산 올라가면서 처음 가는 길인데도 이미 와본 것 처럼 익숙하게 느껴지더라. 그래서 결론부터 말하자면 🏔 월악산 영봉 1,097m📍 보..

운동/등산 2023.01.25

[Swift] defer 란?

defer는 함수 내에서 작성 위치와 상관 없이 함수 종료 직전에 맨 마지막으로 실행되는 구문이다. 하나의 함수 내에서 defer는 여러 번 호출 가능하며, 중첩해서 사용할 수도 있는데 그럴 경우 순차적으로 스택에 저장이 되어, 실행 순서는 가장 마지막에 있는 defer 구문이 가장 먼저 실행된다. 그리고 defer를 읽기 전에 함수가 종료되면 defer는 실행되지 않는다. defer : 미루다, 연기하다. defer 란? defer는 보통 함수 안에서 작성되는 클로저인데 작성된 위치와 상관없이 함수 종료 직전에 실행되는 구문 자신의 실행을 함수의 맨 마지막으로 미루는 것 defer가 호출되는 순서? 기본적으로 함수 내에서 defer 구문은 함수의 가장 마지막에 실행이 되는데, 하나의 함수 내에서 def..

728x90
반응형