map과 compactMap
요소를 변환하고 nil 요소를 제거합니다.
map과 compactMap은(는) CoddyKit의 무료 Swift Academy 강의입니다. 이것은 4개 중 1번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Swift Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Swift Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
매핑이란 무엇인가요?
map은 고차 함수입니다. 클로저를 받아 시퀀스의 모든 요소에 적용하고, 변환된 결과로 이루어진 새 배열을 반환합니다.
- 원본 컬렉션은 절대 변경되지 않습니다.
- 결과 개수는 항상 input 개수와 같습니다.
- 요소 형식은 달라질 수 있습니다(예:
Int→String).
간단한 매핑
배열의 모든 수를 두 배로 만들기:
let numbers = [1, 2, 3, 4]
let doubled = numbers.map { $0 * 2 }
print(doubled) // [2, 4, 6, 8]요소 형식 변경
매핑은 Int values를 String values로 변환할 수 있습니다.
let ids = [10, 20, 30]
let labels = ids.map { "ID-\($0)" }
print(labels) // ["ID-10", "ID-20", "ID-30"]이름이 지정된 함수로 매핑
후행 클로저뿐 아니라, 시그니처가 일치하는 모든 함수를 전달할 수 있습니다.
let words = ["swift", "map"]
let upper = words.map { $0.uppercased() }
print(upper) // ["SWIFT", "MAP"]매핑으로 해결할 수 없는 문제
매핑은 모든 요소를 유지합니다. 변환 결과가 옵셔널일 경우(변환에 실패할 수 있는 경우), [Int?]와 같은 옵셔널 배열이 만들어집니다. 나중에 필터링해야 하는 nil 구멍으로 가득한 배열입니다.
바로 이 문제를 compactMap이 해결합니다.
compactMap 사용하기
compactMap은 각 요소를 변환하고 동시에 nil인 결과를 제거하여, 옵셔널이 아닌 배열을 반환합니다.
let raw = ["1", "2", "x", "4"]
let nums = raw.compactMap { Int($0) }
print(nums) // [1, 2, 4] -- "x" was dropped매핑과 compactMap 나란히 비교
차이는 nil 결과가 남아 있는지 여부입니다.
let raw = ["1", "x", "3"]
print(raw.map { Int($0) }) // [Optional(1), nil, Optional(3)]
print(raw.compactMap { Int($0) }) // [1, 3]컬렉션에서 옵셔널 언래핑하기
compactMap은 옵셔널 배열에서 nil을 제거하는 관용적인 방법입니다.
let maybe: [Int?] = [1, nil, 3, nil, 5]
let clean = maybe.compactMap { $0 }
print(clean) // [1, 3, 5]compactMap으로 구문 분석하기
자주 사용하는 실제 사례는 input의 유효한 줄만 구문 분석하는 것입니다.
let lines = ["42", "", "hello", "7"]
let values = lines.compactMap { Int($0) }
print(values) // [42, 7]
print(values.reduce(0, +)) // 49map과 compactMap 결합하기
두 함수를 연결할 수 있습니다. 매핑으로 데이터 형태를 만들고, compactMap으로 성공한 결과만 유지합니다.
let scores = ["90", "85", "n/a", "70"]
let passed = scores
.compactMap { Int($0) }
.map { $0 >= 80 ? "pass" : "fail" }
print(passed) // ["pass", "pass", "fail"]옵셔널 체인에서 compactMap 사용하기
옵셔널 속성 접근과 함께 사용해도 매우 효과적입니다.
struct User { let name: String? }
let users = [User(name: "Ann"), User(name: nil), User(name: "Bo")]
let names = users.compactMap { $0.name }
print(names) // ["Ann", "Bo"]빠른 확인
요소를 변환하면서 nil 결과를 한 번에 제거하는 함수는 무엇인가요?
복습
두 가지 핵심 변환 함수를 배웠습니다.
map— 모든 요소를 변환하며, 결과 개수는 input 개수와 같습니다.compactMap— 변환한 뒤nil을 제거하므로 구문 분석과 옵셔널 언래핑에 유용합니다.- 두 함수 모두 새 배열을 반환하며 원본을 변경하지 않습니다.
- 두 함수를 연결하면 데이터를 깔끔하게 구성한 다음 필터링할 수 있습니다.
다음 주제: 조건자로 필터링하기
자주 묻는 질문
“map과 compactMap” 강의는 무료인가요?
네 — “map과 compactMap” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Swift Academy 강의 전체를 잠금 해제할 수 있습니다. Swift Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“map과 compactMap”에서 뭘 배우나요?
요소를 변환하고 nil 요소를 제거합니다. 브라우저에서 직접 실행하는 실습 코드로 Swift Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Swift Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Swift Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 1번째 강의입니다.
“map과 compactMap” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Swift Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Swift Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- map과 compactMap
- filter와 조건자
- reduce와 reduce(into:)
- flatMap과 연결