javascipt와 python을 공부해 본 경험이 있어서 역시나 문법은 좀 익숙한 듯 싶었다. 개념은 거의 유사하고, 가끔 js/python과 다른 특이한 규칙이 있다고 생각했다. 분명한건 Swift가 안전한 코드를 지향하고 있다고 느꼈다.
JavaScript - 함수 표현식과 화살표 함수 사용
function greet() {
return "Hello, World!";
}
const greetArrow = () => "Hello, World!";
console.log(greet()); // Hello, World!
console.log(greetArrow()); // Hello, World!
Python - 간결한 함수 정의
def greet():
return "Hello, World!"
print(greet()) # Hello, World!
Swift - 명확한 파라미터 타입과 반환 타입 지정
func greet() -> String {
return "Hello, World!"
}
print(greet()) // Hello, World!
왜 내가 파이썬 좋아했는지 알 것 같다...🤭
아래는 오늘 배운 것을 대략 정리해보았다.
변하는 값(데이터)을 저장합니다.
var로 선언합니다.
var welcome = "Hello, Swift!"
welcome = "Hi, Swift!" // 변수라서 값 변경 가능
let으로 선언된 값은 변경이 불가능합니다.
앱에서 변하지 않는 값(예: 설정값, 단위 등)을 저장할 때 사용합니다.
예시:
let name = "Leeo"
// name = "John" // 오류! let으로 선언된 상수는 수정할 수 없습니다.
✅ 언제 var와 let을 사용할까?
값이 변하지 않는다면 let을 사용하세요.
상수를 사용하는 것이 코드의 안정성과 가독성을 높입니다.
Swift는 엄격한 타입 언어입니다. 변수나 상수를 선언할 때 타입을 명시하거나 추론을 통해 타입이 자동으로 정해집니다.
let city: String = "Seoul" // 명시적 타입 선언
var age = 25 // 타입 추론(Int로 자동 설정)
String: 문자열을 저장합니다.
let greeting: String = "안녕하세요"
Int: 정수형 숫자입니다.
var year: Int = 2024
Float / Double: 소수점을 포함한 숫자입니다.
Float은 32비트, Double은 64비트로 더 정밀합니다.
var pi: Float = 3.14
var largePi: Double = 3.1415926535
Bool: 논리형 데이터로, true 또는 false를 가집니다.
var isRegistered: Bool = true
순서가 있는 데이터의 집합입니다.
같은 타입의 값들만 저장할 수 있습니다.
예시:
var fruits: [String] = ["Apple", "Banana"]
fruits.append("Cherry") // 배열에 데이터 추가
print(fruits[0]) // Apple
✅ 유용한 메서드
isEmpty: 배열이 비어 있는지 확인
count: 배열의 길이 확인
if !fruits.isEmpty {
print("We have \(fruits.count) fruits.") // We have 3 fruits.
}
키-값 쌍으로 데이터를 저장합니다.
예시:
var capitals: [String: String] = ["Korea": "Seoul"]
capitals["Japan"] = "Tokyo" // 데이터 추가
print(capitals["Korea"] ?? "Unknown") // Seoul
✅ ?? 연산자
값이 없을 때 기본값을 제공합니다.
let capital = capitals["China"] ?? "Not Found" // 기본값 Not Found
중복되지 않는 값의 집합입니다.
예시:
var colors: Set<String> = ["Red", "Green", "Blue"]
colors.insert("Yellow") // 데이터 추가
print(colors.contains("Red")) // true
조건에 따라 코드의 흐름을 제어합니다.
예시:
let score = 85
if score >= 90 {
print("Excellent")
} else if score >= 75 {
print("Good")
} else {
print("Try harder")
}
✅ 다중 조건 처리
여러 조건을 논리 연산자(&&, ||)로 결합할 수 있습니다.
let age = 20
let isStudent = true
if age > 18 && isStudent {
print("You're a university student.")
}
여러 경우의 수를 한 번에 처리할 수 있습니다.
예시:
let grade = "A"
switch grade {
case "A":
print("Excellent")
case "B":
print("Good")
default:
print("Needs Improvement")
}
✅ 범위와 함께 사용
범위 연산자(..., ..<)로 특정 범위를 매칭할 수 있습니다.
let score = 88
switch score {
case 90...100:
print("A+")
case 80..<90:
print("B+")
default:
print("C or below")
}
컬렉션의 각 항목을 순회하거나 범위를 반복합니다.
예시:
let items = ["Apple", "Banana", "Cherry"]
for item in items {
print(item)
}
for index in 1...5 {
print("\(index) times")
}
조건이 참인 동안 코드를 반복합니다.
예시:
var countdown = 5
while countdown > 0 {
print("Countdown: \(countdown)")
countdown -= 1
}
최소 한 번은 실행한 후 조건을 검사합니다.
예시:
var number = 1
repeat {
print(number)
number += 1
} while number <= 5
Swift에서는 nil(값이 없음)을 명시적으로 처리해야 합니다. 옵셔널은 값이 있을 수도, 없을 수도 있는 변수를 의미합니다.
예시:
var nickname: String? = nil // 닉네임이 없을 수도 있음
nickname = "Leeo"
✅ 옵셔널 바인딩
옵셔널 값을 안전하게 추출합니다.
if let unwrappedName = nickname {
print("Nickname is \(unwrappedName)")
} else {
print("No nickname")
}
✅ 강제 언래핑
값이 반드시 존재한다고 확신할 때 !를 사용합니다.
하지만 비추천되며, 안전한 코드 작성을 위해 바인딩을 권장합니다.
print(nickname!) // 닉네임이 없으면 런타임 오류 발생
재사용 가능한 코드 블록입니다.
예시:
func greet(name: String) -> String {
return "Hello, \(name)!"
}
let greeting = greet(name: "Leeo")
print(greeting) // Hello, Leeo!
func sayHello() {
print("Hello!")
}