study 문법2주차) 옵셔널, 옵셔널 바인딩, 옵셔널 체이닝

잼킹·2020년 11월 29일
1

Swift

목록 보기
4/4
  1. 옵셔널 개념익히기.
  2. 옵셔널 바인딩 개념익히기.
  3. 옵셔널 체이닝 개념익히기.

옵셔널

Swift언어 특성에서 한가지인 안전성(Safe)의 기능중 하나인 옵셔널에 대해 알아봅시다.
-> 옵셔널은 값이 있을 수도 없을 수도 있다. 를 의미합니다.(값을 가지지 않아도 되는 형식)

값이라 하면 상수나 변수 선언할 때 = 뒤에오는 값을 문자나 숫자등 타입의 값을
할당하는걸 뜻하는데 여기서 정수형의 0 이나 문자 " "는 빈 값이 아니예요.
swift에서는 값이 비었다는 표현을 nil키워드로 표현합니다.
nil키워드를 사용시에는 추론할 형식이 없으므로 타입어노테이션이 필수!!

var str: String = "" // 빈 값이 아님.
var str1: String = nil // 값이 없을을 표현했지만 오류 발생!

두번 째 변수인 str1에다가 nil이라는 값이 없을을 표현했지만 오류가 나는 이유가 무엇일까요?
여기서 옵셔널을 사용하는 방법을 알아보아요. 옵셔널을 표현 할 때에는 타입어노테이션 옆에
?를 붙이거나 강제추출을 의미하는 !를 붙여서 사용합니다.

var str1: String? = nil // nil

이렇게 String?을 사용해서 nil값을 주었더니 더 이상 오류가 발생하지 않아요.

var name: string? = "jamking" // 옵셔널로 표현해도 값 할당가능.
print(name) // Optional("jamking")

옵셔널로 표현해서 "jamking"의 문자열 값을 넣어주고 print()를 통해서 값을 출력했더니
Optional("jamking") 라는 결과가 나왔어요!!
Optional이라는 걸 표현한건데 그럼 Optional를 없애고 "jamking"만 출력하고싶을때는
어떻게 해야할까요? 여기서 강제언래핑(Forced Unwrapping)을 배워볼게요.
강제언래핑은 !를 붙여서 사용하면 된답니다.

var name: string? = "jamking" // 옵셔널로 표현해도 값 할당가능.
print(name!) // "jamking"

이렇게 출력할 변수뒤에 !를 붙이게되면 Optional이 사라지고 언래핑되어서 "jamking"만
출력이 되는것을 볼수있어요 :)
단, 값이 없는 상태에서 강제추출을 하게되면 오류가 발생하므로 꼭 값이 있는지 없는지 확인을 해야해요!! 확인을 할때에는 if문을 활용하면돼요~

var num: Int? = nil

if num != nil {
    print(num!)
} else {
    print("empty")
}

//"empty"
  • 옵셔널에 있는 값을 사용하려면 언래핑 해야한다.
  • nil이 저장되어 있는 상태에서 강제추출하면 오류발생!
  • 옵셔널 표현식을 언래핑하면 논옵셔널타입으로 리턴.

옵셔널 바인딩

자, 위에서 옵셔널에 대해서 알아보았어요. 그렇다면 어떻게 옵셔널의 변수값을 가져올 수 있는지에 대해 알아볼게요!!
옵셔널 바인딩은 값을 안전하고 직관적으로 추출하기 위해서 사용하는데요.
if, while, guard문에서 모두 사용가능하답니다.

if문을 통한 바인딩 표현 방법입니다.
if let Name: Type = Optional Expression { statements }
-> let Name: Type = Optional Expression 이 부분이 바인딩입니다.

var num: Int? = nil

if let n = num {
    print(n)
} else {
    print("empty")
}

// empty

값이 리턴이 된다면 언래핑되어 상수에 저장되어요.
guard문은 else가 항상 붙기때문에 else블록 다음의 코드가 실행되겠죠?

var str: String? = "str"

guard let str = str else {
    fatalError()
}
print(str) // str

IUO (Implicitly Unwrapped Optionals)

IUO는 암시적(자동) 추출 옵셔널입니다.
사용방법은 Type! 인데 어디서 많이 봤죠??
아웃렛 변수를 연결할 때 많이 사용했는데요!!

@IBOulet var clickButton: UIButton!

이렇게 아웃렛 변수같은 경우는 값이 있다는 것을 확신할 수 있기에 !를 붙인답니다.
맞아요~ 강제언래핑은 값이 있다는 것을 확신할 수 있다라는 부분에서 사용하시면 됩니다.

  • 아웃렛 연결을 할때
  • API IUO를 리턴 할때
    하지만 강제추출보다는 옵셔널과 옵셔널 바이닝 사용이 크래시의 스트레스에 덜 부딪힌답니다 :)

profile
💻 IOS Dev

0개의 댓글