Swift 25

[Swift] associatedtype

1. `associatedtype`이란?`associatedtype`은 프로토콜 내에서 사용되는 타입의 플레이스홀더를 정의하는 데 사용.이를 통해 프로토콜을 채택하는 타입이 구체적인 타입을 지정하도록 요구할 수 있음. `associatedtype`은 프로토콜을 보다 유연하고 재사용 가능하게 만들어 줌.특히, `Generic`과 함께 사용하면 강력한 타입 추론과 코드 유연성을 제공할 수 있음.2. `associatedtype` 기본 문법protocol ProtocolName { associatedtype TypeName // 프로토콜 요구 사항}`associatedtype`은 프로토콜의 타입 매개변수와 같은 역할.프로토콜을 채택한 타입은 `associatedtype`으로 선언된 타입을 구현하면서..

Swift 2024.04.18

[Swift] Protocol

1. Protocol이란?Protocol(프로토콜)은 특정 작업이나 기능에 대한 요구 사항의 집합을 정의하는 데 사용.프로토콜은 클래스, 구조체, 열거형 등에서 구현할 수 있으며, 객체 지향 프로그래밍의 인터페이스와 유사한 역할.2. Protocol의 주요 특징구현 강제화프로토콜을 채택한 타입은 프로토콜에서 정의한 요구 사항을 반드시 구현해야 함.유연한 설계클래스, 구조체, 열거형 모두 프로토콜을 채택할 수 있음.다중 채택 가능하나의 타입이 여러 프로토콜을 채택할 수 있음.타입 독립성프로토콜을 통해 타입 간 의존성을 줄이고, 코드 재사용성을 높일 수 있음.3. Protocol의 기본 문법protocol ProtocolName { // 요구 사항 정의}4. Protocol의 사용 예제protocol ..

Swift 2024.04.18

[Swift] Generic

1. Generic이란?Generic(제네릭)은 코드의 재사용성과 유연성을 극대화하기 위해 사용.특정 타입에 국한되지 않고, 다양한 타입에서 동작할 수 있는 코드를 작성할 수 있도록 함.Generic을 사용하면 코드의 중복을 줄이고, 타입 안정성을 유지하면서도 유연한 구조를 구현이 가능.2. Generic의 동작 원리Generic은 타입을 플레이스홀더로 정의하여, 실제 타입은 코드가 호출될 때 결정.이렇게 하면 동일한 로직을 여러 타입에 대해 중복 작성할 필요가 없음.3. Generic의 사용 예제Generic 타입은 꺾쇠 괄호()를 사용하여 선언.func swapValues(_ a: inout T, _ b: inout T) { let temp = a a = b b = temp}var x..

Swift 2024.04.15

[Swift] GCD vs Swift Concurrency: 스레드 관리와 성능

GCD vs Swift Concurrency: 스레드 관리와 성능GCD(Grand Central Dispatch)와 Swift Concurrency는 비동기 작업을 처리하고자 할 때, 스레드 관리 방식에 차이가 존재.이 차이는 성능, 자원 효율성, 스레드 관련 문제에서 나타나게 됨.특히 thread explosion이나 컨텍스트 스위칭과 같은 문제는 GCD에서 발생할 수 있음.1. GCD에서의 스레드 관리1.1. GCD의 기본 동작GCD는 스레드 풀(thread pool)을 사용하여 작업을 처리. 비동기 작업이 큐에 적재되면, 큐는 적절한 스레드를 선택하여 작업을 실행.시스템 리소스를 효율적으로 관리하기 위해 여러 개의 작업을 동시에 병렬 처리하며, 이를 통해 멀티코어 CPU의 성능을 최대한 활용한다고 ..

Swift 2024.04.15

[Swift] Swift Concurrency

Swift ConcurrencySwift Concurrency는 Swift에서 비동기 작업을 안전하고 직관적으로 관리할 수 있도록 제공되는 기능.비동기 함수, `async`/`await`, `actor`, `Task`, `TaskGroup` 등의 개념을 포함하여 비동기 작업, 동시성 문제를 간결하게 해결할 수 있음.이를 통해 비동기 코드를 동기 코드처럼 작성할 수 있음.1. 비동기 프로그래밍과 동시성비동기 프로그래밍은 여러 작업을 동시에 처리하여 응답성을 향상시키는 것이 목표.네트워크 요청, 파일 I/O, 데이터베이스 작업 등은 비동기로 실행되어야 UI가 블로킹되지 않고, 사용자에게 원활한 경험을 제공할 수 있음.여기서 동시성(Concurrency)은 여러 작업을 동시에 실행하는 것이 아니라, 병렬로 처..

Swift 2024.04.15

[Swift] GCD

GCD (Grand Central Dispatch)GCD는 Apple이 제공하는 비동기 작업과 동시성 처리를 위한 저수준 API.멀티코어 프로세서의 성능을 최대로 활용할 수 있도록 도와주며, 스레드 관리를 자동 처리하여 개발자가 직접 스레드를 생성하고 관리하는 부담을 덜어 줌.Swift에서는 GCD를 사용하여 백그라운드 작업, UI 업데이트, 파일 입출력, 네트워크 요청과 같은 작업을 효율적으로 처리할 수 있음.1. GCD의 주요 개념1.1. 작업 단위: 작업(Tasks)GCD에서는 모든 작업을 작업 단위로 처리.이 작업은 비동기로 실행할 수 있으며, 각각의 작업은 클로저 형태로 작성.GCD는 개발자가 요청한 작업을 큐에 적재하고, 적절한 스레드에서 병렬로 처리.1.2. 큐: Dispatch QueueD..

Swift 2024.04.13

[Swift] ARC

ARC (Automatic Reference Counting)ARC는 Swift에서 참조 타입(클래스 인스턴스)의 메모리 관리를 자동으로 처리하는 메커니즘.런타임 시 객체의 참조 횟수를 추적하여 객체가 더 이상 사용되지 않을 때 메모리를 해제하는 방식으로 메모리 누수 방지.Swift에서는 개발자가 직접 메모리를 관리하지 않고, ARC가 자동으로 메모리 해제를 처리해주기 때문에 메모리 관리가 간편.그러나 참조 사이클과 같은 메모리 누수를 유발할 수 있는 문제를 이해하고 적절히 해결해야 함.1. ARC 작동 방식ARC는 객체가 생성될 때 그 객체를 참조하는 참조 카운트(reference count)를 증가시키고, 더 이상 참조되지 않으면 감소시킴.참조 카운트가 0이 되면 ARC는 해당 객체를 메모리에서 해제..

Swift 2024.04.13

[Swift] mutating

1. mutating 키워드란?Swift에서 구조체(struct)와 열거형(enum)은 값 타입. 기본적으로 값 타입은 인스턴스의 프로퍼티를 직접 수정할 수 없음.이를 해결하기 위해 Swift에서는 mutating 키워드를 통해, 구조체 또는 열거형의 메서드에서 인스턴스 자체를 수정할 수 있도록 함.2. mutating의 역할구조체나 열거형의 프로퍼티를 수정할 수 있도록 메서드에 선언.메서드가 호출될 때, 인스턴스의 새로운 복사본을 생성하고, 그 복사본을 수정.3. 문법mutating 키워드는 메서드 정의 앞에 추가.struct Counter { var count = 0 mutating func increment() { count += 1 }}var counter = Coun..

Swift 2024.04.12

[Swift] inout

1. inout 파라미터란?Swift는 기본적으로 함수의 파라미터를 값 타입으로 취급.즉, 함수 내부에서 파라미터의 값을 변경하더라도 함수 외부의 원본 값에는 영향을 미치지 않음. 하지만 특정 상황에서는 함수 내부에서 값을 변경하고, 그 변경된 값을 함수 호출부에 전달해야 할 때가 있음.이때 inout 키워드를 사용하면 파라미터의 값을 함수 외부로 전달이 가능.2. inout 파라미터의 동작 원리inout 키워드는 함수를 호출할 때, 파라미터의 값을 복사하고 함수 내부에서 해당 복사본을 수정한 후, 수정된 값을 다시 원본으로 복사하는 방식으로 동작.즉, inout은 직접 참조를 전달하는 것처럼 보이지만, 실제로는 복사-수정-반복사라는 메커니즘을 사용.3. 문법inout 파라미터를 선언하려면 함수의 파라미..

Swift 2024.04.08

[Swift] Escaping Closure (@escaping)

1. Escaping Closure란?Swift에서 클로저(Closure)는 코드 블록을 캡슐화하여 나중에 실행하거나 전달할 수 있는 강력한 도구.클로저는 기본적으로 함수 내부에서 실행되도록 설계되어 있지만, 특정 상황에서는 함수가 종료된 이후에도 실행될 수 있음.이런 경우, 클로저가 함수의 스코프를 벗어날 수 있다는 것을 나타내기 위해 `@escaping` 키워드를 사용.2. Escaping Closure의 정의`@escaping` 클로저란, 함수의 수명보다 더 오래 살아남는 클로저를 의미.이는 클로저가 함수의 실행이 종료된 후에도 외부에서 참조되거나 호출될 가능성이 있는 경우를 나타냄.3. Escaping Closure의 주요 특징함수의 스코프를 벗어남.클로저가 함수 외부로 전달되거나 저장될 경우.비..

Swift 2024.04.05