멀리 보는 연습

iOS 개발 강의 정리_Swift 옵셔널(Optional) 본문

iOS 앱 개발/Swift

iOS 개발 강의 정리_Swift 옵셔널(Optional)

푸실리 2022. 3. 6. 16:55

옵셔널(Optional)

옵셔널은 Swift가 가진 가장 큰 특징 중 하나로, 값이 있을 수도 있고 없을 수도 있다. 값이 없다는 것을 나타낼 때, 자바에서는 null 이라고 표현한다고 배웠는데 swift에서는 nil이라고 표현한다. 

 

var number : Int? = nil

값이 있을 수도 있고 없을 수도 있다는 뜻으로 데이터 타입 뒤에 물음표를 붙여준다. 

//옵셔널 타입으로 변수를 설정하면 기본으로 nil이 들어간다.
var email: String?
print(email) // nil

email = "song@gmail.com"
print(email) // Optional("song@gmail.com")

옵셔널로 정의한 변수는 일반 변수와 다르다. 일반 변수는 항상 값을 가지고 있어야 하는 반면, 옵셔널 변수는 코드가 실행되기 전까지 값의 유무를 알 수 없다. 그리고 일반 변수와 다르게 Optional( ) 이라는 옷을 입고 있다. 

 

let optionalEmail: String? = "song@gmail.com" // Optional("song@gmail.com")
let requiredEmail: String = optionalEmail  // 컴파일 에러

Optional( ) 이라는 옷을 입고 있기 때문에 일반 변수에 대입도 불가하다.

 

 

옵셔널 바인딩

 

1. 명시적 해제 : 강제 해제, 비강제 해제(옵셔널 바인딩)

2. 묵시적 해제 : 컴파일러에 의한 자동 해제, 옵셔널의 묵시적 해제

 

var number : Int? = 3

print(number)
// 강제 해제(위험!)
print(number!)

// 옵셔널 바인딩
if let result = number{
	print(result)
}else{
	// 옵셔널 값이 없는 경우
}

옵셔널을 강제 해제하려면 변수 뒤에 느낌표를 붙여주면 된다. 그러나 nil인 값을 강제 해제하면 에러가 발생하여, 프로그램이 강제로 종료되어버리는 불상사가 발생한다. 따라서 안전하게 비강제 해제 방법인 옵셔널 바인딩을 사용하는 편이 바람직하다.

 

옵셔널 바인딩은 옵셔널의 값이 존재하는지를 검사한 뒤, 존재하면 그 값을 다른 변수에 대입시키는 방법이다. 옵셔널의 값이 있다면 if 문 안으로 값이 없다면 그대로 패쓰~!

 

 

func test(){
	let number : Int? = 5
    guard let result = number else {return}
    print(result)
}

test()

if문 외에도 guard문을 사용할 수 있다. 둘의 차이점은 if문을 통해 추출한 옵셔널 변수 값을 if문 안에서만 사용할 수 있지만, guard문으로 옵셔널을 추출하면 guard문 다음 함수 전체 구문에서 추출된 변수를 사용할 수 있다.

 

 

묵시적 해제_컴파일러에 의한 자동 해제

let value : Int? = 6
if value == 6 {
	print("value가 6입니다.")
}else{
	print("value가 6이 아닙니다.")
}

// "value가 6입니다."

옵셔널 값은 비교 연산자를 통해 다른 값과 비교하면 컴파일러가 자동으로 옵셔널을 해제해준다.

 

옵셔널의 묵시적 해제

let string = "12"
var stringToInt : Int! = Int(string)
print(stringToInt + 1) // 13

옵셔널 변수의 타입을 선언할  때 ? 연산자 대신 ! 연산자를 통해 묵시적 해제를 선언하면, 컴파일러가 자동으로 옵셔널을 해제해준다. 주의해야 할 점은 nil이 대입될 가능성이 없는 변수일 때만 선언해야 한다는 것이다.

 

 

swift의 핵심이라고도 할 수 있는 Optional에 대해서 별도로 정리해보고 싶어서 적어봤다. 배우면서 추가할 내용이 있으면 추후 추가해야겠다. 

 

 

 

 

 

Comments