본문 바로가기

IT/Swift

Day.1 Optional? 뭐가 옵션인디?

Swift는 Apple이 2010년부터 개발을 시작해서 2014년도에 배포한 새로운 iOS의 언어다.

이전까지는 Objective-C라는 언어가 있었는데, 여러 이유로 노선은 Swift로 전환한것같다.


나 같은 경우는 한창 아이폰 어플 개발 열풍이 불었을때 한 30개정도의 어플을 오브젝티브 씨로 개발했는데,

먹고 살라고 어플 개발자는 그만두고 여기저기 프리랜서로 하루하루 먹고 살다보니 뜬끔없이 

애플에서 스위프트라는 언어를! 똭!


기존 오브젝티브씨를 업데이트한게 아니라 아예 새로운 언어를 똭!


나온지도 꽤됐지만, 하루 하루 입에 풀칠하며 사는 나에게 새로 공부를 한다는건 사정상 어려워서 미뤄두었는데

요즘 시간이 생겨서 대충 훌터보고 있는 중에! 발견한거슨!!!!


옵션어ㅓㅓㅓ언?

optional?!?!?!?!?!?!

!

?

!

?

느낌표와 물음표가 아주 중요하다!


유튜브의 강의에서도 엄청 중요하다는 듯이 언급하고, 애플의 도큐멘트에서도 비중있게 다루고 있는데

프로그래머로 이리저리 굴러 먹던 나에게 뭐가 중한디? 언어가 다 거기서 거기지...라고 생각했는데,

쬐금 이해하기 힘든면이 있었다.



왜냐하면 기존의 언어에는 특별히 언급되지 않는 특징이기 때문이다.

(뭐 다른 언어에 있을수도 있지만 제가 모를수도 있습니다.)


그럼 다음의 그림을 보시죵~



위에서 물음표와 느낌표가 중요하다고 했죠.

왜냐하면 이 옵션널을 선언하기 위한 기호 이기 때문이다.


우선 스위프트는 마치 스크립트 언어처럼 변수를 선언할때 특별히 자료형을 지시하지 않아도 된다.

하지만 변수를 만들고 그 변수를 초기화 하지 않을경우에는 어떠할까?


그럼 문제가 될것이다. 초기화 할때 대입값의 자료형을 변수의 자료형으로 결정하는데 

초기화 자체를 하지 않는다면 그 변수의 자료형을 결정할수 없기때문이다.


그렇다면, 변수의 자료형을 지시해서 선언한다면, 초기화 하지 않고도 쓸수 있지 않을까?

나도 그렇게 생각해서 아래와 같이 선언해 보았다.

var title:String

똭! 바로 에러다!


옵션널로 쓸라면 반드시 뒤에 ?를 붙여주어야 한다고 한다.

var title:String?

요렇게 그러면 초기화 하지 않아도 사용할수 있다.

(왜 구지 초기화 안할라고 하느냐 라고 하면, 나도 모르겠다.

워낙 옛날부터 코딩해서 그런지 초기화해서 값을 넣으면 왠지 쓸데없는 리소스를 사용한거 같은 찝찝한 기분때문에?)



뭐 문법이라는데 이해하고 말고가 있겠는가 그냥 외워서 쓸라고 했는데,

이것이 웃기는게....다음을 보자


var title:String?

va title:String!


위와 같이 2가지로 만들수 있다.

아마도 느낌표는 옵션널이 아닐것이지만, 어찌되었든간에

위의 2가지 방법 모두 초기화 하지 않고 변수를 선언할수 있다.


그럼 무슨 차이가 있을까 그거슨!!!!바로!!!

nill 또는 null 를 강제로 하느냐 안하느냐의 차이다.

물음표로 선언한 변수의 경우에는 optional binding이나 null체크를 하지 않으면 컴파일러가 경고나 에러를

발생시키지만 느낌표의 경우에는 그냥 막쓸수 있다.



그럼 왜 구지 이렇게 까지 해서 널체크를 하려고 한것일까?

뭐 내가 아직 잘몰라서 더 큰이유가 있을수도 있지만,

단순히 드는 생각은 버그줄일라고 그런거 아닐까 하는 생각이 든다.


실제 개발에서 발생하는 버그나 에러중 아마도 어마어마한 양이 누르뽀!!!

죄송! 일본에서 일하다 보니까 ㅋㅋㅋ

널 포이트 에러 라고 할수 있을것이다.


테스트하다보면 이건뭐 10중 8개정도는 나 누르뽀! 누르누르누르뽀!


뭐 다른 이유가 있을수 있으나 단순히 생각해보면 이렇게 옵션널로 누르뽀만 잡아도 

개발 진척에 도움이 될거 같다.