0Pricing
Swift Academy · 강의

옵셔널

옵셔널

옵셔널은(는) CoddyKit의 무료 Swift Academy 강의입니다. 이것은 1개 중 1번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Swift Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Swift Academy 강의에는 총 1개의 강의가 포함되어 있습니다.

소개

안녕하세요.

옵셔널 변수에 값이 없을 수도 있음을 나타내는 데 사용합니다.

옵셔널 유형의 변수에 값이 있으면 해당 변수를 언래핑하여 사용합니다. 값이 없을 수도 있습니다.

Swift에서 다양한 유형에 사용하는 옵셔널

Obj-C의 nil 포인터와 비교할 수 있습니다. 하지만 nil 포인터는 객체 유형에만 유효합니다.

Swift의 옵셔널은 객체 유형뿐만 아니라 구조체, 열거형 및 단순 유형에도 사용됩니다.

var optionalVar: String?
// optionalVar is automatically set to nil]
/*
Since we define it as optional without
assigning a value, the variable 
automatically takes the value of nil.
*/

Swift의 nil과 Obj-C의 nil은 동일하지 않습니다

Swift의 nil과 Obj-C의 nil은 동일하지 않습니다.

Obj-C의 nil 포인터는 객체가 없음을 나타냅니다. Swift의 nil은 nil 포인터가 아닙니다. Swift의 nil은 데이터가 없음을 나타내며 객체 유형뿐만 아니라 다른 유형도 지원합니다.

강제 언래핑

옵셔널로 정의한 변수에는 강제 언래핑 방법을 사용하여 접근할 수 있습니다.

느낌표 연산자를 사용하면 코드를 강제로 언래핑할 수 있지만 일반적으로 권장되지 않습니다.

강제 언래핑할 때 참조할 데이터를 사용할 수 없으면 런타임 오류가 발생합니다.

let convertedNumber : Int? = 123
if convertedNumber != nil {
    print("convertedNumber has an integer value of \(convertedNumber!).")
}
// Prints "convertedNumber has an integer value of 123."

옵셔널 바인딩으로 옵셔널에 접근하기

옵셔널 바인딩으로 옵셔널에 접근하기

if let 블록을 사용하면 옵셔널 변수의 값을 상수나 변수에 할당하여 접근할 수 있습니다.

강제 언래핑 대신 이 방법을 사용하는 것이 더 우아합니다.

var possibleNumber : String? = "10"

if let actualNumber = possibleNumber {
    print(actualNumber)
}

예시

if let firstNumber = Int("4"), let secondNumber = Int("42"), 
  firstNumber < secondNumber && secondNumber < 100 {
    print("\(firstNumber) < \(secondNumber) < 100")
}
// Prints "4 < 42 < 100"
/*
 If at least one of them is false,
 it will not be entered in the if blog.
*/

암시적으로 언래핑되는 옵셔널

암시적으로 언래핑되는 옵셔널

일부 경우에는 첫 단계에서 옵셔널 값이 할당되고, 이후에는 절대로 nil이 되지 않는 경우가 있습니다.

이러한 경우에는 옵셔널(?) 대신 (!) 연산자로 표현하여 해당 옵셔널이 반드시 nil이 아님을 나타냅니다. 

이러한 정의 형식을 ‘암시적으로 언래핑되는 옵셔널’이라고 합니다.

암시적 언래핑

암시적 언래핑

가장 많이 사용되는 영역은 클래스 초기화 단계입니다.

기존 옵셔널과 달리 암시적으로 언래핑되도록 표현된 변수는 직접 언래핑할 필요가 없습니다.

let possibleString: String? = "An optional string."
 // requires an exclamation mark
let forcedString: String = possibleString!

let assumedString: String! = "An implicitly unwrapped optional string."
// no need for an exclamation mark
let implicitString: String = assumedString 

예시

이 유형의 변수에 nil을 할당하면 런타임 오류가 발생합니다.

예시를 살펴보겠습니다.

/*
We can use it during optional binding or we can check for nil.
So we use implicitly unwrapped optional 
in the same way we use classic optional.
*/

var assumedString: String! = nil

if let definiteString = assumedString {
    print(definiteString)
}
// Prints "An implicitly unwrapped optional string."

경고

변수가 nil이 될 가능성이 있다면 암시적 언래핑 옵셔널을 사용하지 않습니다.

nil 병합 연산자

nil 병합 연산자

옵셔널 형식의 래핑을 해제하는 편리한 방법을 제공합니다.

예제를 통해 살펴보겠습니다.

let defaultColorName = "red"
 // defaults to nil
var userDefinedColorName: String?  

var colorNameToUse = userDefinedColorName ?? defaultColorName
/*
userDefinedColorName is nil, 
so colorNameToUse is set to the default of "red"
*/


// a != nil ? a! : b 
/*
We can think of it as a shortcut to the above expression.
A checks if a is nil, if a is not nil, it unwrap and eturn, 
otherwise it returns the default value, ie b.
*/

축하합니다

축하합니다 🎉

옵셔널 개념은 스위프트의 가장 중요한 기능 중 하나입니다. 옵셔널을 사용하면 nil 검사를 줄이고 코드를 더 우아하게 작성할 수 있으며 애플리케이션을 더 안전하게 만들 수 있습니다.

다음 레슨에서 뵙겠습니다 🥳

옵셔널 — 일러스트레이션 12

자주 묻는 질문

“옵셔널” 강의는 무료인가요?

네 — “옵셔널” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Swift Academy 강의 전체를 잠금 해제할 수 있습니다. Swift Academy 강의에는 총 1개의 강의가 포함되어 있습니다.

“옵셔널”에서 뭘 배우나요?

옵셔널 브라우저에서 직접 실행하는 실습 코드로 Swift Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Swift Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Swift Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 1개 중 1번째 강의입니다.

“옵셔널” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Swift Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Swift Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

← Swift Academy(으)로 돌아가기