개발일지

[TIL] 자바스크립트 옵셔널 체이닝 연산자(?.) 완벽 가이드

2024. 11. 28. 17:50
목차
  1. 📌 옵셔널 체이닝이란?
  2. 🤔 기존의 문제점
  3. ✨ 옵셔널 체이닝으로 해결하기
  4. 🚀 실제 활용 사례
  5. 1. API 응답 데이터 처리
  6. 2. React 컴포넌트의 Props 처리
  7. 3. 메서드 호출 시 활용
  8. 4. 배열 요소 접근
  9. 💡 옵셔널 체이닝 + null 병합 연산자
  10. ⚠️ 주의사항
  11. 🎯 마치며
  12. 📚 참고자료

안녕하세요! 오늘은 자바스크립트 개발할 때 정말 유용한 옵셔널 체이닝 연산자(?.)에 대해 알아보려고 합니다. "Cannot read properties of undefined" 에러로 고통받으신 분들이라면 이 포스트가 도움이 될 거예요! 😊

📌 옵셔널 체이닝이란?

옵셔널 체이닝 연산자(?.)는 객체의 중첩된 속성에 안전하게 접근하게 해주는 연산자입니다. 쉽게 말해서 "이 속성이 있으면 접근하고, 없으면 undefined를 반환해줘!"라고 말하는 것과 같아요.

🤔 기존의 문제점

중첩된 객체 속성에 접근할 때 마주치는 전형적인 문제 상황을 보여드릴게요:

// 기존의 방식 - 복잡하고 장황합니다
function getUserEmail(user) {
  if (user && 
      user.profile && 
      user.profile.contact && 
      user.profile.contact.email) {
    return user.profile.contact.email;
  }
  return undefined;
}

이런 코드, 많이 보셨죠? 속성 하나에 접근하려고 여러 번 체크해야 하는 불편함이 있었습니다.

✨ 옵셔널 체이닝으로 해결하기

이제 같은 코드를 옵셔널 체이닝으로 작성하면 이렇게 변합니다:

// 옵셔널 체이닝 사용 - 깔끔하고 직관적입니다
function getUserEmail(user) {
  return user?.profile?.contact?.email;
}

한 줄로 깔끔하게 해결되었네요!

🚀 실제 활용 사례

1. API 응답 데이터 처리

const apiResponse = {
  data: {
    user: {
      profile: {
        name: "John",
        image: "profile.jpg"
      }
    }
  }
};

// 옵셔널 체이닝 사용
const userName = apiResponse?.data?.user?.profile?.name;
// 'John' 출력

2. React 컴포넌트의 Props 처리

const UserProfile = ({ user }) => {
  return (
    <div>
      {/* user나 address가 없어도 안전합니다 */}
      <p>이름: {user?.name ?? "이름 정보 없음"}</p>
      <p>주소: {user?.address?.street ?? "주소 정보 없음"}</p>
    </div>
  );
};

3. 메서드 호출 시 활용

const api = {
  user: {
    getData() {
      return "유저 데이터";
    }
  }
};

// 메서드 존재 여부를 체크하고 호출
const data = api.user?.getData?.();

4. 배열 요소 접근

const users = null;
const admins = [{name: "관리자"}];

console.log(users?.[0]?.name); // undefined
console.log(admins?.[0]?.name); // "관리자"

💡 옵셔널 체이닝 + null 병합 연산자

옵셔널 체이닝은 null 병합 연산자(??)와 함께 사용하면 더 강력해집니다:

const settings = {
  theme: {
    dark: {
      background: "#000"
    }
  }
};

// light 테마가 없을 때 기본값 사용
const backgroundColor = settings?.theme?.light?.background ?? "#fff";

⚠️ 주의사항

  1. 과도한 사용은 피하기

    • 모든 곳에 옵셔널 체이닝을 사용하면 코드 가독성이 떨어질 수 있어요
    • 정말 필요한 곳에만 사용하세요
  2. 필수값에는 사용하지 않기

    • 반드시 있어야 하는 값에 사용하면 오류를 감추는 결과가 될 수 있어요
    • 이런 경우는 명시적인 에러 처리가 더 좋습니다
  3. 타입스크립트와 함께 사용하면 더 좋아요

    interface User {
      name: string;
      address?: {
        street?: string;
        zipCode?: string;
      };
    }
    
    const user: User = { name: "John" };
    console.log(user?.address?.street); // 타입 안전성 보장

🎯 마치며

옵셔널 체이닝 연산자는 자바스크립트 개발자의 삶의 질을 크게 높여주는 기능입니다. API 응답을 처리하거나 복잡한 객체 구조를 다룰 때 특히 유용하죠.

처음에는 '?.' 문법이 낯설 수 있지만, 사용하다 보면 없어서는 안 될 필수 기능이 될 거예요. 여러분의 코드가 더 안전하고 깔끔해질 거라 확신합니다!

즐거운 코딩 되세요! 😊

📚 참고자료

  • MDN Web Docs - Optional chaining
  • TC39 Proposal
저작자표시 비영리 변경금지 (새창열림)

'개발일지' 카테고리의 다른 글

자바스크립트 함수 완벽 가이드: 함수 표현식부터 모던 자바스크립트까지  (0) 2024.11.30
자바스크립트 화살표 함수 vs 일반 함수: 당신이 알아야 할 모든 것  (0) 2024.11.30
Java Map 깊이 이해하기: HashMap vs TreeMap vs ConcurrentHashMap  (0) 2024.11.28
Java Set: HashSet, TreeSet, LinkedHashSet 완벽 가이드  (0) 2024.11.28
[pre-project 문제해결 공유] @RestController 어노테이션과 @Validated 어노테이션 충돌문제  (0) 2023.08.22
  1. 📌 옵셔널 체이닝이란?
  2. 🤔 기존의 문제점
  3. ✨ 옵셔널 체이닝으로 해결하기
  4. 🚀 실제 활용 사례
  5. 1. API 응답 데이터 처리
  6. 2. React 컴포넌트의 Props 처리
  7. 3. 메서드 호출 시 활용
  8. 4. 배열 요소 접근
  9. 💡 옵셔널 체이닝 + null 병합 연산자
  10. ⚠️ 주의사항
  11. 🎯 마치며
  12. 📚 참고자료
'개발일지' 카테고리의 다른 글
  • 자바스크립트 함수 완벽 가이드: 함수 표현식부터 모던 자바스크립트까지
  • 자바스크립트 화살표 함수 vs 일반 함수: 당신이 알아야 할 모든 것
  • Java Map 깊이 이해하기: HashMap vs TreeMap vs ConcurrentHashMap
  • Java Set: HashSet, TreeSet, LinkedHashSet 완벽 가이드
벤지_
벤지_
디자인 전공의 비전공자에서 개발자로 거듭나는 이야기를 담고자 합니다.
벤지_
벤지의 개발일지
벤지_
전체
오늘
어제
  • 분류 전체보기 (42)
    • 개발일지 (42)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • Spring
  • 프리프로젝트
  • 배포
  • 부트캠프
  • 화살표 함수
  • 리액트
  • 코드스테이츠
  • 리플렉션 api
  • 테스트
  • Set
  • 자바
  • JPA
  • 투두리스트
  • 프론트엔드
  • 개발일지
  • SQL
  • 데이터베이스
  • java
  • til
  • JavaScript
  • AWS
  • 자바스크립트
  • SpringRESTDocs
  • 국비지원
  • React
  • 스프링
  • 백엔드
  • map
  • JUnit
  • KPT회고

최근 댓글

최근 글

hELLO · Designed By 정상우.
벤지_
[TIL] 자바스크립트 옵셔널 체이닝 연산자(?.) 완벽 가이드
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.