이론편에 이어서
옵셔널을 옵셔널을 실습해봤다.
파일을 먼저 셋팅해주었다.
이론편에서 했던 것 처럼 옵셔널이 있는것과 없는 것을 만들어봤다.
여기서 집중 해야할 부분은
" var poodName: String? = "" "
위 부분이겠다.
이름이 있을 수도 있고,
없을 수도 있는 것이기 때문에
옵셔널을 넣어준 케이스다.
그런데,
좋아하는 이름이 있을 수도 있고,
없을 수도 있기 때문에 위에 처럼 그냥
데이터 처리를 안해줘도 무관하지 않나?
왜냐면 없을 수도 있는것이니까..
위 처럼 만들고 데이터를
아무것도 넣지 않는다면,
이렇게 에러가 뜬다.
왜냐하면,
poodName은 옵셔널인데,
"Text("나는 \(Aname) 나의 좋아하는 음식은 \(poodName) 입니다.")"
이 텍스트 안에는 옵셔널을 사용할 수가 없다.
그러면 값을 넣어주면 되는거 아닌가?
표시가 되는 것은 나중에 설명하고,
정확하게는 안되는 것이다.
이유는 애초에 타입이 다르기 때문이다.
즉, poodName은 String이 필요하지만,
poodName 얘는 String이 옵셔널이기 때문에
타입이 다르다고 말하고 있는 것이다.
한번 콘솔에 찍어보기로 했다.
위위 이미지에서의 오른쪽 화면에 표시된 내용이
콘솔에 찍힌것을 볼 수 있다.
원래 부터 이랬는지 아니면,
Xcode가 업데이트 하면서
굳이 프린트를 찍어보지 않더라도
화면에 노출 시켜줄 수 있도록 해준 모양이다.
뭐 이런 사소한 부분은 일일이 신경쓰지 않겠다.
결록적으론 개발자들의
작업환경이 클린해진건 확실하다.

위 이미지에서도 그렇고
그위에 이미지에서도 그렇고
"나는 StayJun 나의 좋아하는
음식은 Optional("감자") 입니다."
이러한 문구자체가 나온다는 것은
간단하게 말해서
String?은 "여기 값이 있을 수도 있고
없을 수도 있어"라는 옵셔널 타입이니까
Swift는 “이거 그냥 출력하면 문제 생길 수도 있는데?” 라고
경고를 하고 있는 것이다.
그러면 데이터를 지워보겠다.
그랬더니, nil 이 출력 되는것을 알수있다.
그렇다면 다르게 해보자
옵셔널이 아닌 부분에 있는
데이터를 지워보겠다.
확연히 다르다는 것을 알수가 있다.
이제 옵셔널이 무엇을 의미하는지
이해가 조금 되었다.
" var poodName2: String = "" "
이 부분에 경우 반드시 있어야 하는 부분인데,
빈칸이면 없는것 아닌가?
그렇다.
없는거다.
"없을 수도 있는거고 있을수도 있는거라면
그냥 옵셔널 처리 해주면 되는거 아닌가?"
라는 형식으로 코딩의 흐름은 흘러간다.
ios에서 swift로 코딩을 하다 보면,
대부분의 것들이 옵셔널이라고 한다.
왜냐면, 데이터들이 전부가
모든 데이터를 갖고 있지 않기 때문이다.
쉬운 예로
회원가입을 예시로 들어볼 수 있다.
요즘은 많은 정보를 넣지 않지만,
이름, 이메일, 핸드폰, 주소,
이벤트를 위한 생일 정보나 직장여부
학생여부, 자차희망여부 등등 들이 들어가는데,
자차희망여부의 경우는 옵셔널이 아니다.
희망한다, 안한다 이렇게 있을 수 있기 때문이다.
즉, 값이 반드시 있어야 하니까 옵셔널이 아닌거다.
그런데,
핸드폰번호를 처음부터
입력해서 들어올 수도 있는 것이고,
나중에 할래요~ 라고 한다면 걔는 옵셔널일 것이다.
물론, 모든 옵셔널 처리는 그냥 입력하지 않음 또는 빈칸 또는 0
이런식으로 넣어서 해도 되지만 코딩을 할때
만들어질 때 반드시 필요한 얘인지 아닌지 이런게 가장 중요하다.
왜 이런게 중요하냐면,
이렇게 되어 있다면,
이런식으로 안할 이유가 없는 것이다.
왜냐?
반드시 있는 녀석이기 때문이다.
"Aname은 있으니 그러면 보여줘야지"
"poodName도 반드시 필요하네? 그러면 보여줘야지"
그런데,
이렇게 되어있다면...
버그같지 않나?
poodName은 반드시 있는 데이터라고 기획에 넣어두고,
빈칸이 와버리면.. 버그로 보일 수 밖에는 없는것이다.
그러면 이러한 부분은 확인을 해야하니
옵셔널이면,
아래와 같이 처리하게 해주는 것이다.
하다 못해서
그냥 "없음" 이라고 표기 해도 되지 않나?

그렇지만,
없음이라는 이름일 수도 있기 때문에
확실하게 없다 라는 표현도 만들었고,
그게 nil이고 nil인지 아니면
진짜 들어 있는것인지
구별하여 보여주어야 하는 것이다.
옵셔널 구분없이 다 있다 치고
코딩을 하게될 경우
실명이 옵셔널인데 "빈칸"님 이렇게 들어갈 수도 있고,
핸드폰 번호가 옵셔널인데 옵셔널 처리를 하지 않아서
빈칸이고 문자 메세지 요청 요청 요청 이라고 갈것이다.
그 이유는 데이터가 없지는 않아서이다.
마구잡이로 요청을 하는데 이사람의 핸드폰 번호가 없네?
이런 상황이 되는 것이다.
이렇게 어떠한 값을 다룰 때
있을수도 있고 없을 수도 있는 것들을
처리하는 방법인 옵셔널을
어떻게 만드는지 왜 필요한지
이러한 옵셔널 처리를 통해 어떤 결과가
나오는지 배우게되었다.
딱 정리 해 보겠다.
옵셔널의 역할
옵셔널은 값이 있을 수도 있고, 없을 수도 있는 상태를
나타내기 위해 사용하는 Swift의 타입이다.
값이 있을 경우에는 해당 값을 사용하고,
값이 없을 경우에는 nil로 처리하여 오류를 방지한다.
옵셔널 처리를 하지 않으면 생길 수 있는 문제
옵셔널 처리를 하지 않고 데이터가 없다는 것을 처리하지 않은 경우,
시스템은 그 데이터를 있는 것으로 인식할 수 있다.
이 경우, 실명이 비어 있어도 “빈칸”으로 처리되거나,
핸드폰 번호가 없어도 비어 있는 데이터를
마치 있는 것처럼 취급하게 되어,
잘못된 요청이나 처리로 이어질 수 있다.
예를 들어, 핸드폰 번호가 없는데도 불구하고
메시지를 전송하려는 시도를 할 수 있다.
이 상황을 방지하기 위해 옵셔널을 사용해
"핸드폰 번호가 없는 상태(nil)"를 명확하게 나타내고,
이 경우 추가 처리가 필요하다는 것을
시스템에 알릴 수 있다.
옵셔널의 필요성
옵셔널은 데이터의 유무를 명확히 구분할 수 있게 해준다.
값이 없다면 nil로 처리하고, 값이 있다면
해당 값을 사용하도록 코드를 작성할 수 있다.
이를 통해 데이터가 없는 상황을
제대로 처리할 수 있으며,
데이터가 있을 때와 없을 때를 구분해서
다른 로직을 적용할 수 있다.
옵셔널 처리를 통해 얻는 결과
옵셔널 처리를 통해 시스템은 값을 안전하게 다룰 수 있고,
값이 없는 경우 예외 상황을 처리할 수 있게 된다.
예를 들어, 옵셔널로 처리된 핸드폰 번호는
값이 없을 경우 nil로 확인하고, 문자 발송을 하지 않도록
처리할 수 있고 이를 통해 잘못된 데이터 전송을 방지할 수 있다.
옵셔널을 사용하지 않으면 잘못된 데이터를 처리하거나,
빈 데이터를 “있는 것”으로 인식해서 엉뚱한 동작을 할 수 있다.
그래서 옵셔널을 적절히 사용하면,
값이 없을 경우 이를 명확히 처리하고
오류를 방지할 수 있는 것이다.
'IOS > Swift-TIL' 카테고리의 다른 글
[Swift-TIL] 옵셔널 바인딩, 체이닝 - 옵셔널 값을 안전하게 사용해 보기 (실습편) (0) | 2024.10.24 |
---|---|
[Swift-TIL] 옵셔널 바인딩, 체이닝 - 옵셔널 값을 안전하게 사용해 보기 (이론편) (0) | 2024.10.22 |
[Swift-TIL] 옵셔널 - 있을 수 있는 것 없는 것 (이론편) (0) | 2024.10.22 |
[Swift-TIL] 스위치 - 선택지를 사용해서, 케이스 별로 정리하는 방법 (실습편) (0) | 2024.10.17 |
[Swift-TIL] 스위치 - 선택지를 사용해서, 케이스 별로 정리하는 방법 (이론편) (0) | 2024.10.17 |