[Swift 기초] - 옵셔널(Optional)을 파헤쳐보자 1편

justdotheg·2023년 12월 29일
1
post-thumbnail

1. '옵셔널'이란

  • 옵셔널(Optionl)이란 물음표(?)가 붙은 변수이다. '옵셔널' 또는 '옵셔널 변수'라고도 부른다.
  • Optional을 직역하면 선택적이라는 뜻이다.
  • Optional 변수는 어떤걸까? nill 값을 허용하는 변수이다. 즉, 값이 있을 수도 있고, 없을 수도 있는 변수를 말한다. 값을 넣을지 말지가 선택적이라는 뜻이다.

💁🏻‍♂️ nill은 타프로그래밍 언어의 null과 비슷하다고 보면 된다. (엄밀히 밀하면 null과 nill은 다르긴 하지만, 이에 대한 내용은 추후 포스팅에서 자세하게 다루겠다.)

1.1. 예시를 살펴보자

옵셔널 변수에서 이 2가지를 기억하고 가자.

  1. 옵셔널 변수에 값 할당시 ➡️ “optional(값)” 형태의 데이터가 된다.
  2. 옵셔널 변수에 값을 할당하지 않을 경우 ➡️ nil 값을 가짐

이와 관련해 예를 들어 설명해보겠다.

  • String type의 test 변수를 선언하고 이 변수를 출력해보겠다.

    이 코드를 실행시키면 'just do the g’ 라는 문자열이 출력된다.
  • 그런데 만약 변수 test에 할당된 문자열이 없다면, 초기화를 안 하면 어떻게 될까?

    이 경우 "Variable 'test' used before being initialized"라는초기화한 후 출력하라는 에러 메시지가 발생한다.
  • 그렇다면 test를 옵셔널 변수로 만들고 초기화를 하지 않으면 어떻게 될까?
    test의 자료형을 옵셔널 타입 (String?)으로 세팅해보겠다.

    옵셔널 타입으로 String 뒤에 (?)를 붙여주니 문자열 초기화를 하지 않고 출력하였음에도 불구하고 에러가 발생하지 않는다. 또한, print 출력 결가 nill값(아무것도 없음)이 출력된다.

  • 옵셔널 변수(String?)에 값을 할당하고 출력해보면 어떻게 될까?

    String type 일 때와 비슷하게 ‘just do the g’가 출력이 될 것 같지만, ‘just do the g’ 문자열만 출력되는 것은 아니고, Optional(“just do th g”) 가 출력된다. 즉, Optional 변수에 값을 대입하고 출력하면 옵셔널이 감싸져 있는 상태로 출력이 되는 것이다.

  • 🤷🏻 그렇다면 데이터를 감싸고 있는 Optional()은 없앨 수 없을까? 이 부분은 목차 "2. 옵셔널 바인딩"에서 다뤄 보도록 하겠다.

1.2. 🚨 옵셔널 사용시 주의 사항

1.2.1. Optional이 아닌 일반 변수에 nill 값으로 초기하하면 에러가 발생한다.

  • nill값을 허용하거나, 초기화하고 싶거나, 의도치 않게 nill값이 들어가는 경우를 대비하려면 optional 변수로 선언해야 한다. 즉, 변수 앞에 (?)를 붙여야 한다.
var name: String = "just do th g"
name = nill 

다음과 같이 코드를 작성시 "Nill cannot be assigned to type 'Stirng'"의 에러 메시시가 발생할 것이다.

그 이유는 nill을 허용하는 변수인 optional 변수가 아닌데 nill 값으로 초기화 했기 때문이다.

따라서 nill값을 허용하거나, nill 값으로 초기화하고 싶거나, 의도치 않게 nill값이 들어가게 되는 경우를 다루려면 optional 변수로 선언해야 한다. 즉, 변수 앞에 (?)를 붙여야 에러가 안 난다.

1.2.2. 옵셔널 값은 일반 타입과 결합하거나 연산할 수 없기 때문에 옵셔널 값을 사용하려면 '옵셔널 바인딩'을 해야 한다.

let employee: String? = "just do the g" //employee는 Optional("just do the g") 
let boss: String = emmployee //컴파일 에러  

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

따라서 옵셔널 값은 일반 타입과 결합하거나 연산할 수 없기 때문에 옵셔널 값을 사용하려면 '옵셔널 바인딩'을 해야 한다.

옵셔널 바인딩에 대한 자세한 내용은 목차2에서 다루도록 하겠다.

1.3. (응용) '형 변환(Type Casting)'의 자료형(type)은 뭘까?

'형 변환(Type Casting)'의 자료형(type)은 옵셔널(optional)이다.

형 변환(type casting)은 자료형을 바꾸는 것 즉 타입 변환을 말한다.

형 변환의 경우 default로 옵셔널인 자료형으로 선언됨을 아래 예시를 통해 알아보자.
String type 을 Int type으로 형변환 해보겠다.
test2라는 변수는 Int("2")라는 문법을 통해 문자열 "2"에서 정수 2로 자료형이 변환되었다.

그리고 변수 test3은 "3이다."라는 문자열이 형변환 대상자로 들어가면서 Int()를 통해 정수형으로 형변환이 불가능하다.

이 때 test2와 test3의 상태를 순서대로 출력해보면 어떻게 될까?
그렇다. test2는 Optional(2)로 옵셔널이 래핑된 상태이고, test3은 nill 상태이다.

test2와 같이 형변환 가능한 값이 있을 경우에는 Optional로 출력해주었고, test3과 같이 형변환이 불가해 변수에 저장할 값이 없을 경우에는 nill을 저장한 것으로 보인다. 이로 보았을 때 test2와 test3는 평범한 Int 타입이 아닌 Int?(Int Optional)임을 알 수 있다.

형변환의 타입은 default 옵셔널이다!


이어서 옵셔널의 값에 접근하는 방법은 옵셔널(Optional)을 파헤쳐보자 2편에서 자세히 다루도록 하겠다!!

⬇️2편 click⬇️
https://velog.io/@justdotheg/Swift-%EA%B8%B0%EC%B4%88-%EC%98%B5%EC%85%94%EB%84%90Optional

0개의 댓글