νλ‘ νΈμλ κ°λ°μ νλ€κ° Optional Chainingμ κ°λ μ νμ€ν κΈ°μ΅νκΈ° μν΄ κΈ°λ‘νλ€. μ΄ κΈμμλ Optional Chainingμ κ°λ κ³Ό μμ, κ·Έλ¦¬κ³ μ¬μ©λ²μ λͺ νν μ€λͺ νλ€.
μ΅μ
λ 체μ΄λ(Optional Chaining)μ "μ‘΄μ¬ν μλ μκ³ , μμ μλ μλ κ°μ μμ νκ² μ κ·Όνλ λ°©λ²"μ΄λ€.
μ΄ λ°©λ²μ ν΅ν΄ μμμΉ λͺ»ν undefinedλ nullμ μ κ·Όνλ μν©μμλ μλ¬ μμ΄ μμ νκ² μ€νν μ μλ€.
μλ μμμ ν¨κ» Optional Chainingμ λμ λ°©μμ μμ보μ.
const user = {
name: 'μ² μ',
profile: {
age: 25,
hobby: 'μΆκ΅¬'
}
};
user κ°μ²΄λ profile μμ±μ κ°μ§κ³ μμ§λ§, detail μμ±μ μ‘΄μ¬νμ§ μλλ€.
console.log(user.detail.age); // π€― μλ¬ λ°μ!
μ μ½λμμ user.detail.ageλ₯Ό μ κ·Όνλ €κ³ νλ©΄, user.detailμ΄ undefinedμ΄κΈ° λλ¬Έμ undefined.ageμ μ κ·Όνλ €κ³ νλ€.
μλ°μ€ν¬λ¦½νΈμμλ
undefinedμ μμ±μ μ κ·Όνλ €κ³ νλ©΄ "Cannot read property 'age' of undefined"λΌλ μλ¬κ° λ°μνλ€.
μ΄ λ¬Έμ λ₯Ό Optional Chainingμ μ¬μ©ν΄ ν΄κ²°ν μ μλ€.
console.log(user?.detail?.age); // β
μλ¬ X, undefined λ°ν
Optional Chainingμ μ μ©ν μ½λλ λ€μκ³Ό κ°μ λ°©μμΌλ‘ λμνλ€.
user?. β userκ° μ‘΄μ¬νλ©΄ λ€μμΌλ‘ μ§ν. userκ° nullμ΄λ undefinedμ΄λ©΄ λ°λ‘ undefined λ°ν.user?.detail?. β detailμ΄ μ‘΄μ¬ν λλ§ λ€μμΌλ‘ μ§ν. detailμ΄ nullμ΄λ undefinedλ©΄ λ°λ‘ undefined λ°ν.user?.detail?.age β ageμ μ κ·Ό. λ§μ½ userλ detailμ΄ μμΌλ©΄ undefinedλ₯Ό λ°ννκΈ° λλ¬Έμ μλ¬ μμ΄ μ½λκ° μ€νλλ€.Optional Chainingμ μ‘΄μ¬ν μλ μκ³ , μμ μλ μλ κ°μ μμ νκ² μ κ·Όνλ λ°©λ²μ΄λ€.
λ§μ½ μ κ·Όνλ €λ μμ±μ΄ μμΌλ©΄ μλ¬ λμ undefinedλ₯Ό λ°ννλ€.
Optional Chainingμ μ¬μ©νλ©΄ μμμΉ λͺ»ν μλ¬ μμ΄ μ½λλ₯Ό λ μμ μ μΌλ‘ μμ±ν μ μλ€.
π‘ Tip:
Optional Chainingμ κ°μ²΄μ μμ±λΏ μλλΌ, ν¨μ νΈμΆμλ μ¬μ©ν μ μλ€. μλ₯Ό λ€μ΄user?.getName?.()κ³Ό κ°μ΄ ν¨μ νΈμΆμ μμ νκ² μ²λ¦¬ν μλ μλ€.
νΉμ λͺ¨λ₯Ό μλ¬λ₯Ό λλΉνμ¬ undefinedμ μμ±μ μ°Ύμ κ°λ₯μ±μ΄ μλ μμΉμμλ Optional Chainingμ μ κ·Ήμ μΌλ‘ νμ©νμ.