슬슬 기본 연산자 파트가 마무리 되어간다.

달에 한두개씩 올리던 기본서는 기본연산자 파트에서 그만두게 되고,

이후에는 기본 연산자가 아닌 다른 내용으로 짬짬히 올리게 될듯하다.

 

우선 닐 코레싱? 뭐라 읽어야할지도 난감한 파트가 왔다.

내 짐작컨데 옵셔널의 해제를 해보는 파트인듯해서 우선 옵셔널에대해 예시를 들것이다.

 

내가 학부때 공부할때만 해도 자바에 옵셔널에대해 들어본적이 없었는데 요즘 뭔가 생긴듯하여

스위프트만의 특징이다! 라고 말할 수 는 없게되어 아쉽다.

 

이 옵셔널은 값의 존재 유무를 모를때 사용 할 수 있는 하나의 안전장치이다.

일반적인 경우에서 어떠한 변수 a값을 사용하려고 할때 이 a값에 아무런 값이 설정되어 있지않다면 아마 nullpoter error가 뜨게 될것이다.

비어 있는 값을 참조했기에 진행할 수 없다고 말하는것인데

이러한 사태에 대해 안전장치로 사용할 수 있는것이 바로 옵셔널이다.

 

형식은 매우 단순하다

형식)

 

var 변수이름:변수타입? 

 

위와같이 타입에 물음표를 붙이면된다.

이 타입인건가 하며 묻는듣한 모습에 바로 이해가 갈 것이라 생각된다.

 

이 옵셔널에 예시를하나 들어보자면

var name : String? 이 있겠다

참고로 이렇게 바로 선언하면 name값에는 nil 값이 들어가게 된다.

여기서 nil은 아무런 값이 없다는 뜻이다.

 

이제 값을 넣고 출력해보면 아래와같이 나온다.

 

예시1)

    var name:String? = "wiwi"

    print(name)

결과:

Optional("wiwi")

 

값이 wiwi지만 겉에 Optional()이라고 붙어있는게 바로 물음표의 역할이다.

옵셔널로 나오기에 바로 이값을 사용할 수는 없다.

그래서 이 옵셔널에서 값을 추출해줘야한다.

 

이옵셔널에 대해 이야기한적이 있나 살펴보지 3편에서 다뤘었다.

3편의8항 옵셔널 편에서 

값을 추출하기위해 느낌표, !를 붙인다고 적었다.

실제로 위 예시1)을 느낌표를 붙이고 출력하면 아래와같이 무사히 값이 나온다.

 

예시2)

    var name:String? = "wiwi"

    print(name!)

결과:

wiwi

 

이러한 옵셔널을 다루기위해선 위의 ! 와 같이 값을 추출해야하는데

이럴때 값을 더 안전하게 추출하는 연산자가 이 nil-coalescing 연사자로 추측된다.

 

위의 name을 이전편 3항연산자를 이용해서 풀어보자면

 

(name != nil ? name! : "wiwi2")

로 표현할 수 있겠는데

이는 name의 값이 nil 이 아닐경우 name을 ! 를 사용해서 바로 값을 추출한다는것이고

만약 값이 없을경우 wiwi2를 반환한다는 간략한 식이다.

 

이를 더 간략히 이번 편의 주제인 nil-coalescing 연산자를 이용하자면 ( 형태: ?? )

 

name ?? "wiwi2" 가 되겠다

코드로 돌려보자면 아래와같다.

 

예시3)

    var name:String?

    print(name ?? "wiwi2")

    

    name = "wiwi"

    print(name ?? "wiwi2")

결과:

wiwi2

wiwi

 

라인 1의 name은 값을 할당하지 않았기에 print시에 ?? 를 통해 wiwi2값이 나오게되고

라인 4의 name은 wiwi값을 할당한 상태이기에

라인 5의 print에선 wiwi값이 나오게된다.

 

+ Recent posts