HIT해

[Swift 기초문법 - 41] Optional chaining 본문

Swift/Swift 기초문법

[Swift 기초문법 - 41] Optional chaining

힛해 2024. 8. 17. 09:14
728x90

Optional chaining이란?

프로퍼티가 없는 중첩 객체를 에러 없이 안전하게 접근할 수 있는 문법이다.

 

Optional이란?

데이터가 있을수도 없을 수도 있는 상태

 

Optional Binding이란?

오류가 없을때 변수에 할당하는 것

 

 

 

if let 사용을 하면

struct Friend {
    let nickname: String
    let person: Person?
}
struct Person {
    let name: String
    let pet: Pet?
}
struct Pet{
    let name: String?
    let kind: String
}
let pet = Pet(name: "개냥이", kind: "고양이")
let person = Person(name: "정대리", pet: pet)
let friend = Friend(nickname: "빡코더", person: person)

if let person : Person = friend.person {
	if let pet = person.pet {
    	if let petName = pet.name {
        	print("성공")
        }
        else{
        	print("실패")
        }
    }
}

 

if let 3중 문턱을 통과해야만 변수에 할당이 된다.

가독성은 물론이고 모든 코드를 이렇게 작성한다면 손가락이 아플 것이다.

 

축약형으로 작성해보자

if let person = friend.person,
	let pet = person.pet,
    let petName = pet.name {
    // 모두 데이터가 있다면
    	print("성공")
    }else{
    	print("실패")
    }

 

많이 줄었지만 이또한 가독성이 조금은 떨어지는 듯 싶다.

 

Optional chaning 사용

if let person = friend.person?.pet?.name{
	print("성공")
} else{
	print("실패")
}

 

같은 기능을 하지만 한줄로 나타낼 수 있다!

(와! 클린코드!)

 

guard let 사용

guard let은 함수 안에서 걸렸을때 return으로 함수를 끝내는데에 보통 사용하기 때문애 위와는 반대로 사용한다

func temp() -> Void {
	guard let petName = friend.person?.pet?.name else{
    	print("실패")
        return
    }
    
    print("\(petName)")
}

 

너무 깔끔하고 간편한 문법이다.

협업을 할때 사용하면 팀원들의 업무 효율성을 높일 수 있는 좋은 문법인 것 같다.