#32StructuralMedium

프록시 패턴

프록시 패턴

프록시 패턴을 사용해 createValidatedUser(user) 함수를 구현하세요.

프록시 패턴은 대상 객체에 대한 접근을 가로채(intercept) 검증, 로깅, 권한 제어 등을 수행할 수 있게 합니다. 원본 객체를 직접 변경하지 않고도 동작을 확장할 수 있습니다.

요구사항

createValidatedUser(user)는 다음 규칙을 강제하는 프록시 객체를 반환해야 합니다:

  • age양의 정수가 아닌 값(0, 음수, 정수가 아닌 숫자)으로 설정 시 예외를 던집니다
  • name빈 문자열로 설정 시 예외를 던집니다
  • 존재하지 않는 속성을 읽으면 undefined를 반환합니다 (C++/Java/Kotlin의 정적 타입 언어에서는 정의된 게터만 반환)
  • 정상 값은 그대로 저장/조회됩니다

예시

const user = createValidatedUser({ name: 'Alice', age: 30 });
user.age = 31;            // OK
user.name = 'Bob';        // OK
user.age = -1;            // throw!
user.name = '';           // throw!
console.log(user.unknown); // undefined

학습 포인트

  • 객체 접근을 가로채는 프록시/래퍼 기법
  • TS: Proxy + handler / Java: 래퍼 클래스 + setter / Kotlin: 래퍼 + setter / C++: 래퍼 클래스 + setter
  • 검증 로직과 도메인 로직의 분리
언어: