목록전체 글 (51)
J
Swift ConcurrencySwift Concurrency는 Swift에서 비동기 작업을 안전하고 직관적으로 관리할 수 있도록 제공되는 기능.비동기 함수, `async`/`await`, `actor`, `Task`, `TaskGroup` 등의 개념을 포함하여 비동기 작업, 동시성 문제를 간결하게 해결할 수 있음.이를 통해 비동기 코드를 동기 코드처럼 작성할 수 있음.1. 비동기 프로그래밍과 동시성비동기 프로그래밍은 여러 작업을 동시에 처리하여 응답성을 향상시키는 것이 목표.네트워크 요청, 파일 I/O, 데이터베이스 작업 등은 비동기로 실행되어야 UI가 블로킹되지 않고, 사용자에게 원활한 경험을 제공할 수 있음.여기서 동시성(Concurrency)은 여러 작업을 동시에 실행하는 것이 아니라, 병렬로 처..
GCD (Grand Central Dispatch)GCD는 Apple이 제공하는 비동기 작업과 동시성 처리를 위한 저수준 API.멀티코어 프로세서의 성능을 최대로 활용할 수 있도록 도와주며, 스레드 관리를 자동 처리하여 개발자가 직접 스레드를 생성하고 관리하는 부담을 덜어 줌.Swift에서는 GCD를 사용하여 백그라운드 작업, UI 업데이트, 파일 입출력, 네트워크 요청과 같은 작업을 효율적으로 처리할 수 있음.1. GCD의 주요 개념1.1. 작업 단위: 작업(Tasks)GCD에서는 모든 작업을 작업 단위로 처리.이 작업은 비동기로 실행할 수 있으며, 각각의 작업은 클로저 형태로 작성.GCD는 개발자가 요청한 작업을 큐에 적재하고, 적절한 스레드에서 병렬로 처리.1.2. 큐: Dispatch QueueD..
ARC (Automatic Reference Counting)ARC는 Swift에서 참조 타입(클래스 인스턴스)의 메모리 관리를 자동으로 처리하는 메커니즘.런타임 시 객체의 참조 횟수를 추적하여 객체가 더 이상 사용되지 않을 때 메모리를 해제하는 방식으로 메모리 누수 방지.Swift에서는 개발자가 직접 메모리를 관리하지 않고, ARC가 자동으로 메모리 해제를 처리해주기 때문에 메모리 관리가 간편.그러나 참조 사이클과 같은 메모리 누수를 유발할 수 있는 문제를 이해하고 적절히 해결해야 함.1. ARC 작동 방식ARC는 객체가 생성될 때 그 객체를 참조하는 참조 카운트(reference count)를 증가시키고, 더 이상 참조되지 않으면 감소시킴.참조 카운트가 0이 되면 ARC는 해당 객체를 메모리에서 해제..
1. mutating 키워드란?Swift에서 구조체(struct)와 열거형(enum)은 값 타입. 기본적으로 값 타입은 인스턴스의 프로퍼티를 직접 수정할 수 없음.이를 해결하기 위해 Swift에서는 mutating 키워드를 통해, 구조체 또는 열거형의 메서드에서 인스턴스 자체를 수정할 수 있도록 함.2. mutating의 역할구조체나 열거형의 프로퍼티를 수정할 수 있도록 메서드에 선언.메서드가 호출될 때, 인스턴스의 새로운 복사본을 생성하고, 그 복사본을 수정.3. 문법mutating 키워드는 메서드 정의 앞에 추가.struct Counter { var count = 0 mutating func increment() { count += 1 }}var counter = Coun..
1. inout 파라미터란?Swift는 기본적으로 함수의 파라미터를 값 타입으로 취급.즉, 함수 내부에서 파라미터의 값을 변경하더라도 함수 외부의 원본 값에는 영향을 미치지 않음. 하지만 특정 상황에서는 함수 내부에서 값을 변경하고, 그 변경된 값을 함수 호출부에 전달해야 할 때가 있음.이때 inout 키워드를 사용하면 파라미터의 값을 함수 외부로 전달이 가능.2. inout 파라미터의 동작 원리inout 키워드는 함수를 호출할 때, 파라미터의 값을 복사하고 함수 내부에서 해당 복사본을 수정한 후, 수정된 값을 다시 원본으로 복사하는 방식으로 동작.즉, inout은 직접 참조를 전달하는 것처럼 보이지만, 실제로는 복사-수정-반복사라는 메커니즘을 사용.3. 문법inout 파라미터를 선언하려면 함수의 파라미..
1. Escaping Closure란?Swift에서 클로저(Closure)는 코드 블록을 캡슐화하여 나중에 실행하거나 전달할 수 있는 강력한 도구.클로저는 기본적으로 함수 내부에서 실행되도록 설계되어 있지만, 특정 상황에서는 함수가 종료된 이후에도 실행될 수 있음.이런 경우, 클로저가 함수의 스코프를 벗어날 수 있다는 것을 나타내기 위해 `@escaping` 키워드를 사용.2. Escaping Closure의 정의`@escaping` 클로저란, 함수의 수명보다 더 오래 살아남는 클로저를 의미.이는 클로저가 함수의 실행이 종료된 후에도 외부에서 참조되거나 호출될 가능성이 있는 경우를 나타냄.3. Escaping Closure의 주요 특징함수의 스코프를 벗어남.클로저가 함수 외부로 전달되거나 저장될 경우.비..
값 타입(Value Type) vs 참조 타입(Reference Type)Swift에서는 모든 데이터가 값 타입 또는 참조 타입으로 분류.이 두 타입은 메모리에서 데이터를 저장하고 관리하는 방식이 다르며, 각각의 타입은 데이터의 복사 및 공유 방식에 큰 차이가 존재.1. 값 타입(Value Type)값 타입은 데이터를 복사하여 저장. 변수나 상수에 값을 할당하거나, 함수에 값을 전달할 때 새로운 복사본 생성.따라서 값 타입을 사용하는 경우, 각각의 인스턴스는 독립적인 값을 가지며, 다른 변수에 영향을 주지 않음.대표적인 값 타입: struct, enum, tuple1.1. 특징복사값을 할당하거나 전달할 때 값이 복사.독립성하나의 값 타입 인스턴스가 변경되어도 다른 인스턴스에 영향을 미치지 않음.성능스택(..

최적화 활성화Swift는 기본적으로 세 가지의 최적화 수준을 제공함.Onone: 디버깅 목적으로 최적화를 거의 수행하지 않으며, 디버깅 정보가 보존.Osize: 일반적인 생산 코드에 적합한 최적화 수준으로 코드 크기를 줄임.O: 성능을 최우선으로 하는 최적화로, 코드 크기보다는 성능을 중요시.전체 모듈 최적화 (WMO)기본적으로 Swift는 파일 단위로 컴파일하지만, WMO를 활성화하면 전체 프로그램을 하나의 단위로 컴파일하고 최적화를 수행할 수 있음.이는 컴파일 시간을 늘리지만 프로그램 실행 속도는 향상.1. 동적 디스패치 줄이기파일 외부에서 접근할 필요가 없는 선언에는 private 또는 fileprivate를 사용하자오버라이드가 필요 없는 선언에는 final을 사용하자 private, filepri..