작성
·
47
0
강의 영상에서 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) => { /* 복잡한 처리 */ };
현재 상황에서는 둘 다 괜찮습니다.
클로저든 매개변수든 동작은 똑같고, 이 정도 간단한 함수에서는 큰 차이 없어요. 너무 깊게 고민하지 마시고, 팀 컨벤션이나 개인 취향에 따라 선택하시면 됩니다! 👍