inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

블로그 상세페이지 구현

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

65

강병준

작성한 질문수 1

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. 명확하게 매개변수를 전달하여 의도를 분리하는 방식

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

react 블로그 next.js cursor cursorai 클로저

답변 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) => { /* 복잡한 처리 */ };

결론

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

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

rehype-sanitize 설치의 필요성

0

94

2

Notion API-DB 연결이 안돼요

0

544

2

private folders 와 전역 폴더

0

70

2

퀴즈 질문 풀이 오류

0

86

2

Streaming 관련해서 문의드립니다.

0

74

2

ISR 매커니즘에 대한 궁금증

0

68

2

cursor AI 프로젝트 룰 관련 질문 드립니다.

0

346

2

params 에 Promise 객체 타입이 지정되어야 하는 이유? 최신?

0

76

1

streaming 페이지 보완 필요

1

56

2

remark-gfm

0

112

2

마크업 파트 가독성 향상 방법

0

63

2

Next.js 블로그 결과물 공유 이벤트 진행 여부

0

69

1

블로그 PostCard 이미지 상단 여백

0

70

3

flex-col 과 space-y-6 차이

0

118

1

컴파일 에러 및 의존성 충돌 문제

0

108

2

TypeError: Invalid URL

0

174

2

세션 6의 퀴즈 5번 정답 옵셔널 캐치올 아닌가요?

1

73

2

상세 페이지 404 에러 발생

0

113

2

스타일이 적용 안되는 문제

0

98

2

cursorAI에 rule 생성 시 rule type이 안 나오는 현상 발생

0

178

3

클라이언트 컴포넌트 사전 렌더링

0

52

2

상세페이지 구현 Author의 name 프러퍼티가 조회가 안됩니다.

1

71

2

A

0

95

2

unstable_cache 사용 시 적정 revalidate 값 문의

0

91

2