getPostMetadata 내부 함수에서 클로저를 활용하는 방식이 더 나은 선택일까요?
65
작성한 질문수 1
강의 영상에서 getPostMetadata 메서드 내부에서 getCoverImage 메서드를 선언하여 커버 이미지를 다루고 있는데, 저는 이 함수가 내부에 선언된 이유를 두 가지로 이해했습니다.
캡슐화 및 스코프 제한: 외부에서 사용할 필요가 없는 함수이므로 내부에 선언해 함수의 범위를 명확히 제한
가독성 향상: 커버 처리 로직을 분리하여 주 함수의 가독성을 개선
그런데 영상을 보면서 든 궁금증이 한 가지 있습니다. 현재 코드에서는 getCoverImage에 page.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
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





