코드 출처 - 박교수의 Swift강좌13 & iOS 프로그래밍을 위한 Swift 기초 강의
- nil
- Objective-C 에서의 nil 사용은 '존재하지 않는 객체에 대한 포인터'를 의미한다.
- ex) 네트워크로 정보를 받아오는 프로그램
- 네트워크의 사정 상 정보를 전송할 수 없다면? → nil 들어옴 → 심각한 문제 초래할 수 있음
- ex) 네트워크로 정보를 받아오는 프로그램
- nil의 객체에 대해 메시지 호출을 할 경우 program crash가 발생할 수 있다.
- 처리할 수 없는 값이기 때문
- Swift에서의 nil은 '데이터가 없음'을 의미한다.
- Objective-C 에서의 nil 사용은 '존재하지 않는 객체에 대한 포인터'를 의미한다.
- nil 값
- Swift는 안전성(Safety)를 중요하게 생각하는 언어이다.
- 그렇기 때문에 변수나 객체가 nil이 될 수 없다.
- ex) 객체가 nil이 된다면?
- 메시지를 줄 경우 crash가 발생한다.
- 프로그램의 안전성이 떨어지는 요인이 된다.
- ex) 객체가 nil이 된다면?
- 그렇기 때문에 변수나 객체가 nil이 될 수 없다.
- 예시
-
var movie = "깨어난 포스" // movie = nil // 컴파일 오류 발생 // var otherWise: String = nil // 컴파일 오류 발생 var num = Int("Hello") // nil num // nil // 여기서 num은 nil이 될 수도 있고, 안 될 수도 있는 자료형임. // var num: Int? = Int("Hello")를 축약한 것
-
- Swift는 안전성(Safety)를 중요하게 생각하는 언어이다.
- 옵셔널 Optional
- nil이 될 수도 있고, 안 될 수도 있는 자료형에 붙여주는 것
- 상수와 변수의 값의 유무를 검사할 때 사용
- 어떤 값이 다른 값과 다른지 검사 X
- 값 자체가 있는지 없는지 검사 O
- 일반 변수가 가질 수 있는 값 → 실제 메모리 값
- 옵셔널 변수가 가질 수 있는 값 → 실제 메모리 값 or nil 값
- 선언
- 형(type) 뒤에 ? 를 붙여준다.
- 예시
-
var optionalMovie1: String? = "깨어난 포스" // "깨어난 포스" optionalMovie1 = nil // nil var optionalMovie2: String? = nil // nil optionalMovie2 = "깨어난 포스" // "깨어난 포스"
-
- 감싼 옵셔널 Wrapped Optional
- Swift에서 문자열 "100"을 Int("100")을 통해 반환하면 → 숫자 100이 아닌 Optional("100")이 반환된다.
- Optional("100") → nil이 될 가능성을 가지고 있는 옵셔널
- 포장된, 감싼 옵셔널이라고 함
- Optional("100") → nil이 될 가능성을 가지고 있는 옵셔널
- 감싼 옵셔널은 더하기(+), 빼기(-) 등의 연산을 할 수 없다.
- 포장을 벗기는 !(Unwrapping) 연산은 가능하다.
- 예시
-
Optional("100")! // 100 var n = Int("100")! + Int("200")! // 300 n // 300
-
- 띄어쓰기에 주의한다.
- 예시
- Swift에서 문자열 "100"을 Int("100")을 통해 반환하면 → 숫자 100이 아닌 Optional("100")이 반환된다.
- 옵셔널 추출 Optional Unwrapping
- 즉 옵셔널은 "값들을 보호해주는 보호막"이라 할 수 있다.
- 옵셔널의 값을 꺼내오는 방법 2가지
- 옵셔널 바인딩 Optional Binding
- nil 체크 + 안전한 값 추출
- if-let 형식 사용
- 정중히 노크하는 방식과 유사
- if-let 형식 사용
- 여러 옵셔널 type를 binding 할 수 있음
- nil 체크 + 안전한 값 추출
- 강제 추출 Force Unwrapping
- 옵셔널을 강제로 꺼내오는 방식
- 정말로 필요한 상황에만 사용해야 한다.
- 옵셔널 바인딩 Optional Binding
- 코드
읽어보기 - 옵셔널 (Optional)
'개발 > iOS' 카테고리의 다른 글
swift 문법 기초 4/7 (0) | 2021.08.26 |
---|---|
틀린 문제 (스위프트 함수 퀴즈) (0) | 2021.08.26 |
swift 문법 기초 2/7 (0) | 2021.08.25 |
clean architecture (0) | 2021.08.25 |
swift 문법 기초 1/7 (0) | 2021.08.23 |
댓글