Swift 를 다시 접했을 때, 이전 내용을 되살리는 시간이에요.
이미 학습한 사람들을 대상으로 간단히 다시 돌아보는 것이 목적이에요.
a != nil ? a! : b
let defaultColorName = "red"
var userDefinedColorName: String? // defaults to nil
var colorNameToUse = userDefinedColorName ?? defaultColorName
Swift의 Collection Types는 데이터를 저장하고 관리하는 데 사용되는 주요 자료 구조로, Array, Set, Dictionary 세 가지가 있습니다.
import Foundation
// 1. Array: 순서가 있는 컬렉션
func demonstrateArray() {
print("=== Array 예제 ===")
var fruits: [String] = ["Apple", "Banana", "Orange"]
// 순서 유지 및 인덱스 접근
print("원래 배열: \(fruits)")
print("첫 번째 과일: \(fruits[0])")
// 요소 추가
fruits.append("Grape")
print("요소 추가 후: \(fruits)")
// 요소 제거
fruits.remove(at: 1)
print("인덱스 1 제거 후: \(fruits)")
}
// 2. Set: 중복되지 않는 순서 없는 컬렉션
func demonstrateSet() {
print("\n=== Set 예제 ===")
var uniqueNumbers: Set<Int> = [1, 2, 3, 3, 4]
// 중복 제거 확인
print("Set 내용: \(uniqueNumbers)") // 3이 한 번만 출력됨
// 요소 추가
uniqueNumbers.insert(5)
print("5 추가 후: \(uniqueNumbers)")
// 특정 요소 포함 여부 확인
let containsThree = uniqueNumbers.contains(3)
print("3 포함 여부: \(containsThree)")
}
// 3. Dictionary: 키-값 쌍으로 저장되는 컬렉션
func demonstrateDictionary() {
print("\n=== Dictionary 예제 ===")
var scores: [String: Int] = ["Alice": 95, "Bob": 87, "Charlie": 92]
// 키를 통한 값 접근
print("원래 딕셔너리: \(scores)")
print("Alice의 점수: \(scores["Alice"] ?? 0)")
// 값 추가 및 수정
scores["David"] = 88
scores["Bob"] = 90
print("수정 후 딕셔너리: \(scores)")
// 키-값 쌍 제거
scores.removeValue(forKey: "Charlie")
print("Charlie 제거 후: \(scores)")
}
// 실행
demonstrateArray()
demonstrateSet()
demonstrateDictionary()
=== Array 예제 ===
원래 배열: ["Apple", "Banana", "Orange"]
첫 번째 과일: Apple
요소 추가 후: ["Apple", "Banana", "Orange", "Grape"]
인덱스 1 제거 후: ["Apple", "Orange", "Grape"]
=== Set 예제 ===
Set 내용: [1, 2, 3, 4]
5 추가 후: [1, 2, 3, 4, 5]
3 포함 여부: true
=== Dictionary 예제 ===
원래 딕셔너리: ["Bob": 87, "Alice": 95, "Charlie": 92]
Alice의 점수: 95
수정 후 딕셔너리: ["Bob": 90, "Alice": 95, "Charlie": 92, "David": 88]
Charlie 제거 후: ["Bob": 90, "Alice": 95, "David": 88]
Array
fruits[0]으로 첫 번째 요소에 접근 가능 (순서 보장).append로 요소 추가, remove(at:)로 특정 인덱스 제거 가능.Set
[1, 2, 3, 3, 4]에서 3이 한 번만 출력됨 (중복 제거).insert로 요소 추가, contains로 특정 요소 존재 여부 확인 가능.Dictionary
scores["Alice"]로 특정 키의 값 접근."David": 88) 및 기존 값 수정("Bob": 90) 가능.removeValue(forKey:)로 특정 키-값 쌍 제거.Swift는 함수형 프로그래밍 패러다임을 지원하는 언어로, 함수형 언어의 주요 특징을 잘 보여줄 수 있습니다. 함수형 언어의 핵심 특징은 다음과 같습니다:
이제 Swift로 위 특징을 보여주는 예제를 만들고 설명하겠습니다.
// 1. 불변성(Immutability)을 위한 상수 사용
let numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
// 2. 일급 함수(First-Class Functions): 함수를 변수에 저장
let isEven: (Int) -> Bool = { $0 % 2 == 0 }
// 3. 고차 함수(Higher-Order Functions): filter와 map 사용
let evenNumbers = numbers.filter(isEven) // 짝수만 필터링
let squaredEvens = evenNumbers.map { $0 * $0 } // 짝수를 제곱
// 4. 순수 함수(Pure Functions): 부작용 없는 계산
func add(_ a: Int, _ b: Int) -> Int {
return a + b // 입력이 같으면 항상 동일한 출력
}
// 5. 재귀(Recursion): 리스트의 합을 구하는 함수
func sumOfList(_ list: [Int], accumulator: Int = 0) -> Int {
if list.isEmpty {
return accumulator
}
return sumOfList(Array(list.dropFirst()), accumulator: accumulator + list.first!)
}
// 결과 출력
print("원본 리스트: \(numbers)") // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print("짝수 리스트: \(evenNumbers)") // [2, 4, 6, 8, 10]
print("짝수의 제곱: \(squaredEvens)") // [4, 16, 36, 64, 100]
print("리스트 합: \(sumOfList(numbers))") // 55
print("순수 함수 예시: \(add(3, 5))") // 8
불변성(Immutability)
let numbers로 리스트를 상수로 정의해 한 번 생성된 후 변경되지 않도록 했습니다. 함수형 언어에서는 변수를 var로 바꾸는 대신 새로운 값을 생성하는 방식을 선호합니다.일급 함수(First-Class Functions)
isEven은 짝수를 판별하는 함수를 변수처럼 정의한 예입니다. Swift에서는 함수를 값처럼 다룰 수 있어 변수에 저장하거나 전달할 수 있습니다.고차 함수(Higher-Order Functions)
filter와 map은 Swift의 대표적인 고차 함수입니다. filter(isEven)은 isEven 함수를 받아 짝수만 걸러냅니다. map { $0 * $0 }은 각 요소를 제곱한 새로운 리스트를 반환합니다. 순수 함수(Pure Functions)
add 함수는 외부 상태에 의존하지 않고, 동일한 입력 (3, 5)에 대해 항상 8을 반환합니다. 부작용(side effect)이 없다는 점이 함수형 프로그래밍의 핵심입니다.재귀(Recursion)
sumOfList는 for 루프 대신 재귀를 사용해 리스트의 합을 계산합니다. 

https://kobis.or.kr/kobisopenapi/webservice/rest/boxoffice/searchDailyBoxOfficeList.json?key=<API_Key_Value>&targetDt=20250304
https://jsonviewer.stack.hu/
