본문 바로가기
Swift/기초

Swift 기초 다지기 - 옵셔널 (Optional)

by 박신혁 2024. 10. 8.

옵셔널 (Optional)

값이 존재할 수도 있고, 존재하지 않을 수도 있음을 나타내는 타입

 

var optionalNumber: Int? = 1

// 옵셔널은 nil을 가질 수 있음
optionalNumber = nil

 

옵셔널은 ? 를 사용해 선언

optionalNumber 변수는 Int 타입의 값이 있을 수도 있고 값이 없을 수도 있다, 없음은 nil로 표현한다.


옵셔널 바인딩

옵셔널은 값이 없을 수 있기 때문에 항상 안전하게 확인해야한다.

 

if - let 바인딩

var name: String? = "철수"

if let unwrappedName = name {
    print("이름은 \(unwrappedName)입니다.") // 이름은 철수입니다.
}else{
    print("이름이 없습니다.")
}

 

옵셔널의 값이 있으면 그 값을 변수나 상수에 대입하고 if 구문 실행 , 옵셔널에 값이 없을땐 else 구문 실행

 

 

 

guard - let 바인딩

func printName(_ name: String?) {
    guard let unwrappedName = name else {
        print("이름이 없습니다.")
        return
    }
    print("이름은 \(unwrappedName)입니다.")
}

printName("철수") // 이름은 철수입니다.
printName(nil) // 이름이 없습니다.

 

보통 함수 내에서 값이 있으면 코드가 계속 실행하고 없으면 빠져나오기 위해 사용한다.

반드시 else 구문을 빠져나올 수 있게 return, break, continue 등을 사용해야한다.

 


옵셔널 체이닝

접근 도중 중간에 값이 nil 일 경우 중단하고 nil 을 반환한다.

 

class Person{
    var name: String?
    var job: Job?
}

class Job{
    var jobName: String?
}

let person = Person()
person.job = Job()
person.job?.jobName = "제빵사"

if let job = person.job?.jobName {
    print("직업은 \(job)입니다.") // 직업은 제빵사입니다.
}else{
    print("직업이 없습니다")
}

 

 

person.job?.jobName 이 부분이 옵셔널 체이닝

person.job이 존재하면 jobName에 접근

person.job이 존재하지 않으면 jobName에 접근을 중단하고 nil 반환

 


nil 병합 연산자

?? 연산자를 사용해서 nil일 경우 기본 값을 제공해서 처리 할 수 있다.

 

let optionalNumber: Int? = nil
let defaultNumber = optionalNumber ?? 100 // 기본값 100

print(defaultNumber) // 100

 


강제 언래핑

옵셔널의 값이 있을 경우, ! 연산자를 사용해서 강제로 추출 할 수 있다.

 

var optionalNumber: Int? = 1
print(optionalNumber!) // 1

 

값이 없는 nil 일 경우에는 오류가 발생하니 주의해야한다, 확실한 상황이 아니라면 사용하지 않는게 좋다.

728x90

댓글