질문 193 · 구현 연습
Array.prototype.flat의 제한된 학습용 버전을 직접 구현한다면 어떤 가정을 세우고 어떻게 작성하나요?
이렇게 답해 보세요 (핵심 답변)
먼저 '일반 배열 입력과 0 이상의 정수 depth(기본값 1)만 지원하고 원본을 바꾸지 않는 새 배열을 반환한다'고 입력 가정과 경계를 명확히 밝힙니다. 그다음 배열을 순서대로 순회하며 !(i in array)로 빈 슬롯(Hole)은 건너뛰고, 현재 값이 Array.isArray이면서 남은 depth가 양수이면 depth - 1로 재귀 평탄화한 결과를 이어 붙이고 아니면 그대로 추가합니다. 네이티브 flat의 Infinity 변환, 유사 배열, species 처리까지는 범위 밖임을 함께 덧붙입니다.
함께 설명하면 좋은 이유 (꼬리질문 대비)
- 원본 배열을 직접 수정(mutate)하지 않고 새로운 결과 배열을 만들어 반환해야 불변성 계약을 지킬 수 있습니다.
- 중첩 깊이가 매우 깊은 입력에서는 재귀 호출이 콜 스택 한도를 넘을 수 있으므로 필요시 명시적 스택 반복문으로 전환할 수 있습니다.
면접에서 자주 하는 실수
JSON 문자열 치환을 쓰거나 depth 조건 없이 무조건 끝까지 다 펼치는 코드는 flat(depth)의 동작 계약과 다릅니다.
원리와 예제까지 읽기
공식 참고 자료
질문 목록 출처 ↗ · 원본 193번을 바탕으로 질문과 답변을 새로 정리했습니다.