목록Swift (25)
J
1. weak와 unowned란?Swift에서는 메모리 관리를 위해 강한 참조(Strong Reference), 약한 참조(Weak Reference), 비소유 참조(Unowned Reference)를 제공.weak와 unowned는 참조 타입 사이에서 강한 순환 참조(Strong Reference Cycle)를 방지하는 데 사용.둘 다 ARC(Automatic Reference Counting)의 메모리 누수 문제를 해결하는 데 중요한 역할.2. weak와 unowned의 공통점강한 참조(Strong Reference)를 생성하지 않음.참조하는 인스턴스가 메모리에서 해제될 수 있도록 함.강한 순환 참조를 방지하여 메모리 누수를 줄임.3. weak와 unowned의 차이점 weakunowned참조 대상O..
1. `self`: 현재 인스턴스를 나타내는 키워드`self`는 현재 인스턴스 자체를 참조.Swift에서 모든 인스턴스 메서드와 이니셜라이저에는 암묵적으로 `self`가 포함되어 있으며, 필요한 경우 이를 명시적으로 사용 가능.1.1 사용 목적현재 인스턴스 참조메서드나 이니셜라이저 내부에서 `self`를 사용하면, 해당 메서드가 호출된 인스턴스를 참조.이를 통해 인스턴스 프로퍼티에 접근하거나 인스턴스 메서드를 호출할 수 있음.이름 충돌 해결이니셜라이저나 메서드의 파라미터 이름이 인스턴스 프로퍼티와 동일한 경우, `self`로 인스턴스 프로퍼티를 참조.클로저 캡처클로저 내부에서 `self`를 사용하면, `self`가 클로저 외부의 인스턴스를 참조.1.2 동작 원리와 예제struct Car { var ..
1. `associatedtype`이란?`associatedtype`은 프로토콜 내에서 사용되는 타입의 플레이스홀더를 정의하는 데 사용.이를 통해 프로토콜을 채택하는 타입이 구체적인 타입을 지정하도록 요구할 수 있음. `associatedtype`은 프로토콜을 보다 유연하고 재사용 가능하게 만들어 줌.특히, `Generic`과 함께 사용하면 강력한 타입 추론과 코드 유연성을 제공할 수 있음.2. `associatedtype` 기본 문법protocol ProtocolName { associatedtype TypeName // 프로토콜 요구 사항}`associatedtype`은 프로토콜의 타입 매개변수와 같은 역할.프로토콜을 채택한 타입은 `associatedtype`으로 선언된 타입을 구현하면서..
1. Protocol이란?Protocol(프로토콜)은 특정 작업이나 기능에 대한 요구 사항의 집합을 정의하는 데 사용.프로토콜은 클래스, 구조체, 열거형 등에서 구현할 수 있으며, 객체 지향 프로그래밍의 인터페이스와 유사한 역할.2. Protocol의 주요 특징구현 강제화프로토콜을 채택한 타입은 프로토콜에서 정의한 요구 사항을 반드시 구현해야 함.유연한 설계클래스, 구조체, 열거형 모두 프로토콜을 채택할 수 있음.다중 채택 가능하나의 타입이 여러 프로토콜을 채택할 수 있음.타입 독립성프로토콜을 통해 타입 간 의존성을 줄이고, 코드 재사용성을 높일 수 있음.3. Protocol의 기본 문법protocol ProtocolName { // 요구 사항 정의}4. Protocol의 사용 예제protocol ..
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..
GCD vs Swift Concurrency: 스레드 관리와 성능GCD(Grand Central Dispatch)와 Swift Concurrency는 비동기 작업을 처리하고자 할 때, 스레드 관리 방식에 차이가 존재.이 차이는 성능, 자원 효율성, 스레드 관련 문제에서 나타나게 됨.특히 thread explosion이나 컨텍스트 스위칭과 같은 문제는 GCD에서 발생할 수 있음.1. GCD에서의 스레드 관리1.1. GCD의 기본 동작GCD는 스레드 풀(thread pool)을 사용하여 작업을 처리. 비동기 작업이 큐에 적재되면, 큐는 적절한 스레드를 선택하여 작업을 실행.시스템 리소스를 효율적으로 관리하기 위해 여러 개의 작업을 동시에 병렬 처리하며, 이를 통해 멀티코어 CPU의 성능을 최대한 활용한다고 ..
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..