옵셔널 이해하기
과제 소개
Swift를 사용하여 iOS 개발을 시작하기 전에 옵셔널 개념을 이해하는 것은 매우 중요합니다.
이번 과제에서는 Swift Playgrounds를 활용하여 옵셔널 타입에 대해 이해하고 어떻게 다룰 수 있는지 직접 실습해봅니다.
학습 목표
1.
Swift에서 옵셔널 개념을 이해하고 사용할 수 있다.
2.
옵셔널인 값을 적절히 바인딩하여 사용할 수 있다.
3.
옵셔널 바인딩을 사용해 타입 캐스팅 방법을 익힌다.
4.
Swift Playgrounds에서 직접 코드를 실행하고 결과를 확인할 수 있다.
Swift Playgrounds에서 시작하기
1.
Swift Playgrounds 앱을 실행하세요.
2.
새로운 프로젝트를 만듭니다.
3.
왼쪽 패널에 코드를 입력하고, 오른쪽 패널에서 실행 결과를 확인할 수 있습니다.
4.
아래의 실습을 하나씩 따라하며 Swift의 옵셔널 타입을 익혀보세요!
과제 1: 옵셔널 개념 이해하기
Swift에서는 데이터를 저장하기 위해 변수(var)와 상수(let)을 사용합니다.
개념 정리
•
옵셔널(Optional)이란 값이 있을 수도 있고 없을 수도 있는 타입을 의미합니다.
•
값이 있는 경우 값이 저장되고, 값이 없을 경우 nil이 저장됩니다.
실습
1.
Playgrounds에서 아래 코드를 입력하고 실행해보세요:
var name = "Alice"
var age = 20
let birthYear = 2003
var car: String? = "BMW"
print("이름: \(name), 나이: \(age), 출생 연도: \(birthYear), 보유 차종: \(car)")
car = nil
print("이름: \(name), 나이: \(age), 출생 연도: \(birthYear), 보유 차종: \(car)")
Swift
복사
2.
변수 car의 타입을 확인해보세요
•
type(of:) 메서드를 이용해car 의 타입을 확인해보세요.
•
옵셔널 타입으로 선언한 변수가 어떤 타입인지 확인해보세요.
print(type(of: car))
Swift
복사
과제 2: 옵셔널 바인딩 하기
옵셔널 변수의 값을 안전하게 사용하려면 옵셔널 바인딩을 통해서 nil 값일 경우를 어떻게 처리할 것인지 명시해주어야 합니다.
개념 정리
•
옵셔널 바인딩은 대표적으로 아래 두 가지 방법으로 바인딩할 수 있습니다.
◦
if let
◦
guard let
•
변수 뒤에 !를 붙여 옵셔널을 언래핑 시킬 수 있습니다. 다만, 이 경우 실행 중 nil이 발생했을 때 프로그램이 강제 종료될 수 있으니 조심하여 사용해야합니다.
•
변수 뒤에 ?? 기본값 코드를 작성하면 변수의 값이 nil 일 경우 미리 지정한 기본값으로 설정되도록 할 수 있습니다.
실습
1.
Playgrounds에서 아래 코드를 입력하고 실행해보세요:
func checkScore() { // 함수 정의 및 사용은 뒤에서 배웁니다.
// 딕셔너리
let studentScores = [
"Tom": 85,
"Jason": 92,
"David": 78,
"Lisa": 88
]
var name = "Jane"
let score: Int? = studentScores[name]
print("\(name)의 점수 조회:")
print("점수: \(score)점")
// 방법 1: if let 사용
if let score = studentScores[name] {
print("\(name): \(score)점")
} else {
print("\(name): 점수 없음. else 문 실행")
return
}
// 방법 2: guard let 사용
guard let score = studentScores[name] else {
print("\(name): 점수 없음. early return")
return
}
print("\(name): \(score)점")
// 방법 3: 강제 언래핑
let studentScore = studentScores[name]!
print("\(name): \(studentScore)점")
// 방법 4: 기본값 지정
let unknownStudentScore = studentScores["Jane"] ?? 0
print("미등록 점수 (기본값 사용): \(unknownStudentScore)점")
}
checkScore() // 함수 실행
Swift
복사
2.
변환 결과 확인:
•
딕셔너리에서 키로 접근하여 얻은 값을 담는 변수 score가 옵셔널 타입(Int?)인 이유를 생각해보세요.
•
studentScores에 없는 이름으로 name 변수의 값을 바꿔보고 실행해보세요.(ex: “Jane”)
•
방법 1(if let)과 방법 2(gaurd let)의 순서를 변경해보고 출력 메시지를 비교해보세요. return이 어느 타이밍에 되는지, return 되었을 때 코드 실행 흐름은 어떻게 되는지 확인해보세요.
◦
코드 순서: 방법 2 > 방법 1 > 방법 3 > 방법 4
•
방법 3(강제 언래핑)을 가장 먼저 실행했을 때 어떻게 되는지 확인해보세요.
◦
코드 순서: 방법 3 > 방법 1 > 방법 2 > 방법 4
과제 3: 간단한 대화형 프로그램 만들기
이제 옵셔널 바인딩을 활용하여 사용자와 상호작용하는 간단한 프로그램을 만들어봅시다!
실습
1.
Playgrounds에서 아래 코드를 실행해보세요:
let userInput: String? = readLine()
if let input = userInput {
print("입력받은 값: '\(input)'")
let age: Int? = Int(input)
if let validAge = age {
print("입력한 나이: \(validAge)살")
} else {
print("올바른 나이를 입력해주세요!")
}
} else {
print("입력이 없습니다!")
}
Swift
복사
완성 조건
1.
readLine()으로 받은 숫자 값을 Int 타입으로 변환할 수 있어야 합니다.
2.
사용자에게 입력받은 숫자 값을 옵셔널 바인딩을 통해 안전하게 출력할 수 있어야 합니다.
3.
사용자가 입력한 값이 숫자가 아닌 경우에 대해서도 예외 처리를 해야합니다.
4.
Playgrounds에서 정상적으로 실행되고 결과가 출력되어야 합니다.