목록Swift (35)
Jupyo's Daily Story
프로토콜 (Protocols) | Swift준수하는 타입이 구현해야 하는 요구사항을 정의합니다. 프로토콜 (protocol) 은 메서드, 프로퍼티, 그리고 특정 작업이나 기능의 부분이 적합한 다른 요구사항의 청사진을 정의합니다. 프로토콜bbiguduk.gitbook.io 프로토콜(protocol)은 특정 기능 수행에 필요한 메서드와 프로퍼티의 청사진입니다. 클래스, 구조체, 열거형은 이 프로토콜을 채택하여 요구사항을 구현할 수 있고, 이를 프로토콜 준수라고 합니다. 또한 프로토콜 확장을 통해 기본 구현을 제공하거나 추가 기능을 정의할 수 있습니다. 프로토콜 구문 (Protocol Syntax) 클래스, 구조체, 그리고 열거형과 유사한 방법으로 프로토콜을 정의합니다.protocol SomeProtocol ..
staticstatic은 클래스, 구조체, 열거형에서 사용 가능하며 타입 레벨 속성 또는 메서드를 정의할 때 사용static으로 선언된 멤버는 서브클래스에서 오버라이드가 불가능하여 고정된 동작을 유지class Vehicle { static let wheels = 4 // static 프로퍼티 static func makeSound() { // static 메서드 print("Some sound") }}class Car: Vehicle { // static은 오버라이드 불가능 // override static func makeSound() { } // 컴파일 에러}// 사용Vehicle.wheels // 4Vehicle.makeSound() // "Some s..
생명주기(Lifecycle)는 객체 또는 소프트웨어 컴포넌트가 생성되고 사용되며 소멸되는 일련의 과정을 말합니다.Swift에서 자주 다루는 생명주기는 앱, ViewController, View 등 여러 가지가 있습니다. 앱 생명주기앱이 실행되는 동안 여러 상태로 이동하는 과정을 나타냅니다.상태설명Not Running앱이 실행되지 않은 상태입니다.Inactive앱이 실행 중이나 이벤트를 수신하지 않는 상태입니다. 주로 전환 중에 발생합니다.Active앱이 포그라운드에 있으며 이벤트를 수신하는 활성 상태입니다.Background앱이 화면에 보이지 않지만, 코드가 실행될 수 있는 상태입니다.Suspended앱이 백그라운드에 있으나, 실행 중인 코드가 없는 상태입니다. 메모리가 부족할 때 우선적으로 종료 될 수..
딕셔너리(Dictionary)는 순서와 상관없이 콜렉션에 같은 타입의 키(Key)와 같은 타입의 값(Value)를 저장합니다. 각 값은 딕셔너리 내부에서 값에 대한 식별자로 동작하는 유니크한 키와 조합됩니다. 배열의 아이템과 다르게 딕셔너리의 아이템은 특정 순서를 가지고 있지 않습니다. 특정 단어를 찾기위해 사전을 찾는 방법과 같이 식별자를 기준으로 값을 찾을 때 딕셔너리를 사용합니다. 딕셔너리 생성 빈 딕셔너리 생성배열처럼 초기화 구문을 사용하여 타입을 포함한 빈 딕셔너리를 생성할 수 있습니다.var namesOfIntegers = [Int: String]()var countsOfAnimals: [String: Int] = [:] namesOfintegers의 키는 Int 타입이고, 값은 String ..
집합(Set)은 고유한 값들의 모음으로, 중복된 값을 허용하지 않는 데이터 구조입니다. 데이터의 값이 중복되지 않고, 순서가 중요하지 않은 경우에 사용됩니다. 고유한 특성가변성: Swift의 집합은 가변적이며, 필요에 따라 크기를 조정할 수 있습니다.타입 안정성: 집합은 지정된 데이터 타입의 값만 포함할 수 있습니다.성능: 집합은 대량의 데이터를 효율적으로 관리하고, 포함 여부를 빠르게 검사할 수 있는 특징을 가집니다. 집합 생성 요소 생성// 빈 집합 생성var emptySet: Set = []// 초기화 집합var fruits: Set = ["Apple", "Banana", "Orange"] 요소 추가fruits.insert("Peach") // ["Apple", "Banana", "Orange", ..
배열(Array)은 동일한 데이터 타입의 값들을 순차적으로 저장하는 데이터 구조입니다. 각 요소는 인덱스를 통해 접근할 수 있으며, 인덱스는 0부터 시작합니다. 배열의 생성var emptyArray: [String] = [] // 빈 배열 생성var numbers = [1, 2, 3] // 초기화 배열var floats: Array = [1.0, 2.0, 3.0] // 타입을 명시하여 생성 요소 접근배열의 요소는 인덱스를 사용하여 접근합니다.let firstNumber = numbers[0] // numbers의 첫 번째 요소 배열의 수정추가numbers.append(4) // [1, 2, 3, 4]numbers += [5, 6] // [1,..
ARC는 자동으로 메모리 관리를 수행하는 방식입니다. 객체가 더 이상 필요 없을 때 메모리를 자동으로 해제하며, 주로 클래스 인스턴스에 적용됩니다. ARC는 참조 카운트를 사용하여 객체가 몇 군데에서 참조되고 있는지 추적합니다. 이때 참조 카운트가 0이 되면 해당 객체의 메모리가 해제됩니다. ARC의 동작 방식클래스 인스턴스를 생성하면 ARC는 해당 인스턴스의 메모리를 할당하고, 이 인스턴스를 참조하는 각 프로퍼티나 변수는 참조 카운트(Reference Count)를 증가시킵니다. 참조 카운트가 0이 되면 메모리를 자동으로 해제합니다.class Person { let name: String init(name: String) { self.name = name } deinit { print(..
클로저(Closures)는 코드 블록을 나타내며, Swift에서 일급 객체로 다룰 수 있는 익명 함수입니다. 함수처럼 매개변수, 반환 타입을 가질 수 있으며, 변수나 상수에 할당될 수 있습니다. 또한, 클로저는 외부 변수를 캡처하여 해당 변수를 내부에서 사용할 수 있습니다. 클로저의 특징익명 함수: 이름 없이 코드 블록 자체를 작성할 수 있습니다.캡처 기능: 클로저 내부에서 함수 외부의 값을 참조하고 변경할 수 있습니다.간결한 표현: 클로저는 문법을 단축하여 간결하게 사용할 수 있습니다. 기본 구조{ (매개변수) -> 반환타입 in 실행할 코드} 클로저의 사용 예let multiply = { (a: Int, b: Int) -> Int in return a * b}print(multiply(3,..
Codable는 Encodable과 Decodable 프로토콜을 결합한 프로토콜로, 데이터를 다른 형식으로 변환하거나, 다른 형식에서 데이터를 복원할 때 사용됩니다. Codable은 주로 JSON, plist와 같은 포맷에서 사용됩니다. Codable 프로토콜Codable는 두 가지 프로토콜을 포함합니다.Encodable: 객체를 인코딩(데이터로 변환)Decodable: 데이터를 객체로 디코딩(복원)struct User: Codable { var name: String var age: Int} JSON 인코딩 (객체 -> JSON)JSONEncoder는 객체를 JSON 형식으로 인코딩합니다.let user = User(name: "Alice", age: 28)if let encoded = tr..
OperationQueue는 iOS와 macOS에서 비동기 작업을 관리하는 고수준 API입니다. 이를 통해 비동기 작업을 스케줄링하고, 우선순위 설정, 종속성 관리 등의 기능을 사용할 수 있습니다. OperationQueue는 GCD(Grand Central Dispatch)보다 더 많은 제어와 유연성을 제공합니다. OperationQueue의 기본 개념Operation 객체를 사용하여 작업을 정의하고, 이를 OperationQueue에 추가하여 실행합니다.큐(Queue)에 추가된 작업은 비동기적으로 실행되며, 직렬(Serial) 또는 병렬(Concurrent)로 처리될 수 있습니다. Operation과 OperationQueueOperation은 작업을 표현하는 객체로, 커스텀 작업을 만들거나, 미리 ..