스위프트 13

[iOS] Combine 프레임워크에서 에러 처리

Combine 프레임워크는 비동기 프로그래밍을 위한 도구이며, 데이터를 스트림 형태로 처리하는 데 유용합니다.하지만, 네트워크 통신이나 데이터 처리 과정에서 예기치 않은 에러가 발생할 수 있기 때문에, 이를 적절하게 처리하는 것이 중요합니다.이 글에서는 Combine에서의 에러 처리 방식과 관련된 주요 개념을 설명하겠습니다.1. Combine에서 에러 처리 개요Combine 프레임워크에서 Publisher는 성공(Output)과 실패(Failure) 두 가지 결과를 가질 수 있습니다. 실패 시, Failure 타입의 에러가 발생하며, 이는 Publisher의 타입 파라미터에서 명시됩니다.import Combineenum NetworkError: Error { case invalidURL cas..

클라이언트 2025.02.19

[Swift] UnsafePointer, UnsafeMutablePointer, UnsafeRawPointer 차이점과 사용법

1. Swift의 Unsafe Pointer란?Swift는 기본적으로 안전한 메모리 관리를 제공하지만, 특정 상황에서는 직접 메모리 주소를 다뤄야 하는 경우가 있습니다. 예를 들어, C 언어와 상호작용할 때 포인터를 활용해야 하거나, 성능 최적화를 위해 로우 레벨 메모리 조작이 필요할 때가 있습니다. 이를 위해 Swift는 Unsafe Pointer라는 개념을 제공합니다.Unsafe Pointer는 직접 메모리를 참조하는 포인터이며, 사용자가 메모리 관리를 직접 해야 합니다. Swift에서는 다음과 같은 Unsafe Pointer 타입을 제공합니다.UnsafePointer: 읽기 전용 포인터UnsafeMutablePointer: 읽기/쓰기 가능한 포인터UnsafeRawPointer: 형식(type)이 없..

[Swift] Swift로 중복문자가 없는 가장 긴 부분 문자열 찾기

문제 설명주어진 문자열에서 중복된 문자가 없는 가장 긴 서브스트링을 찾아야 합니다. 또한, 해당 서브스트링의 길이도 함께 출력해야 합니다.예제입력 : "aabcbbc"출력 : 3 // "abc"입력 : "bbbbbb"출력 : 1 // "b"입력 : "aaaaabbbcedfg"출력 : 6 // "bcedfg"해결 방법이 문제를 해결하기 위해 슬라이딩 윈도우(Sliding Window) 기법과 해시셋(Hash Set) 을 사용합니다.슬라이딩 윈도우: 문자열을 순회하면서, 현재 서브스트링의 길이를 유지하면서 중복 문자가 나오면 윈도우의 시작을 조정합니다.해시셋: 현재 윈도우에서 중복 문자가 존재하는지 빠르게 확인하기 위해 사용합니다.이제 Swift 코드로 구현해보겠습니다.Swift 코드 구현import Fou..

개발 일반 2025.02.18

[watchOS] iPhone과 애플 워치 데이터 주고 받기

이번 포스트에서는 아이폰과 애플 워치 간 데이터를 주고 받는 방법에 대해 살펴보도록 하겠습니다. 애플 워치의 경우 단독으로 동작하는 앱도 있지만 대부분은 Host App과 통신하면서 동작하는 App이 많습니다. 심박수, 걸음 수 등 각종 건강 정보 역시 Host App (iPhone)으로 데이터를 전송하면서 동작합니다. 이렇듯 애플 워치와 아이폰 간 데이터를 주고 받는 방법을 아는 것은 굉장히 중요합니다. XCode 프로젝트 생성하기 iOS App with Watch App 을 선택하여 아이폰과 함께 동작하는 (독립적이지 않은) App을 개발하도록 선택해줍니다. 프로젝트 이름을 적절하게 입력해주시고 기타 설정은 기본 값을 유지하도록 합니다. 레이아웃 구성하기 프로젝트 생성이 완료되었다면 레이아웃을 구성할..

클라이언트 2020.03.02

Swift 클로저 (Closure)

이번 포스트에서는 Swift에서의 Closure에 대해 살펴봅도록 하겠습니다. 클로저(Closure)는 코드에 전달되어 사용할 수 있는 독립적인 기능 블록입니다. Swift의 클로저는 C 및 Objective-C의 블록 및 다른 프로그래밍 언어의 람다(Lambda)와 유사합니다. 클로저(Closure)는 정의된 컨텍스트에서 상수(Constant) 및 변수 (Variable) 에 대한 참조를 캡처하고 저장할 수 있습니다. 이것을 상수(Constant) 와 변수(Variable) 를 닫는 것으로 알려져 있습니다. Swift는 이 캡쳐와 관련한 모든 메모리를 자동으로 처리합니다. 캡쳐의 개념에 대해서는 후반부에서 살펴보도록 하겠습니다. 함수에 도입된 전역 함수와 중첩 함수는 실제로 특수한 클로저입니다. 클로저..

Swift 함수

이번 포스트에서는 Swift에서의 함수에 대해 알아보도록 하겠습니다. Swift에서 함수를 생성하는 방법은 다음과 같습니다. func 함수명(인자 이름: 타입) -> 리턴 타입 { (함수 본체) return (반환 값) } 정의한 함수를 호출하는 방법은 다음과 같습니다. func plus(num1: Int, num2: Int) -> Int { return num1 + num2 } print(plus(1, 2)) // 3 함수의 Parameter Value와 Return Value Parameter가 없는 함수 func sayHelloWorld() -> String { return "hello, world" } print(sayHelloWorld()) // Prints "hello, world" 복수의 P..

Swift 메모리 안정성

이번 포스트에서는 Swift 개발 시 고려할 수 있는 메모리 안정성에 대한 주제를 다뤄보도록 하겠습니다. Swift에서는 메모리 접근 충돌을 막기 위한 작업이 이루어집니다. 그렇기 때문에 Swift 개발자는 Memory Safety에 대해 크게 고려하지 않아도 개발할 수 있습니다. 하지만 Memory Access Conflict가 발생할 수 있는 상황을 이해하고 Memory Access Conflict를 방지할 수 있는 코드를 어떻게 작성할 수 있는지 이해하는 것은 중요합니다. Memory Access Conflict는 변수에 값을 쓰는 작업과 읽는 작업이 동시에 이루어질 경우 주로 발생합니다. var num1 = 1 var num2 = 2 print("num1 : \(num1), num2 : \(num..

Swift 제어문 (조건문, 반복문)

이번 포스트에서는 Swift에서 제공하는 다양한 제어문에 대해 살펴보도록 하겠습니다. Swift에서는 while, if, guard, switch, for-in 등 다양한 제어문을 제공합니다. 1. White Swift에서는 while문과 repeat-while문 두 가지 종류의 while 문을 제공하고 있습니다. while 조건 { 코드 구문 } 실제 사용 예시는 아래와 같습니다. var score = 0 while true { score += 10 if score > 100 { print("while문을 종료합니다.") break } } Repeat-While Repeat - While 문은 다른 언어에서는 do-while이라고 불리는 것과 동일합니다. repeat { 실행 구문 } while 조건 ..

Swift Collection Types (컬렉션 타입)

이번 포스트에서는 Swift에서 제공하는 Collection 타입에 대해 알아보도록 하겠습니다. Swift에서는 Collection Type으로 Array (배열), Dictionary (딕셔너리), Set (집합) 을 제공합니다. Objective-C에서는 Immutable과 Mutable이 구분되어 있었는데 Swift에서는 var와 let으로 그 기능을 사용할 수 있습니다. var로 정의하게 되면 Mutable이 되는 것이며 let으로 정의되면 Immutable이 됩니다. (예를 들어, NSMutableArray와 NSArray는 swift에서 var arr: [Int]? / let arr = [Int]() 와 같이 사용할 수 있습니다.) var arrayMutable: [Int]? // 변경 가능 ..

Swift 문자열과 문자

이번 포스트에서는 Swift에서 문자열과 문자에 대해 살펴보도록 하겠습니다. Swift에서 제공하는 String은 Foundation 프레임워크의 NSString이 bridge된 타입이기 때문에 NSString의 메소드를 String에서 캐스팅 없이 사용 가능합니다. (NSString은 Objective C에서 사용하는 문자열 타입입니다.) 문자열은 큰 따옴표(“)로 묶어 표현 합니다. 여러줄의 문자열을 사용하고 싶은 경우 큰 따옴표 3개(“””)로 묶어서 사용할 수 있습니다. 여러줄 문자열을 사용하며 줄바꿈을 하고 싶으면 백슬래쉬(\)를 사용합니다. let quotation = """ 나는 나와 연애를 했다. \ 너무 슬프지만 어쩔 수 없다. \ "연애를 하고 싶고 좋은 사람을 만나고 싶다." \ ""..