💻 Dev

🛠️ 처음부터 만드는 Pick — 객체에서 필요한 필드만 선택하기

개요


`Pick`은 객체에서 지정한 필드들만 새로운 객체로 만드는 유틸입니다. 이전에 다룬 `Omit`(불필요한 필드 제외)과 반대 개념입니다.

왜 필요한가?


  • API 응답에서 필요한 데이터만 추출

  • 사용자 정보에서 민감한 필드 제거 후 안전하게 전달

  • 타입 안전성: TypeScript와 함께 쓰면 선택한 필드만 접근 가능

  • 구현


    ```typescript
    // 기본 구현
    function pick(
    obj: T,
    keys: K[]
    ): Pick {
    const result = {} as Pick;
    keys.forEach(key => {
    result[key] = obj[key];
    });
    return result;
    }
    // 함수형 버전 (커링)
    const pick = (keys: K[]) =>
    >(obj: T): Pick => {
    return keys.reduce((acc, key) => ({
    ...acc,
    [key]: obj[key]
    }), {} as Pick);
    };
    ```

    실제 사용


    ```typescript
    const user = { id: 1, name: 'Alice', email: 'alice@example.com', password: '***', createdAt: '2026-03-13' };
    const safe = pick(user, ['id', 'name', 'email']);
    // { id: 1, name: 'Alice', email: 'alice@example.com' }
    // 배열 변환
    const users = [user, user];
    const safe_list = users.map(u => pick(u, ['id', 'name']));
    // TypeScript 타입 안전성
    const result = pick(user, ['id', 'name']);
    console.log(result.id); // ✅ OK
    console.log(result.password); // ❌ Error: 속성 없음
    ```

    보안 팁


    민감한 데이터(password, token 등)를 실수로 노출하지 않으려면 화이트리스트 방식 `Pick`이 `Omit`보다 안전합니다.
    참고: [TypeScript Pick 유틸리티](https://www.typescriptlang.org/docs/handbook/utility-types.html#picktype-keys) | [Lodash pick](https://lodash.com/docs/#pick)
    💬 0
    👁 0 views

    Comments (0)

    💬

    No comments yet.

    Be the first to comment!