Search
🚃

옵셔널 이해하기

 옵셔널 이해하기

과제 소개

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에서 정상적으로 실행되고 결과가 출력되어야 합니다.