DRY(Don't Repeat Yourself) 원칙은 중요한 프로그래밍 원칙이지만 맹목적으로 적용하면 오히려 코드를 복잡하게 만들 수 있습니다.
오늘 프로그램 작성하다 보니 중복되는것이 보여 제거할 방법이 있냐고 물어보니 "반복되는 패턴을 함수로 추출하여 코드를 간결하게 만들 수 있습니다." 결과를 봤는데 중복을 줄인것이 틀린것이 아닌데 더 복잡하네~

// 이메일 검증
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
$errors[] = '유효하지 않은 이메일 주소입니다.';
log_validation_error('email', $email, '이메일 형식 오류');
}
// 전화번호 검증
if (!preg_match('/^010-\d{4}-\d{4}$/', $phone)) {
$errors[] = '전화번호는 010-1234-5678 형식이어야 합니다.';
log_validation_error('phone', $phone, '전화번호 형식 오류');
}
// 나이 검증
if ($age < 19 || $age > 100) {
$errors[] = '나이는 19세 이상 100세 이하여야 합니다.';
log_validation_error('age', $age, '나이 범위 오류');
}
대략 이런 방식입니다.
함수를 별도로 만들어서 중복을 제거하긴 했는데 코딩량이 적은 것도 아니고 함수가 하나 더 생겨 버렸으니 더 복잡해짐.
이런걸 왜 쓰나 싶은데 이런것 어렵지 않게 볼 수 있습니다.
function validateAndLog($condition, $fieldName, $value, $errorMsg, $logMsg) {
if (!$condition) {
global $errors;
$errors[] = $errorMsg;
log_validation_error($fieldName, $value, $logMsg);
return false;
}
return true;
}
validateAndLog(
filter_var($email, FILTER_VALIDATE_EMAIL),
'email',
$email,
'유효하지 않은 이메일 주소입니다.',
'이메일 형식 오류'
);
validateAndLog(
preg_match('/^010-\d{4}-\d{4}$/', $phone),
'phone',
$phone,
'전화번호는 010-1234-5678 형식이어야 합니다.',
'전화번호 형식 오류'
);
validateAndLog(
$age >= 19 && $age <= 100,
'age',
$age,
'나이는 19세 이상 100세 이하여야 합니다.',
'나이 범위 오류'
);
질문>> 사실상 차이 없이 1단계 더 복잡해 지기만 하는것이네
답변>> 맞습니다. 말씀하신 대로 실질적인 이득 없이 함수 호출 단계만 추가되어 오히려 더 복잡해졌네요.
질문 >> 남이 봤을때 복잡하게 만들 목적이 아니라면 굳이 할 필요는 없을것 같지만 하는 사람 분명 있다. 없다. 하나 선택하면?
답변>> 있다.
특히 "코드 중복 제거"를 절대 원칙으로 여기는 개발자들이 분명히 있습니다. DRY(Don't Repeat Yourself) 원칙을 맹목적으로 따르다가 오히려 가독성을 해치는 경우를 종종 봅니다.
- 주니어 개발자가 "리팩토링"을 배우고 열심히 적용하려는 경우
- 코드 리뷰에서 "중복 코드"를 지적받아 무조건 제거하려는 경우
- 추상화/일반화를 과도하게 선호하는 개발자
같은 패턴이 반복된다고 무조건 함수로 빼는 게 좋은 건 아닙니다. 말씀하신 것처럼 명확성이 우선이고 지금처럼 각 체크 로직이 독립적이고 명확할 때는 그대로 두는 게 낫습니다.
본인이 사용하는 언어가 어떤 용도로 만들어 졌는지 생각해 보세요.
이런 기능이 있으니 괜찮아 ... 예를 들면 PHP의 opcache 나쁘다는 것이 아니라 ... 잘 생각해 보세요.