Swift 치트시트 — 간결한 참조
Swift 5.9 문법, 값 타입, 프로토콜과 가장 자주 쓰이는 표준 라이브러리를 다루는 치트시트로, 일상 작업의 약 80%를 커버합니다.
Swift Swift 5.9
LLVM (swiftc / Swift toolchain) · 다중 패러다임 (프로토콜 지향 · OO · 함수형) · 정적 · 강타입
추천 학습 경로
먼저 print와 변수 바인딩을 익히세요 → 값 타입(struct/enum)과 옵셔널 Optional을 익히세요 → 함수, 클로저와 컬렉션을 깊이 다루세요 → 프로토콜 지향 설계와 확장을 이해하세요 → do-catch와 throws로 오류를 처리하세요 → async/await과 DispatchQueue로 동시성을 작성하세요 → 필요에 따라 URLSession, 날짜, 빌드, 테스트를 배우세요. FAQ 섹션은 돌아와서 함정을 피할 때 적합합니다.
1.Hello World 및 빌드 환경
Swift 프로그램, SwiftPM 프로젝트 및 툴체인 실행.
최소 프로그램
최상위 코드가 프로그램 진입점입니다. print는 출력합니다. import로 모듈을 가져옵니다.
실행과 빌드
swift는 스크립트를 직접 실행합니다. swiftc는 컴파일합니다. swift run으로 패키지를 실행합니다.
SwiftPM 프로젝트
swift package init로 초기화합니다. Package.swift 매니페스트입니다. Sources는 소스 코드 디렉터리입니다.
import 가져오기
import로 모듈을 가져옵니다. Foundation이 자주 사용됩니다. 필요에 따라 하위 모듈을 가져옵니다.
출력과 보간
print/print(items:). 문자열 보간 \(값). 구분 기호와 종료 기호.
명령줄 인수
CommandLine.arguments로 인수를 가져옵니다. 첫 번째는 프로그램 경로입니다.
다중 파일
동일 패키지의 여러 소스 파일이 타입을 공유합니다. internal 접근 수준.
Xcode 통합
Xcode 프로젝트 구성. target, scheme. iOS 개발 워크플로.
2.변수와 상수
var/let 바인딩, 타입 추론, 스코프와 명명.
var와 let
let은 변경할 수 없는 상수입니다. var는 변경 가능한 변수입니다. let 사용을 우선하세요.
타입 추론
컴파일러가 리터럴과 컨텍스트를 기반으로 타입을 추론합니다. 복잡한 경우에는 명시적으로 표기합니다.
명시적 타입
콜론 뒤에 타입을 표기합니다. 가독성을 높입니다. 변환과 리터럴이 호환됩니다.
상수
let이 상수를 선언합니다. 참조 타입 상수는 변경할 수 없는 참조입니다. 컴파일 타임 상수.
섀도잉
내부 스코프의 같은 이름 변수가 외부를 가립니다. if/switch의 로컬 상수에서 흔합니다.
스코프
{}가 스코프를 정의합니다. 내부에서 외부에 접근할 수 있습니다. 외부에서 내부에 접근할 수 없습니다.
명명 규칙
Swift 명명 규약. camelCase, 명확한 동사, 약어 회피.
타입 변환
숫자 타입의 명시적 변환. init() 이니셜라이저. 문자열과 숫자 간 상호 변환.
3.타입 시스템
기본 타입, 튜플, 구조체, 열거형과 옵셔널 값.
기본 타입
Int, Double, Bool, String, Character. 값 타입.
정수 타입
Int8-Int64, UInt 시리즈. 플랫폼 Int. 오버플로 처리.
부동소수점
Float/Double 정밀도. CGFloat UI 좌표. 연산과 특수 값.
튜플
다중 복합 값. 명명된 요소. 구조 분해. 경량 데이터 그룹화.
구조체
struct 값 타입. 자동 멤버 이니셜라이저. 속성과 메서드.
열거형
enum 관련 값 그룹화. 연결 값. 원시 값. 완전 매칭.
옵셔널
Optional은 비어 있을 수 있음을 나타냅니다. T? 구문. nil은 값이 없음을 나타냅니다.
중첩 타입
타입 내에 타입을 정의합니다. 네임스페이스 구성. 열거형이 관련 타입을 담습니다.
4.값 타입과 참조
값 시맨틱, 클래스 참조, copy-on-write와 메모리 레이아웃.
값 vs 참조
struct는 값 시맨틱으로 복사됩니다. class는 참조를 공유합니다. 언어의 핵심 차이입니다.
class 시맨틱
class 참조 타입. 정체성이 고유합니다. 가변성과 스레드 공유.
Copy-on-write
배열 등 값 타입은 내부 저장소를 공유합니다. 수정할 때만 실제로 복사됩니다.
정체성과 동등성
=== 참조 정체성. == 값 동등성 (Equatable). 차이가 중요합니다.
weak와 unowned
weak는 약한 참조로 카운트를 증가시키지 않습니다. unowned는 비소유 참조입니다. 순환 참조를 끊습니다.
inout 매개변수
inout 매개변수를 참조로 전달합니다. 함수 내에서 원본 값을 수정합니다. &로 호출.
포인터 상호 운용
UnsafePointer와 C 상호 운용. 메모리 관리 책임. 위험 영역.
메모리 레이아웃
타입 메모리 레이아웃. 바이트 정렬. 성능과 상호 운용에 영향.
5.제어 흐름
if, switch, guard, 반복과 옵셔널 바인딩.
if / else
if 조건 실행. else if 다중 분기. 조건에 괄호가 필요 없습니다.
switch
switch 완전 매칭. 범위, 튜플, 바인딩. break가 필요 없습니다.
guard
guard 조기 종료. else는 반드시 스코프를 종료해야 합니다. else에 분기가 있습니다.
for-in 반복
for-in으로 범위, 배열, 딕셔너리를 순회합니다. 인덱스를 사용한 순회.
while 반복
while 조건 반복. repeat-while은 먼저 실행하고 나중에 판단합니다.
break와 continue
break는 반복을 종료합니다. continue는 이번 회차를 건너뜁니다. 레이블을 사용해 중첩을 종료.
if let
옵셔널 바인딩 언래핑. guard let 조기 종료. 다중 값 동시 언래핑.
패턴 매칭
switch/if의 패턴. case let, where. 타입 매칭.
6.함수
함수 정의, 매개변수 레이블, 반환값, 함수 타입과 클로저.
함수 정의
func로 함수 정의. 매개변수와 반환값. 호출 구문.
매개변수 레이블
매개변수 레이블과 내부 이름. _로 레이블 생략. 가독성 설계.
기본 매개변수 값
매개변수 기본값. 호출 시 생략 가능. 마지막에 위치하거나 모두 기본값 필요.
반환값
반환값 타입. 다중 값은 튜플 사용. 단일 표현식 암시적 반환.
가변 인자
...로 여러 인자를 배열로 수집. 임의 개수. 마지막 매개변수.
inout 매개변수
inout으로 외부 변수 수정. &로 참조 전달. 값 타입 제자리 수정.
함수 타입
함수를 타입으로 사용. 할당, 전달, 반환. 일급 시민.
클로저
클로저는 컨텍스트를 캡처. 트레일링 클로저. 축약 인자.
7.문자열
String 연산, 보간, 부분 문자열, Unicode과 포맷팅.
String 기초
String 값 타입. 리터럴과 가변성. Character 구성.
보간
\(expression)으로 값 삽입. 타입 안전. 임의 표현식.
연결
문자열 연결. append. join. += 연산자.
여러 줄 문자열
삼중 따옴표 여러 줄. 들여쓰기 제거. 값 보간. 구분.
자주 쓰는 메서드
대소문자, 검색, 교체, 분할, 트림. 자주 쓰는 문자열 API.
부분 문자열
Substring은 원본 문자열을 참조. 슬라이싱은 Substring 반환. String으로 변환하여 소유.
Unicode
문자는 Unicode 스칼라로 구성. 코드 포인트. 확장 자소 클러스터.
포맷팅
String(format:) C 스타일 포맷. 숫자 패딩과 정밀도.
8.컬렉션
Array, Dictionary, Set, 고차 함수와 범위.
Array
순서가 있는 값 컬렉션. 제네릭 [T]. 추가, 삭제, 수정, 조회.
배열 연산
슬라이싱, 교체, 병합, 검색. 자주 쓰는 고차 메서드.
Dictionary
키-값 쌍 컬렉션. [String: T]. 순서 없음. O(1) 조회.
Set
순서 없는 유일 요소 컬렉션. 해시 집합. 집합 연산.
순회
배열/딕셔너리/집합 순회. 인덱스 포함. 역순. 필터 조건 순회.
고차 함수
map, filter, reduce, compactMap, sorted. 함수형 처리.
중첩 컬렉션
컬렉션의 조합. 다차원 배열, 딕셔너리 안의 배열, 구조체 컬렉션.
Range
반개방 범위 ..<, 폐쇄 범위 ... . 배열 슬라이싱과 순환.
9.메모리 관리
ARC 참조 카운팅, 약한 참조, 순환 참조와 메모리 최적화.
ARC
자동 참조 카운팅으로 클래스 인스턴스 관리. 참조 카운트 0이 되면 해제.
weak/unowned
약한 참조는 카운트 증가 안 함. 순환 참조 방지. 해제된 객체 접근 처리.
자동 해제 풀
autoreleasepool 지연 해제. 대량 루프 메모리 제어.
복사 의미론
값 타입 복사 안전. 대용량 타입 최적화. 공유와 유일성.
순환 참조
두 클래스가 서로 강하게 참조하여 순환 형성. 메모리 누수. weak로 해결.
스택과 힙
값 타입은 스택, 참조 타입은 힙. 할당과 성능.
lazy 저장
lazy 지연 초기화. 사용 시 생성. 비용 큰 속성 최적화.
메모리 최적화
힙 할당 감소, 버퍼 재사용, 대용량 복사 방지. 성능 튜닝.
10.클래스와 프로토콜
class, 상속, 프로토콜, 확장과 프로토콜 지향 설계.
class 정의
클래스는 속성과 메서드 정의. 참조 타입. 이니셜라이저.
상속
서브클래스가 부모 클래스 상속. 저장 속성, 메서드. 최종 클래스 final.
메서드 오버라이드
override로 메서드, 속성, 이니셜라이저 재정의. super로 부모 클래스 호출.
프로토콜
protocol로 요구사항 정의. 타입 채택. 프로토콜 지향 설계의 핵심.
프로토콜 확장
extension으로 기본 구현 제공. 제약 확장. 프로토콜 기본 메서드.
확장
extension은 기존 타입에 메서드를 추가한다. 코드를 분류해 정리한다.
프로퍼티 옵저버
willSet/didSet으로 프로퍼티 변화를 감지한다. 화면 갱신, 검증에 쓴다.
연산 프로퍼티
get/set으로 값을 계산한다. 저장하지 않는다. 파생 데이터에 쓴다.
11.오류 처리
throws, do-catch, try, defer와 사용자 정의 오류를 다룬다.
Error 프로토콜
Error 프로토콜로 오류 타입을 표시한다. 열거형으로 오류 분류를 정의한다.
throws
throws는 오류를 던질 수 있는 함수를 표시한다. throw로 오류를 던진다. 호출 시 처리해야 한다.
do-catch
do 블록 안에서 try를 쓴다. catch로 오류를 잡는다. 여러 갈래로 나눌 수 있다.
try 변형
try는 catch가 필요하다. try?는 옵셔널로 바꾼다. try!는 강제한다(크래시 위험).
사용자 정의 오류
오류가 문맥 정보를 담는다. LocalizedError로 설명을 제공한다. 오류 코드를 쓴다.
defer 정리
defer는 스코프가 끝날 때 실행된다. 리소스를 정리한다. 역순으로 실행된다.
치명적 오류
fatalError는 복구 불가능한 크래시를 낸다. precondition으로 조건을 검사한다.
Result 타입
Result<Success, Failure>는 성공 또는 실패를 명시한다. throws를 피할 수 있다.
12.입출력
명령줄 입력, 파일 읽고 쓰기, FileManager와 Codable을 다룬다.
입력 읽기
readLine으로 명령줄 입력을 읽는다. 반복해서 상호작용한다. 숫자를 파싱한다.
파일 읽기
String(contentsOf:)로 파일을 읽는다. Data는 바이너리를 담는다. 한 줄씩 읽을 수도 있다.
파일 쓰기
문자열과 Data를 쓴다. 추가 모드를 지원한다. 원자적 쓰기를 쓴다.
FileManager
파일 시스템 작업을 한다. 디렉터리 생성, 삭제, 이동, 존재 여부 확인을 한다.
출력 제어
print 변형이 있다. stderr로도 출력한다. 구분자와 종결자를 지정한다. 문자열 표현을 다룬다.
Data 처리
Data는 바이트 컨테이너다. 문자열과 서로 변환한다. base64로 인코딩하고 디코딩한다.
JSONSerialization
JSON을 딕셔너리나 배열로 바꾼다. 반대로 직렬화도 한다. JSONSerialization 클래스를 쓴다.
Codable
Codable로 자동 직렬화한다. JSONEncoder/Decoder를 쓴다. 프로토콜 기반이다.
13.흔한 함정
Swift 입문자가 가장 많이 빠지는 함정과 올바른 작성법을 다룬다.
강제 언래핑
!로 nil을 언래핑하면 크래시가 난다. 옵셔널 바인딩과 nil 병합 연산자를 우선 쓴다.
옵셔널 체이닝
?.로 연쇄 접근한다. 중간에 하나라도 nil이면 전체가 nil이다. 대입에도 쓸 수 있다.
클로저 순환 참조
클로저가 self를 강하게 캡처해 순환이 생긴다. 캡처 목록 [weak self]를 쓴다.
배열 범위 초과
인덱스가 범위를 벗어나면 크래시가 난다. first/last/prefix로 안전하게 접근한다. 경계를 확인한다.
mutating
struct 메서드가 프로퍼티를 바꾸려면 mutating이 필요하다. 값 타입은 불변 복사본이다.
문자열 인덱스
문자열은 정수 첨자를 쓸 수 없다. 문자가 여러 바이트를 차지한다. index 메서드를 쓴다.
프로토콜과 Self
프로토콜에서 Self 제약을 쓴다. associatedtype을 쓴다. 타입 소거를 활용한다.
암시적 언래핑
T!는 암시적 언래핑 옵셔널이다. 초기화되지 않은 채 쓰면 크래시가 난다. 신중히 쓴다.
14.동시성
GCD, async/await, Task와 actor 동시성 모델을 다룬다.
GCD 기초
DispatchQueue는 직렬/동시 큐를 제공한다. 전역 큐와 메인 큐가 있다.
디스패치 그룹
DispatchGroup으로 여러 작업이 끝나기를 기다린다. 여러 동시 작업 결과를 모은다.
async/await
현대 Swift 동시성 문법이다. 비동기 함수와 일시 중단을 다룬다. 구조적 동시성을 지원한다.
async let
여러 비동기 호출을 동시에 실행한다. 독립된 하위 작업에 바인딩한다. 병렬로 대기한다.
Task
Task는 동시성 단위를 만든다. 컨텍스트를 상속한다. 취소와 우선순위를 다룬다.
actor
actor는 상태를 격리한다. 데이터 경쟁을 막는다. 비동기 메서드로 접근한다.
메인 스레드
UI 작업은 반드시 메인 스레드에서 해야 한다. 스레드를 전환한다. 메인 스레드인지 확인한다.
스레드 안전성
가변 상태의 동시 접근을 보호한다. 락, 큐, 원자적 연산을 쓴다.
15.네트워크
URLSession, HTTP 요청, 비동기 네트워크와 JSON 연동을 다룬다.
URLSession
URLSession으로 네트워크 요청을 보낸다. 설정과 델리게이트를 다룬다. 세션 종류가 있다.
GET 요청
GET을 보낸다. async/await로 데이터를 받는다. 응답 상태를 처리한다.
POST 요청
JSON 본문을 보낸다. 폼도 제출한다. Content-Type을 설정한다.
비동기 네트워크
async/await로 네트워크를 호출한다. 요청을 동시에 보낸다. 작업을 취소한다.
URL 구성
URLComponents로 URL을 안전하게 구성합니다. 쿼리 매개변수 인코딩. 경로 결합.
파일 다운로드
다운로드 작업으로 파일을 저장합니다. 진행률 모니터링. 백그라운드 다운로드.
네트워크 JSON
JSON을 요청하고 Codable로 디코딩합니다. 날짜와 전략 처리.
파일 업로드
multipart 폼 업로드. 파일 본문. 경계 구분자.
16.시간과 날짜
Date, DateFormatter, 달력 연산과 타이머.
Date
Date는 시점을 나타냅니다. 시간대에 무관한 절대 시각. 생성과 비교.
날짜 형식화
DateFormatter로 날짜를 표시합니다. 현지화된 형식. 사용자 지정 형식.
날짜 파싱
문자열을 Date로 변환. 고정 형식 파싱. ISO8601 파싱.
날짜 구성 요소
DateComponents로 연월일을 추출합니다. 달력 구성 요소 연산.
달력 연산
날짜에 일/월 더하기와 빼기. 다음 주/다음 달. Calendar 연산 안전.
시간 간격
코드 소요 시간 측정. TimeInterval 초 단위. 성능 타이밍.
Timer
타이머 반복 실행. 일회성 타이머. RunLoop 주의.
날짜 비교
날짜 순서 비교. 같은 날 판정. 정렬과 검증.
17.프로세스와 시스템
명령행 인자, 환경 변수, 프로세스 작업과 파일 경로.
명령줄 인수
CommandLine으로 인자를 가져옵니다. 인자와 옵션 처리.
환경 변수
환경 변수 읽기. 설정과 전달. 민감 정보 주의.
Process
Process로 자식 프로세스를 시작합니다. 명령 실행. 출력 캡처.
경로 처리
URL 경로 작업. 결합, 확장자, 파일 이름. 샌드박스 디렉터리.
종료 코드
프로그램 종료 코드. exit과 fatalError. 0 성공 비 0 실패.
시그널 처리
시스템 시그널 캡처. SIGINT 등. 우아한 종료.
작업 디렉터리
현재 작업 디렉터리 가져오기와 전환. 파일 상대 경로 기준.
프로세스 파일 I/O
표준 입력 읽기. 표준 출력 쓰기. 파이프 상호작용.
18.정규 표현식
정규 리터럴, NSRegularExpression과 패턴 매칭.
정규식 기초
정규식 문법 개념. 문자 클래스, 수량자, 그룹.
정규 리터럴
Swift 5.7 정규 리터럴 /.../. 타입화된 매칭. 캡처 이름 지정.
NSRegularExpression
NSRegularExpression 정규 엔진. 범위 매칭. 구 시스템 호환.
매칭
첫 매칭, 전체 매칭, 매칭 여부 판정. 범위 가져오기.
캡처 그룹
캡처 그룹 내용 추출. 명명 캡처. 정규식 그룹 참조.
치환
정규식으로 텍스트 치환. 템플릿이 캡처 그룹 참조. 조건부 치환.
분할
정규식으로 문자열 분할. 구분자 유지와 삭제. 다중 구분자.
일반 패턴
이메일, URL, 숫자, 휴대폰 등 일반 정규식 템플릿.
19.빌드와 도구
swiftc 컴파일, SwiftPM 빌드, 포맷과 검사 도구.
swiftc 컴파일
명령행에서 단일 파일 컴파일. 실행 파일 생성. 최적화 옵션.
SwiftPM 빌드
swift build로 프로젝트 컴파일. 증분 빌드. 릴리스 모드.
테스트 실행
swift test 테스트 스위트. XCTest와 테스트 타깃.
Package.swift
SwiftPM 패키지 매니페스트. 타깃과 의존성 선언. 플랫폼 설정.
SwiftLint
코드 스타일 검사. 규칙 설정. CI 통합.
swift-format
공식 코드 포맷 도구. 포맷 규칙과 설정.
xcodebuild
Xcode 프로젝트 명령행 빌드. 내보내기와 아카이브. CI 사용.
릴리스 절차
버전 관리, 빌드 릴리스, 배포. 릴리스 체크리스트.
이 치트시트에 대해
이 페이지는 Swift 5.9의 자기 완결적인 치트시트로, 실제 프로젝트에서 언어 핵심과 가장 자주 쓰이는 표준 라이브러리의 약 80% 일반적인 사용법을 다룹니다. 내용은 현대적인 관용구를 지향합니다: 값 타입(struct/enum), 프로토콜 지향 설계, async/await 구조적 동시성, if let 패턴 매칭, 그리고 Codable 직렬화. 권위 있는 참고 자료는 Swift 공식 언어 가이드와 API 설계 명세를 참조하세요. 19개 섹션은 각각 하나의 주제에 집중합니다. 첫 번째 프로그램부터 옵셔널, 프로토콜, 동시성, 흔한 함정까지. 각 섹션은 예제가 있는 8개의 하위 섹션(각 5-20줄)으로 나뉘며, 총 약 150개의 주제를 다룹니다. 코드 스니펫은 의도적으로 짧고 자기 설명적입니다. 모든 처리는 브라우저에서 완료됩니다. 업로드 없음, 추적 없음. 이 페이지는 GuruToolkit 무료 개발자 도구 모음의 일부이며, 코드 스니펫은 어떠한 보증 없이 자유롭게 사용할 수 있습니다.
버전 2.1.0