Currying을 사용하여 자바스크립트에서 함수의 인자를 어떻게 유효성 검사할 수 있나요?

함수의 인자 유효성 검사는 자바스크립트에서 중요한 부분입니다. 인자를 올바르게 검증하면 예상치 못한 버그를 방지하고 안정적인 코드를 작성할 수 있습니다. 이러한 유효성 검사를 더욱 용이하게 만드는 방법 중 하나는 Currying(커링)을 사용하는 것입니다.

Currying은 일부 인수가 고정된 함수로부터 더 적은 수의 인수를 받아들이는 새로운 함수를 생성하는 프로세스입니다. 이를 통해 함수의 인자를 유효성 검사하는 과정을 더욱 간소화할 수 있습니다.

아래는 Currying을 사용하여 자바스크립트에서 함수의 인자를 유효성 검사하는 예제 코드입니다.

// curried 함수를 생성하는 curry 함수 정의
function curry(fn) {
  return function curried(...args) {
    if (args.length >= fn.length) {
      // 유효성 검사 로직 실행
      return fn.apply(this, args);
    } else {
      return function(...moreArgs) {
        return curried.apply(this, args.concat(moreArgs));
      };
    }
  };
}

// 유효성 검사 함수 정의
function validateString(minLength, maxLength, value) {
  if (typeof value !== 'string') {
    throw new Error('Value must be a string');
  }

  if (value.length < minLength || value.length > maxLength) {
    throw new Error('Value length is invalid');
  }

  return true;
}

// Currying된 유효성 검사 함수 생성
const curriedValidateString = curry(validateString);

// 유효성 검사 함수를 사용하여 인자 검증
const validateName = curriedValidateString(2, 20);

try {
  validateName('John');  // 유효한 문자열 길이
  console.log('Valid name');
} catch (error) {
  console.error('Invalid name:', error.message);
}

try {
  validateName('J');  // 유효하지 않은 문자열 길이
  console.log('Valid name');
} catch (error) {
  console.error('Invalid name:', error.message);
}

try {
  validateName(123);  // 유효하지 않은 자료형
  console.log('Valid name');
} catch (error) {
  console.error('Invalid name:', error.message);
}

위의 코드는 validateString 함수를 Currying하여 특정 문자열의 길이를 유효성 검사하는 validateName 함수를 생성합니다. validateName 함수는 curriedValidateString 함수를 통해 최소길이와 최대길이를 첫번째 인자로 고정시키고, 실제 값을 인자로 받아 유효성 검사를 수행합니다.

이런 방식으로 함수를 Currying하여 인자를 유효성 검사할 수 있습니다. Currying은 함수를 재사용하고 유지보수하기 쉽게 만들어주는 유용한 패턴입니다.