Inflearn brand logo image

인프런 커뮤니티 질문&답변

강병준님의 프로필 이미지
강병준

작성한 질문수

Next.js 완벽 마스터 (v15): 노션 기반 개발자 블로그 만들기 (with 커서AI)

블로그 상세페이지 구현

getPostMetadata 내부 함수에서 클로저를 활용하는 방식이 더 나은 선택일까요?

작성

·

47

0

강의 영상에서 getPostMetadata 메서드 내부에서 getCoverImage 메서드를 선언하여 커버 이미지를 다루고 있는데, 저는 이 함수가 내부에 선언된 이유를 두 가지로 이해했습니다.

  1. 캡슐화 및 스코프 제한: 외부에서 사용할 필요가 없는 함수이므로 내부에 선언해 함수의 범위를 명확히 제한

  2. 가독성 향상: 커버 처리 로직을 분리하여 주 함수의 가독성을 개선

     

 

그런데 영상을 보면서 든 궁금증이 한 가지 있습니다. 현재 코드에서는 getCoverImagepage.cover를 매개변수로 전달하고 있는데, getPostMetadata 내부에서만 사용되는 함수라면, 클로저를 이용해 page에 직접 접근하는 방식이 더 자연스럽지 않나요?

function getPostMetadata(page: PageObjectResponse): Post {
  const getCoverImage = () => {
    if (!page.cover) return '';

    switch (page.cover.type) {
      case 'external':
        return page.cover.external.url;
      case 'file':
        return page.cover.file.url;
      default:
        return '';
    }
  };

  return {
    coverImage: getCoverImage(),
    // ...
  };
}

이렇게 하면 page.cover를 매개변수로 전달하지 않아도 되어 더 간결하고, 함수 내부에서도 page에 자유롭게 접근하여 처리할 수 있다고 생각합니다.

 

물론 정답은 없겠지만

  1. 클로저를 활용하여 외부 스코프에 직접 접근하는 방식

  2. 명확하게 매개변수를 전달하여 의도를 분리하는 방식

이 두 가지 방식 중 위 상황에서는 어떤 방식이 더 바람직한지, 혹은 상황에 따라 어떤 기준으로 선택해야 하는지 궁금합니다!

답변 1

1

짐코딩님의 프로필 이미지
짐코딩
지식공유자

안녕하세요 🙂
정말 좋은 질문이네요! 코드 설계에 대해 이렇게 깊이 고민하시는 모습이 인상적입니다. 👍

강의에서는 그냥 더 간단해 보여서 클로저 방식을 선택했습니다. 😅

두 방식 비교

클로저 방식 (강의에서 사용):

  • 매개변수 안 넘겨도 되니까 간편함

  • 코드가 짧아서 보기 좋음

매개변수 방식:

  • 함수가 뭘 필요로 하는지 명확함

  • 테스트하기 쉬움

선택 기준

// 간단한 로직 + 한 곳에서만 사용 → 클로저 OK
const getCoverImage = () => page.cover?.url || '';

// 여러 변수 접근이 필요할 때도 클로저가 편함
const getMetaDescription = () => {
 const title = page.properties.title?.title[0]?.plain_text || '';
 const excerpt = page.properties.excerpt?.rich_text[0]?.plain_text || '';
 return excerpt || `${title}에 대한 포스트입니다.`;
};

// 복잡한 로직 + 재사용 가능성 → 매개변수가 나음
const getCoverImage = (cover) => { /* 복잡한 처리 */ };

결론

현재 상황에서는 둘 다 괜찮습니다.

클로저든 매개변수든 동작은 똑같고, 이 정도 간단한 함수에서는 큰 차이 없어요. 너무 깊게 고민하지 마시고, 팀 컨벤션이나 개인 취향에 따라 선택하시면 됩니다! 👍

강병준님의 프로필 이미지
강병준

작성한 질문수

질문하기