-
Swift iOS 프로젝트에서 경고창(얼럿)을 띄우는 방법 정리 (기본 방식 vs 라이브러리)공부/Swift(프로그래밍 언어) 2026. 3. 5. 00:13반응형
iOS 앱을 만들다 보면 사용자에게 확인을 받거나, 경고를 보여주거나, 선택을 요청해야 하는 순간이 반드시 생깁니다. 가장 대표적인 UI가 바로 Alert(얼럿) 입니다.

이번 글에서는:
- 라이브러리 없이 기본 방식으로 얼럿을 띄우는 방법
- UIKit 기준
- SwiftUI 기준
- 클린 아키텍처(TCA 등)에서 왜 더 복잡해지는지
- 라이브러리(InstantAlertToast)를 사용하면 어떻게 단순해지는지
를 정리해보겠습니다.
1. 라이브러리 없이 기본으로 얼럿 띄우기
1-1. UIKit 기준
UIKit에서는
UIAlertController를 직접 생성해서 사용합니다.기본적인 흐름은 다음과 같습니다:
let alert = UIAlertController( title: "제목", message: "메시지", preferredStyle: .alert ) let okAction = UIAlertAction(title: "확인", style: .default) { _ in print("확인 버튼 탭") } alert.addAction(okAction) present(alert, animated: true)간단해 보이지만, 실제 프로젝트에서는 다음과 같은 일이 반복됩니다:
- UIViewController에서만 present 가능
- 현재 화면을 찾는 코드 필요
- 중복 코드가 계속 발생
- 확인/취소 핸들러를 매번 작성
- 버튼 스타일 분기 처리
확인/취소 버튼이 있는 얼럿을 만들려면 또 한 번 비슷한 코드를 작성해야 합니다.
let cancel = UIAlertAction(title: "취소", style: .cancel) let confirm = UIAlertAction(title: "삭제", style: .destructive) { \_ in // 삭제 처리 }작은 프로젝트에서는 괜찮지만, 화면이 많아질수록 반복 코드가 계속 늘어납니다.
1-2. SwiftUI 기준
SwiftUI에서는 .alert modifier를 사용합니다.
예시:
@State private var isPresented = false Button("얼럿 표시") { isPresented = true } .alert("제목", isPresented: $isPresented) { Button("확인") { } }SwiftUI는 선언형이라 더 간단해 보이지만, 실제로는 다음과 같은 제약이 있습니다:
- 반드시 @State 또는 @Binding 필요
- 화면마다 상태값 추가
- 전역적으로 얼럿을 띄우기 어려움
- 여러 종류의 얼럿을 관리하려면 enum + switch 구조 필요
화면이 복잡해질수록 상태 관리 코드가 빠르게 늘어납니다.
2. 클린 아키텍처 / TCA에서는 왜 더 복잡해질까?
최근에는 Clean Architecture, MVVM + Coordinator, TCA 같은 복잡한 아키텍처가 많이 사용됩니다. 이런 구조에서는:
- View에서 직접 present하지 않음
- 상태(State) 기반으로 얼럿을 정의
- Action → Reducer → State 변경 → View 반영 흐름
예를 들어 TCA의 AlertState는:
- 상태에 Alert 정보를 저장
- Reducer에서 Action으로 처리
- View는 상태를 구독해서 alert 표시
SwiftUI TCA: Alert (경고창) 만드는 방법
먼저, SwiftUI 와 TCA가 결합된 프로젝트에서는 경고창을 일반적인 방법으로 만들지 않고, AlertState라는 경고창을 위한 특수 상태를 활용합니다. AlertState를 사용하는 이유일반 Alert 대신 AlertState를
infoarmory.tistory.com
TCA에서 경고창을 만드는 방법(복잡함)에 대한 글
구조적으로는 매우 명확하고 테스트하기 좋지만, 단순히 “확인 얼럿 하나 띄우기”에는 코드량이 상당히 늘어납니다. 즉, 소규모 앱이나 단순 기능에는 과한 경우도 많습니다.
3. 외부 라이브러리를 사용: InstantAlertToast
이럴 때 사용할 수 있는 접근이 외부 Alert/Toast 라이브러리입니다. 그 중 경량에 사용하기 편한 InstantAlertToast라는 Swift Package가 있습니다.
이 패키지는:
- UIKit + SwiftUI 모두 지원
- 정적 메서드 호출 방식
- 한 줄로 얼럿/토스트 표시
- Apple Music 스타일 토스트 UI 제공
- haptic 지원
- 전역 버튼 텍스트 설정 가능
의 특징을 지니고 있습니다.
설치
Swift Package Manager로 추가:
https://github.com/ayaysir/Instant-Alert-Toast
GitHub - ayaysir/Instant-Alert-Toast: SPM for Simple Alert and Toast
SPM for Simple Alert and Toast. Contribute to ayaysir/Instant-Alert-Toast development by creating an account on GitHub.
github.com
File → Add Packages… https://github.com/ayaysir/Instant-Alert-Toast
Alert 사용 예시
1. 간단한 Alert
Instant.showSimpleAlert("Simple Alert Title", message: "Press OK")
2. 확인 Alert
Instant.showConfirmAlert("Confirmation Alert Title") { _ in print("Confirmed") }
일반 확인 Alert 
Destructive 버튼이 있는 확인 Alert 3. 여러 액션이 있는 Alert
Instant.showAlertWithMultipleActions( "Multiple Actions", message: "Select an option" ) { [ .init(title: "Cancel", style: .cancel), .init(title: "Choice 1", style: .default), .init(title: "Choice 2", style: .destructive) ] }
별도의 상태값 없이, 또는 ViewController를 직접 찾는 코드 없이 즉시 호출이 가능합니다.
Toast 기능도 포함
단순 Alert뿐 아니라, 토스트 UI도 제공합니다.
Instant.showSmallToast( "Loading", subtitle: "Fetching data...", icon: .spinnerSmall )
작은 사이즈 토스트 
중간 사이즈 토스트 버튼이 포함된 토스트도 가능합니다.
Instant.showSmallToastWithButton("Deleted.") { dismiss in print("Button tapped") dismiss() }
버튼 1개가 있는 토스트
4. 언제 이런 라이브러리가 적합할까?
다음과 같은 경우에 특히 적합합니다:
- 소규모 앱
- 빠른 MVP 제작
- 반복적인 얼럿 코드가 많은 프로젝트
- 상태 기반 아키텍처를 쓰지 않는 프로젝트
- 토스트 UI를 직접 만들기 부담스러운 경우
마무리
기본 UIKit/SwiftUI 방식은 표준이고 안전하지만, 프로젝트가 커질수록 반복 코드와 구조적 복잡성이 증가합니다. 특히 최신 아키텍처를 적용하면 단순한 얼럿 하나도 여러 레이어를 거치게 됩니다.
이럴 때는 목적에 맞는 가벼운 외부 라이브러리를 사용해 복잡도를 줄이는 것도 하나의 좋은 선택입니다.
반응형'공부 > Swift(프로그래밍 언어)' 카테고리의 다른 글
Swift iOS: 디바이스 자체 설정에 방향 락이 걸려있을 때도 인식하게 하는 법 (0) 2026.03.23 Embedded Swift 설치, 코드 작성, ESP32-C6에서 빌드 및 작동시키는 방법 (0) 2026.03.21 CocoaPods 서비스 종료? 2026년 이후 변화와 개발자가 알아야 할 점 (0) 2026.02.23 iOS Swift: 위젯(Widget) 넣기 (난이도: 어려움) (0) 2026.02.15 Swift iOS: 이미지를 불러오는 Action Extension(액션 확장)에서 스크린샷 이미지를 인식하지 못하는 문제 해결 방법 (0) 2026.02.08 - 라이브러리 없이 기본 방식으로 얼럿을 띄우는 방법