swift 11

Debounce와 Throttle, 이벤트 중복 방지를 위한 필터링 방법

안녕하세요!  버튼을 빠르게 두 번 눌렀는데, 의도치 않게 두 번 실행된 경험이 있지 않나요?🥲예를 들어, 결제 버튼을 여러 번 눌러 중복 결제가 발생하거나, API 요청이 짧은 시간 내에 여러 번 호출되는 경우가 있을 수 있습니다.위처럼 예기치 못한 오류를 방지하거나 혹은 성능 상의 문제를 해결하기 위해 중복된 이벤트를 필터링해야 할 때가 있습니다.  이러한 필터링 기법 중 하나인 함수 호출 빈도를 줄이는 기법인 debounce와 throttle에 대해 알아보겠습니다.  1️⃣ debouncedebounce란 연속해서 호출되는 함수 중에서 마지막 호출만 실행되도록 하는 기법입니다. 이게 구현을 어떻게 하느냐 하면, 이벤트가 발생한 후 특정 시간의 타이머가 실행되어 다음 이벤트를 기다립니다. 새로운 이..

카테고리 없음 2025.03.11

Swift Testing 간결하게 시작하기

안녕하세요!오늘은 Swift Testing에 대해 알아보겠습니다. Swift TestingApple은 WWDC24에서 Swift로 작성된 코드를 테스트하기 위한 새로운 패키지인 Swift Testing을 소개했습니다. 기존 XCTest와 Swift Testing의 차이점언어 통합성: XCTest는 Objective-C 기반으로 시작되어 Swift와의 통합성에 제한이 있었습니다. 반면, Swift Testing은 Swift로 작성되어 언어적 일관성과 통합성이 향상되었습니다.문법 간결성: XCTest에서는 테스트 메서드를 작성할 때 다소 장황한 문법을 사용해야 했지만, Swift Testing은 간결한 문법을 통해 테스트 코드를 보다 읽기 쉽게 작성할 수 있습니다.비동기 테스트 지원: XCTest에서는 비동..

카테고리 없음 2025.03.05

Swift: Decode 시에 응답 데이터 변환하기

안녕하세요. 일반적으로 API 통신을 할 때, JSON 형식의 응답 데이터를 Data 타입에서 구조체로 미리 정의해 놓은 타입으로 변환하여 사용합니다. 이 과정을 디코딩이라고 부르는데요, 단순히 변환하는 것 뿐만 아니라 필요한 데이터로 가공 및 변환을 동시에 수행해야 하는 경우가 있습니다.이번 글에서는 Decodable을 활용하여 JSON 디코딩 과정에서 데이터를 변환하는 방법을 정리해보겠습니다.1️⃣ 보통의 Decodablestruct PostByUser: Decodable { let title: String let body: String}Swift 구조체에 Decodable을 채택하면 Data 타입의 데이터를 해당 구조체로 디코딩할 수 있게 됩니다. 2️⃣ 매칭된 키 값 변경을 위한 CodingK..

카테고리 없음 2025.03.04

Swift - 키보드의 높이를 알아내는 법🚀

앱 개발 중 TextField 또는 TextEditor와 같이 텍스트 입력 필드를 사용할 때, 자연스럽게 키보드가 화면 위로 올라오게 됩니다. 키보드가 올라온 화면까지 고려해서 디자인과 기능을 구현하기도 하고 또 구현 의도에 따라 키보드가 화면을 가리지 않도록 적절한 처리가 필요한 경우가 있습니다. 이를 위해 키보드의 높이를 감지하는 방법을 알아봅시다.1️⃣ NotificationCenter를 사용하여 키보드 높이 구하기📌 키보드 이벤트 감지하기키보드의 높이를 알아내기 위해서는 키보드가 나타나거나 사라질 때 발생하는 Notification을 활용할 수 있습니다. iOS에서는 다음과 같은 키보드 관련 Notification을 제공합니다.✅ UIKeyboardWillShowNotification : 키보드..

카테고리 없음 2025.03.01

WebView 사용하기 (3) - Safari Link

App에서 웹 페이지를 띄워야 할 때 사용할 수 있는 방법으로 크게 3가지 방법이 있다고 했습니다.마지막으로 기본 웹 브라우저인 Safari를 열어서 웹 페이지를 여는 방법입니다. 엄밀히 말하면 앱 내에서 웹 브라우저를 열지 않고, iOS 기본 Safari 앱에서 웹 페이지를 직접 여는 방법이므로 WebView는 아니긴 합니다..만 가장 간단하고 빠른 방법이고 또 사용 빈도가 가장 적습니다.📌 사용법Button { if let url = URL(string: "https://apple.com") { UIApplication.shared.open(url) }} label: { ..}UIApplication.shared.open 이게 끝입니다. ✅ 실제로 사용하실 때는 canOpenURL()을 ..

카테고리 없음 2025.02.27

WebView 사용하기 (2) - WKWebView

SFSafariWebViewController를 사용하는 방법을 알아보았는데, 이어서 App 내에서 직접 웹 페이지를 로드하고, JavaScript 실행 및 커스텀 웹 컨트롤을 구현할 수 있는 웹 뷰인 WKWebView에 대해 정리하겠습니다.Apple의 WebKit 프레임워크에서 제공하며, UIWebView의 후속 버전으로 성능과 보안이 크게 개선되었습니다. 📌 WKWebView의 주요 특징앱 내에서 완전한 웹 브라우징 가능WKWebView는 웹 페이지를 로드하고, JavaScript 실행 및 CSS 적용이 가능하여 맞춤형 브라우저를 만들 수 있음.JavaScript 실행 및 DOM 조작 가능evaluateJavaScript(_:completionHandler:)를 사용하여 JavaScript 코드를 ..

카테고리 없음 2025.02.25

WebView 사용하기 (1) - SFSafariViewController

앱에서 웹 페이지를 보여줘야 할 때 WebView를 사용하죠.iOS에서 사용할 수 있는 방법이 크게 3가지 있는데요, 그 중 첫 번째로 SFSafariViewController를 사용하는 방법을 소개하겠습니다.  SFSafariViewController는 앱 내에서 웹 콘텐츠를 표시할 때 사용하는 기본 웹 브라우저 컨트롤러입니다. 사용자는 앱을 종료하지 않고도 웹 페이지를 볼 수 있으며, Safari의 자동 로그인, 콘텐츠 차단, 키체인, 공유 확장 기능 등의 기능을 활용할 수 있습니다.  📌 SFSafariViewController의 주요 특징Safari의 기능 제공Safari에서 제공하는 보안, 쿠키 공유, 자동 로그인, 키체인 등의 기능을 그대로 사용할 수 있음.앱 내 웹 브라우징 지원웹뷰를 별도..

카테고리 없음 2025.02.24

WKWebView를 사용하면서 발생하는 Memory Leaks 해결법

🔴 오류WKWebView를 사용한 객체가 메모리에서 해제되지 않고 남아 Memory Leaks 발생 🔍 원인WKUserContentController가 WKScriptMessageHandler를 강하게 참조(strong reference)하기 때문 🛠 해결 방법1. WKScriptMessageHandler를 핸들러에서 제거한다. - UIKitoverride func viewDidDisappear(_ animated: Bool) { ... popupWebView = nil contentController.removeScriptMessageHandler(forName: "handler")} viewDidDisappear에서 removeScriptMessageHandler 메서드 호출 - Swift..

카테고리 없음 2025.02.18

Refreshable: 당겨서 새로고침 적용하기

UIKit에서의 UIRefreshControl이 있다면 SwiftUI에서는 refreshable 수정자를 통해 쉽게 처리할 수 있습니다.  사용법 refreshable 적용:refreshable 모디파이어는 List나 ScrollView와 같은 스크롤 가능한 뷰에 적용할 수 있습니다. 사용자가 뷰를 아래로 당길 때 실행할 비동기 작업을 정의합니다.import SwiftUIstruct ContentView: View { @State private var items = ["Item 1", "Item 2", "Item 3"] var body: some View { List(items, id: \.self) { item in Text(item) } ..

카테고리 없음 2025.02.05

UIRefreshControl: UITableView와 UICollectionView에서 아래로 당겨 새로고침 하기

사용법1. UIRefreshControl 초기화 및 설정:let refreshControl = UIRefreshControl()refreshControl.addTarget(self, action: #selector(handleRefresh), for: .valueChanged) 2. 테이블 뷰 또는 컬렉션 뷰에 추가:UITableView의 경우:tableView.refreshControl = refreshControlUICollectionView의 경우:collectionView.refreshControl = refreshControl 새로고침 동작 처리 메서드 구현 예시@objc private func pullToRefresh() { self.collectionView.reloadData() Dis..

카테고리 없음 2025.02.04