#12StructuralMedium

Proxy Pattern (Validation)

Proxy Pattern

JS 내장 Proxy검증 프록시를 구현하세요. 객체에 값을 set할 때 검증 함수를 통과해야만 반영되고, 실패 시 에러를 던집니다.

API

export function withValidation<T extends object>(
  target: T,
  validators: { [K in keyof T]?: (value: T[K]) => boolean | string }
): T;

동작

  • validators[key]가 정의되어 있으면 set 시 호출
  • validator가 true 반환 → 정상 set
  • validator가 false 반환 → Error('Invalid value for <key>') throw
  • validator가 string 반환 → Error(<반환된 string>) throw
  • validator 정의 안 된 키는 자유롭게 set
  • get은 그대로 통과

사용 예시

const user = withValidation(
  { age: 0, name: '' },
  {
    age: (v) => (v >= 0 ? true : 'age must be >= 0'),
    name: (v) => v.length > 0,
  }
);
user.age = 30;        // OK
user.age = -1;        // throws Error('age must be >= 0')
user.name = '';       // throws Error('Invalid value for name')

학습 포인트

  • new Proxy(target, handler)로 set/get/has 등을 가로챔
  • 원본 객체는 건드리지 않고 동일한 인터페이스로 한 겹 더 감쌈
  • 로깅, 검증, 접근 제어, 지연 로딩 등에 활용