Swift 11

[Swift] Singleton에서의 private init()

✅ private init()의 역할private initializer는 코드의 다른 부분에서 Settings 클래스 인스턴스를 생성하려고 시도하는 것을 막아줌class MySingleton { static let shared = MySingleton() private init() {} // 👈👈} class UserDefaultsManager { static let shared = UserDefaultsManager() private init() {} // 외부 생성 차단}// 다른 곳에서:let manager = UserDefaultsManager() // ❌ 컴파일 에러!// 'UserDefaultsManager' initializer is inaccessible du..

Swift 2025.06.20

[Swift] Result 타입

✅ Result 타입이란?Result는 Swift 5.0에서 추가된 표준 라이브러리 타입으로, 성공과 실패를 명확하게 구분하는 enum enum Result { case success(Success) case failure(Failure)} ✅ Result의 장점1. 명확한 상태 표현// ❌ 기존 방식 - 4가지 상태 가능 (애매함)func oldStyle(completion: @escaping (Int?, NetworkError?) -> Void) { // (data, nil), (nil, error), (data, error), (nil, nil) - 뭐가 뭔지?}// ✅ Result 방식 - 2가지 상태만 (명확함)func newStyle(completion: @escaping (R..

Swift 2025.06.17

[Swift] Any와 AnyObject

오랜만에 스토리보드로 화면을 그리다가 눈에 밟히는 Any..!프로토콜에서 사용했던 AnyObject와 무슨 관련이 있는건가 궁금했다 타입캐스팅 공식문서에서 설명하고 있는 Any와 AnyObject 그리고 예상했겠지만 Any, AnyObject 둘 다 프로토콜임 ✅ 예제// Any - 모든 타입 수용let anyInt: Any = 42 // Int (값 타입)let anyString: Any = "Hello" // String (값 타입)let anyButton: Any = UIButton() // UIButton (참조 타입)// AnyObject - 클래스만 수용let objButton: AnyObject = UIButton() // 클래스// let objInt..

Swift 2025.06.12

[Swift] 캡처리스트와 순환참조

ARC 2탄 느낌으로 낋여본다class로만 순환참조 예제를 보다가 클로저랑 캡처리스트에서 순환참조가 이해가 안되어 하는 정리! ✅ 클로저도 객체다// Dog 예제var dog1: Dog? = Dog(name: "멍멍이") // 힙에 Dog 객체 생성var dog2: Dog? = dog1 // 같은 객체 참조// 클로저 예제 (동일한 원리!)var completion: (() -> Void)?let myClosure = { print("Hello") } // 힙에 클로저 객체 생성completion = myClosure // 같은 클로저 객체 참조-> 클로저도 힙에 생성되는 실제 객체이고, 변수들은 그 주소를 가리킨다!✅ 캡처(Capture)란?1...

Swift 2025.06.05

[Swift] 고차함수 더 이상 헷갈리지 않기

개인적으로 한번 헷갈리기 시작해 영원히 헷갈리는 문법이 몇 가지 있는데, 그 중 첫번째 손님으로 고차함수 map과 reduce 모심 ✅ 각 요소를 변환하는 Mapclass MapExamples { func basicMapExamples() { print("=== MAP 기본 예시 ===") // 예시 1: 숫자를 2배로 let numbers = [1, 2, 3, 4, 5] // Before: for문 사용 var doubled: [Int] = [] for number in numbers { doubled.append(number * 2) } pr..

Swift 2025.06.04

[WWDC] ARC in Swift

✅ ARC란?Swift에서 메모리 관리를 자동으로 수행하는 방법 ✅ 객체의 생명주기객체의 수명은 init 시점에 시작되어 마지막 사용 시점에 종료됩니다ARC는 객체의 수명이 종료된 후 해당 객체를 해제합니다ARC는 참조 카운트를 통해 객체의 수명을 추적합니다Swift 컴파일러는 retain/release 작업을 삽입합니다Swift 런타임은 참조 카운트가 0인 객체를 해제합니다 ✅ ARC의 동작방식class Traveler { var name: String = "" var destination: String?}func test() { let traveler1 = Traveler(name: "Lily") // retain let traveler2 = traveler1 // REF..

Swift 2025.05.30

Struct 접근제어와 Memberwise Initializers

struct는 원래 자동으로 Memberwise Initializers를 제공해준다하지만.. struct에서 하나의 프로퍼티라도 private이라면 Memberwise Initializers 또한 private! 내부에선 원래대로 자동으로 제공이 되는 것을 확인할 수 있다 하지만! 외부에서 사용하려면 따로 init을 작성해주어야 한다struct Person { var name: String var age: Int? private var hobby: String = "Swimming" init(name: String) { self.name = name }}let milou = Person(name: "Milou") 추가로 직접 init도 하고 싶고, Membe..

Swift 2025.05.29

[Swift]switch문 대신 if, guard 사용하기

Optional pattern을 보다가 생소한 문법을 발견했다let someOptional: Int? = 42// Match using an enumeration case pattern.if case .some(let x) = someOptional { print(x)}옵셔널은 enum타입으로 구현되어 있는데, 이렇게 if case 문으로 한가지 case만 처리하는 신기한 문법..! if case, guard caseenum NetworkResult { case success(data: String) case failure(code: Int, message: String) case noConnection}let result: NetworkResult = .failure(code: 4..

Swift 2025.05.28

Struct와 Class 차이(부제: 내가 SwiftUI가 어려웠던 이유)

바야흐로 작년 3월,, 처음 SwiftUI를 접했을 때 익숙한 UIKit과 너무 달라 울고 싶었던 기억이 떠올랐다예를 들어 상태관리라던가 상태관리라던가 상태관리라던가......그 근본적인 이유가 Struct와 Class의 차이인데, 그땐 미처 생각하지도 못했다 많은 차이점들이 있지만 SwiftUI와 UIKit에서 느꼈던 Struct와 Class의 차이를 위주로 정리해보려고 한다 ✅ 메모리 저장 방식의 근본적 차이Class (UIKit) 힙(Heap) 영역에 저장참조(포인터)를 통해 접근여러 변수가 같은 객체를 가리킬 수 있음ARC로 메모리 관리// UIKit 방식class UIViewController { var view: UIView! var title: String?}let vc1 = My..

Swift 2025.05.27

[Swift] COW 동작 원리

Swift의 String과 CollectionType(Array, Dictionary, Set) 등은 struct로 구현된 값 타입COW(Copy-on-Write) 최적화 덕분에 값 타입처럼 동작하면서도 실제 복사는 필요할 때만 일어남 var a = [1, 2, 3]var b = a // 힙 메모리를 참조만 공유 (복사 X)b.append(4) // 쓰기 시점에 복사 발생 (COW)b가 수정되기 전까지는 a와 동일한 힙 메모리 참조를 공유b.append(4) 시점에 Swift는 복사본을 생성하고 변경 작업을 수행→ 불필요한 복사를 줄이면서도 값 타입처럼 안전하게 동작

Swift 2025.05.26