개요

Object.entries는 객체의 키-값 쌍을 [key, value] 형태의 배열 리스트로 반환하는 표준 메서드임. 객체를 배열로 바꿔 순회, 변환, 자료구조 간 변환 같은 작업을 단순화하는 데 유용함

문법

Object.entries(obj)
  • 매개변수 obj: 키-값 쌍을 가진 객체 값
  • 반환값: [key, value] 쌍의 2차원 배열

기본 예시

const user = { name: 'Alice', age: 25 }
Object.entries(user) // [['name', 'Alice'], ['age', 25]]

배열로 변환되므로 for…of, map 같은 배열 API에 바로 연결 가능

순회와 변환

for…of로 키와 값을 동시에 순회 가능

for (const [key, value] of Object.entries({ name: 'Alice', age: 25 })) {
  console.log(`${key}: ${value}`)
}

map으로 사람이 읽기 좋은 문자열 배열로 가공 가능

Object.entries({ name: 'Alice', age: 25 }).map(([k, v]) => `${k}: ${v}`)
// ['name: Alice', 'age: 25']

Map으로 변환

키-값 페어를 유지한 채로 Map으로 손쉽게 변환 가능

const map = new Map(Object.entries({ name: 'Alice', age: 25 }))

null 및 빈 객체 처리

  • 빈 객체는 빈 배열 반환
  • null 또는 undefined에 대해 호출 시 TypeError 발생
Object.entries({}) // []
// Object.entries(null) -> 예외 발생

안전한 접근 예

const obj = null
const entries = obj ? Object.entries(obj) : []

TypeScript에서의 타입

기본적으로 Object.entries는 [string, any][] 또는 [string, unknown][]로 추론되는 경우가 많음. TS 버전과 대상 타입에 따라 달라질 수 있어 과신 금지 정확한 키와 값 타입을 유지하려면 얇은 헬퍼로 단언 처리

function typedEntries<T extends object>(o: T) {
  return Object.entries(o) as [keyof T, T[keyof T]][]
}

type User = { name: string; age: number }
const entries = typedEntries<User>({ name: 'Alice', age: 25 })

또는 Record를 명시해 값 타입 범위를 제한하는 방법 사용

const user: Record<string, string | number> = { name: 'Alice', age: 25 }
const entries = Object.entries(user) // [string, string | number][]

동작 특성 및 주의

  • own enumerable 프로퍼티만 대상. 프로토타입 체인의 프로퍼티는 제외됨
  • 심볼 키는 무시됨. 필요 시 Object.getOwnPropertySymbols와 병행 고려
  • 프로퍼티 열거 순서는 표준 규칙을 따름. 정수형 키 → 문자열 키 → 심볼 키 순서. 단, entries는 심볼 키 제외
  • 키는 문자열로 반환됨. 숫자 키도 문자열화되어 반환됨

마무리

Object.entries는 객체 데이터를 배열 중심의 도구 체인으로 끌어오는 관문 역할을 함. 순회, 변환, Map 변환 같은 작업을 간결하게 만들며, TypeScript에서는 상황에 따라 보조 타이핑으로 안전성을 보완하는 전략이 유효함

참고자료