0527

FE

Callback과 Fallback의 차이 알아보기

| 서론

안녕하세요, 팡일입니다.

웹 개발을 공부하다 보면 CallbackFallback이라는 용어를 자주 접하게 됩니다 두 단어는 발음과 형태가 비슷하지만, 의미와 사용하는 목적은 전혀 다릅니다.

Callback은 특정 시점에 실행할 함수를 의미하고, Fallback은 원래 사용하려던 값이나 기능을 사용할 수 없을 때 선택하는 대안을 의미합니다.

이번 글에서는 React에서 볼 수 있는 예시를 통해 두 개념의 차이를 간단하게 알아보겠습니다.

| Callback이란?

Callback다른 함수에 전달되어 특정 시점에 실행되는 함수입니다. 우리말로는 콜백 함수라고 부릅니다.

TSX
function handleClick() {
  console.log('버튼을 클릭했습니다.');
}

function Button() {
  return (
    <button onClick={handleClick}>
      클릭
    </button>
  );
}

위 코드에서 handleClick은 버튼을 클릭했을 때 실행됩니다.

함수가 바로 실행되는 것이 아니라 onClick에 전달되었다가 클릭 이벤트가 발생했을 때 호출되므로 콜백 함수에 해당합니다.

Callback은 “이 일이 발생하면 이 함수를 실행해줘”라는 의미입니다.

| Callback을 사용하는 경우

콜백 함수특정 작업이 끝나거나 이벤트가 발생한 뒤에 실행할 동작을 전달할 때 사용합니다.

대표적인 예시는 다음과 같습니다.

  • 버튼을 클릭했을 때

  • 입력값이 변경되었을 때

  • 일정 시간이 지났을 때

  • 배열의 각 요소를 처리할 때

  • 비동기 작업이 완료되었을 때

TSX
setTimeout(() => {
  console.log('1초 후 실행됩니다.');
}, 1000);

setTimeout에 전달한 함수는 1초가 지난 뒤 실행되는 콜백 함수입니다.

배열 메서드에서도 콜백 함수를 자주 사용합니다.

TSX
const numbers = [1, 2, 3];

const doubledNumbers = numbers.map((number) => {
  return number * 2;
});

map에 전달한 함수는 배열의 각 요소를 처리하기 위해 호출되는 콜백 함수입니다.

| 함수를 전달하는 것과 실행하는 것

React에서 콜백 함수를 사용할 때는 함수를 전달하는 것실행하는 것을 구분해야 합니다.

TSX
<button onClick={handleClick}>
  클릭
</button>

handleClick은 함수 자체를 전달합니다. 사용자가 버튼을 클릭했을 때 React가 해당 함수를 실행합니다.

TSX
<button onClick={handleClick()}>
  클릭
</button>

반면 handleClick()은 함수를 즉시 실행합니다. 클릭할 때가 아니라 컴포넌트가 렌더링되는 과정에서 실행되기 때문에 의도와 다른 동작이 발생할 수 있습니다.

콜백으로 전달할 때는 일반적으로 함수 이름 뒤에 괄호를 붙이지 않습니다.

| Fallback이란?

Fallback은 원래 사용하려던 값이나 기능을 사용할 수 없을 때 대신 사용하는 대안입니다.

TSX
function Profile({ imageUrl }: { imageUrl?: string }) {
  return (
    <img
      src={imageUrl || '/default-profile.png'}
      alt="프로필"
    />
  );
}

imageUrl이 존재하면 해당 이미지를 사용합니다.

하지만 값이 없다면 기본 이미지인 /default-profile.png를 대신 사용합니다. 이 기본 이미지가 Fallback입니다.

Fallback은 “원래 것을 사용할 수 없다면 이것을 대신 사용해줘”라는 의미입니다.

| React에서 사용하는 Fallback

React에서는 데이터를 불러오거나 컴포넌트를 준비하는 동안 대신 보여줄 화면을 지정할 때 Fallback을 사용할 수 있습니다.

대표적인 예가 Suspense입니다.

TSX
<Suspense fallback={<p>불러오는 중...</p>}>
  <Profile />
</Suspense>

Profile 컴포넌트가 준비되지 않았다면 fallback으로 전달한 로딩 화면을 보여줍니다.

준비가 끝나면 로딩 화면 대신 원래 보여주려던 Profile 컴포넌트를 표시합니다.

에러가 발생했을 때 대신 보여주는 화면도 Fallback UI라고 할 수 있습니다.

TSX
<ErrorBoundary fallback={<p>문제가 발생했습니다.</p>}>
  <Profile />
</ErrorBoundary>

Profile을 정상적으로 보여줄 수 없다면 오류 안내 화면을 대신 표시합니다.

| Fallback을 사용하는 경우

Fallback원래 사용하려던 값이나 화면을 사용할 수 없는 상황에 대비하기 위해 사용합니다.

대표적인 예시는 다음과 같습니다.

  • 데이터가 없을 때 보여주는 기본 문구

  • 이미지가 없을 때 보여주는 기본 이미지

  • 컴포넌트를 불러오는 동안 보여주는 로딩 화면

  • 오류가 발생했을 때 보여주는 안내 화면

  • 특정 기능을 지원하지 않을 때 사용하는 대체 기능

TSX
const displayName = user.name ?? '이름 없음';

user.namenull 또는 undefined라면 '이름 없음'을 대신 사용합니다.

이때 '이름 없음'이 Fallback 값입니다.

| Callback과 Fallback의 차이

구분

Callback

Fallback

의미

특정 시점에 실행하도록 전달하는 함수

원래 것을 사용할 수 없을 때 사용하는 대안

목적

이후에 실행할 동작을 지정함

예외 상황에서 대신 사용할 것을 지정함

대표 예시

클릭 이벤트, 타이머, 배열 메서드

기본값, 로딩 화면, 오류 화면

핵심 표현

“이때 실행해줘”

“안 되면 이걸 사용해줘”

Callback과 Fallback은 서로 비슷한 개념이 아닙니다.

Callback은 언제 어떤 동작을 실행할지와 관련된 개념이고, Fallback은 원래 계획대로 처리할 수 없을 때 무엇을 대신 사용할지와 관련된 개념입니다.

| 결론

Callback은 다른 함수에 전달되어 특정 시점에 실행되는 함수입니다. 버튼 클릭, 값 변경, 타이머 종료와 같이 어떤 사건이나 작업 이후에 실행할 동작을 지정할 때 사용합니다.

Fallback은 원래 사용하려던 값이나 기능을 사용할 수 없을 때 선택하는 대안입니다. 기본 이미지, 기본 문구, 로딩 화면이나 오류 화면 등이 이에 해당합니다.

두 단어의 형태는 비슷하지만 다음과 같이 구분하면 어렵지 않습니다.

Callback은 나중에 호출할 함수이고, Fallback은 문제가 생겼을 때 대신 사용할 대안입니다.