본문 바로가기

iOS/Swift12

[Swift] IUO (Implicitly Unwrapped Optional, 옵셔널 묵시적 추출) !를 타입 뒤에 붙여 선언하는 특수한 Optional이다. 일반 Optional(?)처럼 nil을 가질 수 있지만, 사용할 때 자동으로 언래핑된다.let a: String? = "hello" // 일반 Optional → 사용 시 언래핑 필요let b: String! = "hello" // IUO → 사용 시 자동 언래핑 Optional과 비교let a: String? = "hello"print(a) // Optional("hello")print(a!) // "hello" — 강제 언래핑 필요let b: String! = "hello"print(b) // "hello" — 자동 언래핑 nil일 때 동작의 차이let a: String? = nilpri.. 2026. 3. 15.
[Swift] borrowing, consuming Swift 5.9(SE-0377)에서 소유권 제어(Ownership Control) 키워드가 공식 도입되었다.borrowing, consuming, copy를 이해하면 값 타입의 메모리 흐름을 훨씬 정밀하게 제어할 수 있다. 왜 필요한가?Swift에서 값 타입(struct, enum)을 함수에 전달하면 기본적으로 복사(copy)가 발생한다.struct Packet { var payload: [UInt8] = Array(repeating: 0, count: 65536) // 64KB}func validate(_ packet: Packet) -> Bool { return packet.payload.first == 0xFF // 읽기만 하는데도 64KB를 통째로 복사}단순히 읽기만 하는데 매번.. 2026. 3. 15.
[Swift] KeyPath Swift를 쓰다 보면 \.name, \User.age 같은 문법을 마주치게 된다.Combine의 assign(to:on:), SwiftUI의 Binding, sorted(by:) 같은 곳에서 자주 등장한다.이 글에서는 KeyPath가 무엇인지, 왜 필요한지, 실제로 어디서 어떻게 쓰이는지를 정리한다. KeyPath란?KeyPath는 "어떤 타입의 어떤 프로퍼티로 가는 경로"를 값으로 표현한 것이다.일반적인 프로퍼티 접근은 특정 인스턴스에 묶여 있다.struct User { var name: String var age: Int}let user = User(name: "보경", age: 25)print(user.name) // "보경" — user라는 특정 인스턴스의 name에 접근 반면 Ke.. 2026. 3. 8.
[SwiftUI] @State, @Binding, Projected Value SwiftUI에서 뷰 간에 데이터를 주고받을 때 @State, @Binding, 그리고 $ 기호를 사용한다.각각이 무엇인지, 왜 필요한지, 내부적으로 어떻게 연결되는지를 순서대로 정리한다. 1. Source of Truth — 데이터는 한 곳에서만 소유한다SwiftUI의 데이터 흐름은 Source of Truth 원칙 위에서 동작한다.Source of Truth란 "어떤 상태가 딱 한 곳에서만 관리되고, 나머지는 그걸 참조한다"는 원칙이다.Source of Truth가 여러 곳에 흩어지면 어떤 문제가 생기는지 먼저 보자.// ❌ 안티패턴 — 같은 데이터를 두 곳에서 따로 관리struct ParentView: View { @State var isOn = false}struct ChildView: Vi.. 2026. 3. 8.
[Combine] throttle와 debounce 서론연속적으로 스와이프 새로고침을 하거나, 검색창에 입력할 때 타이핑마다 API가 호출되는 등 불필요한 이벤트가 많이 발생한다.이런 과도한 이벤트로 인해 중복 API 호출, UI 버벅임, 서버 부하 같은 문제가 생기며, 이를 해결하기 위해 Combine의 throttle과 debounce를 사용한다. (RxSwift에도 있음) 즉, 불필요한 중복 호출을 방지하기 위해 Combine의 throttle과 debounce라는 두가지 Operator를 사용한다. throttlehttps://developer.apple.com/documentation/combine/publisher/throttle(for:scheduler:latest:) throttle(for:scheduler:latest:) | Apple D.. 2025. 5. 20.
[iOS] ViewLife Cycle (UIKit vs SwiftUI) UIKit 뷰 컨트롤러 라이프사이클명령형: 각 단계에서 직접 코드 실행수동 관리: 개발자가 직접 생명주기 제어세분화: 6개의 주요 단계로 세분화메모리 관리: 수동으로 retain cycle 관리 필요class ViewController: UIViewController { // 1. 뷰 로드 단계 override func loadView() { // 뷰를 코드로 생성할 때만 오버라이드 // 스토리보드 사용 시 호출하지 말 것 super.loadView() // 주의: 스토리보드 사용 시만 } // 2. 뷰 로드 완료 override func viewDidLoad() { super.viewDidLoad() .. 2024. 5. 20.
[CS] 동기(Sync), 비동기(Async) [참고]더보기https://inpa.tistory.com/entry/WEB-%F0%9F%8C%90-%EB%B9%84%EB%8F%99%EA%B8%B0Async%ED%86%B5%EC%8B%A0-%EB%8F%99%EA%B8%B0Sync%ED%86%B5%EC%8B%A0 🌐 웹의 비동기(Async) / 동기(Sync) 통신 정리웹에서의 비동기와 동기 웹 개발을 하다보면 비동기(Async)와 동기(Sync)라는 용어를 자주 접하게 될 것이다. 이 두 용어는 웹에서 데이터를 주고받는 방식을 설명하는데 사용되는데, 동기(Sync)는inpa.tistory.comhttps://velog.io/@s_sub/Swift-%EB%B9%84%EB%8F%99%EA%B8%B0-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%.. 2024. 2. 16.
[Swift] ARC (Automatic Reference Counting) [참고]더보기https://green1229.tistory.com/45 메모리 구조 & ARC안녕하세요. 그린입니다! 이번 포스팅에서는 메모리 구조와 ARC에 대해 알아보겠습니다..! 1. 메모리 구조 [메모리 구조 화면] 1) 코드 영역: 소스코드 기계어 형태 저장(0과 1), 컴파일 타입 결정, Regreen1229.tistory.comhttps://h4njun.tistory.com/entry/ARCAutomatic-Reference-Counting ARC(Automatic Reference Counting)안녕하세요. 오늘은 ARC에 대해서 알아보도록 하겠습니다. 저는 그동안 자동으로 메모리를 관리해주는 방식으로만 알고 있었는데요. 이건 ARC를 알고 있다고 말할 수 없자나요? 그래서 오늘은 과h4.. 2024. 2. 16.
[Swift] Swift란? [참고]더보기https://seolhee2750.tistory.com/16 [Swift] 스위프트의 언어적 특성나는 스위프트 언어의 개념 공부 이전에, 냅다 문제 풀이부터 시작했다. 문제를 풀어보며 필요한 함수나 기본적인 개념들을 그때 그때 찾아보는 식으로 공부를 했다. 그렇게 하니까 확실히 진도seolhee2750.tistory.comhttps://didu-story.tistory.com/320 [Software Engineering] (iOS/Swift 기준) 객체지향 프로그래밍 (OOP), OOP 특징, OOP 5원칙 SOLID스터디를 운영하고 있습니다. 해당 repository에 가면 더 많은 정보를 보실 수 있습니다! 특히 close 된 PR을 보시면, 어떤 부분에 대해서 고민하고 스터디원들과 .. 2024. 2. 12.
[Swift] Class vs Struct 참고더보기https://icksw.tistory.com/256 [Swift] Class와 Struct의 차이점?안녕하세요 Pingu입니다.🐧 오늘은 iOS 개발에 쓰이는 Swift 언어에서 Class, Struct의 차이점이라는 주제를 가지고 글을 써보려고 합니다. iOS 개발자로 면접을 준비하다 보면 Class, Struct의 차이점이라icksw.tistory.comhttps://infinitt.tistory.com/392 (Swift) Class 와 Struct 의 차이 , 용도와 선택 방법구조체 클래스 모두 데이터를 용도에 맞게 묶어 표현하고자 할 때 유용하다. 하나의 사용자 정의 데이터 타입을 만들어주는것이다. #Class, Struct 공통점 값을 저장할 프로퍼티를 선언할 수 있다.infini.. 2024. 2. 10.
[Swift] 메모리 관리 [참고]https://github.com/JaeYeopHan/Interview_Question_for_Beginner/tree/main/iOShttps://github.com/Yongjai/TIL/blob/master/iOS/Objective-C/MemoryManagement.md/ 스위프트의 메모리 관리스위프트는 ARC로 메모리 관리를 한다.    ARC: 자동 참조 계수(ARC: Automatic Reference Counting)를 뜻하며, 인스턴스가 더 이상 필요없을 때 사용된 메모리를 자동으로 해제해준다.강한 순환 참조: 강환 순환 참조는 ARC로 메모리를 관리할 때 발생할 수 있는 문제이다. 두 개의 객체가 서로 강한 참조를 하는 경우 발생할 수 있다. 강한 순환 참조의 해결법 : 서로 강한 .. 2024. 2. 8.
ObservableObject , @ObservedObject, @StateObject [참고]더보기https://ios-development.tistory.com/1160 [iOS - SwiftUI] @ObservedObject, @StateObject 개념, 차이점, 사용 방법 (MVVM 패턴)목차) SwiftUI의 기본 - 목차 링크 * @Published, @objecervableObject 개념은 Combine이므로, Combine 관련 이전 포스팅 글 참고 @ObservedObejct 란? observable 객체를 구독하는 property wrapper observable 객체가 변경되면 뷰ios-development.tistory.comhttps://www.avanderlee.com/swiftui/stateobject-observedobject-differences/ @Sta.. 2024. 1. 21.