DRY 원칙의 함정: 중복 제거가 항상 좋은 것은 아니다 > 개발관련
개발관련

DRY 원칙의 함정: 중복 제거가 항상 좋은 것은 아니다

조회 125회 댓글 0건
  • 현재 페이지 주소 복사
  • 페이스북으로 공유
  • X 로  공유
  • 트위터로  공유
  • 네이버 블로그로 공유
  • 네이버 카페 공유하기
  • 네이버 라인 공유하기
  • 네이버 밴드 공유하기
  • 링크드인으로 공유하기
  • 핀터레스트에 공유하기

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 나쁘다는 것이 아니라 ... 잘 생각해 보세요.


  • 현재 페이지 주소 복사
  • 페이스북으로 공유
  • X 로  공유
  • 트위터로  공유
  • 네이버 블로그로 공유
  • 네이버 카페 공유하기
  • 네이버 라인 공유하기
  • 네이버 밴드 공유하기
  • 링크드인으로 공유하기
  • 핀터레스트에 공유하기
전체 218건 1 페이지
  • profile_image 결론부터 말하면 큰 기대는 하지 않는것이 좋습니다.왜냐하면 우문현답을 원하지만 우문우답이 될 수 밖에 없는것이 의도를 100% 알 수 없기 때문에 그렇습니다.지시사항에 대한 명세서를 잘 적어야 좋은 결과가 나오는데 비전공자는 용어와 그에 대한 이해가 부족하기 때문에 그렇습니다. 전 비전공자인데 이런 저런것 공부해서 다 아는데요... 그럼 전공자 인것이지 비전공자가 아니지요.물론 간단한 회사소개 페이지 같은것은 물론 휼륭하게 가능하지만 조금만 복잡한게 들어가면 연동이 안되기 때문에 그렇고 Ai도 사람과 같은 형태라서 그렇습니다.그래서 한번 해보시고 재미가 있다면 본인이 하고자 하는 분야에 대한 공부를 해 나가면 …
  • profile_image GML 코딩버전을 활용해서 OpenCode 테스크탑 MS윈도우용 라이센스 입력해 사용하는 방법에 대한 것입니다.텍스트 버전은 어려워 하는 분들이 있는데 GUI가 사람에게는 더 친숙 하기 때문에 사용하기 편한것은 사실 입니다.1) 라이센스 입력 하는 방법  설정을 통해서 아래 캡처된 이미지 순서대로 입력 하면 큰 문제 없이 가능 합니다.2) 내가 작업할 폴더에 대해서는 아래 이미지에서 "+" 버튼을 클릭해서 선택하면 되고 우선 이렇게 해서 사용해 보고 추가적인 기능은 하나씩 익혀 나가면 됩니다.  이걸 사용 하는 이유는 우리가 웹브라우저에서 chat 모드로 사용하는 경우 로컬에 파일을 저장하고 …
  • profile_image 프로그래머의 본질은 변하지 않는다예전부터 나는 3년 정도 경력을 쌓은 프로그래머라면 프로그래밍이 적성에 맞는지 충분히 판단할 수 있다고 생각해왔기 때문에 면접을 볼 때도 알고리즘 테스트보다는 실제 업무 경험과 문제 해결 능력을 중심으로 평가했다.많은 사람들이 AI의 등장으로 코딩의 종말을 이야기하지만 이는 정확한 표현이 아니며 정확히 말하자면 프로그래머가 사라지는 것이 아니라 프로그래머의 코딩 방식이 바뀌는 것이다.핵심은 이해에 있다해시 알고리즘을 예로 들어보면 비트코인의 블록체인에서 해시는 각 블록을 체인처럼 연결하는 핵심 메커니즘이지만 프로그래머가 해시 알고리즘의 내부 구조를 완벽하게 이해해야만 블록체인을 다룰 수 …
  • profile_image 어떤것에는 과장이 있을 수 있다는것 ...우선 말들이 많아 사용해 봤는데 설정을 좀 더 하고 스킬도 만들어야 하고 더 해야 하는데 많은 부분을 하지 않아서 제대로 된 맛을 못봤을 수 있지만 좀 더 기다려 주는것이 낳을것 같아 심심할때 잘 있는지 물어만 보고 있는중입니다.ClawdBot —> MoltBot —> OpenClaw 이름이 앞으로는 변경되지 않았으면 합니다. * 하드웨어 준비- 맥미니 이야기가 많은데 애플 마케팅 팀이 붙었나??? 어떤 컴퓨터든 관계가 없습니다. 전기세 걱정이면 노트북이 최고 입니다. - 본래 맥미니도 서버용으로 24시간 돌리는 용도로 나온것 아니잖아요* 비전공자뭔지…
  • profile_image 에디터가 딱 제 맘에 드는게 없네요. 잘 되던것이 어느날 안되기도 하고 이것 원인 찾는다고 이것 저것 해보다가 전체 삭제하고 다시 설치하고 재부팅하고 ....왜? 그러지????참고로 vscode의 경우는 문제가 있어 재설치 해야 되는 경우 완전삭제를 하고 설치 해야 됩니다. 찾아보면 완전삭제 하는 방법 설명하신분 있습니다.즉, 디렉토리 찾아 들어가서 완전하게 모두 삭제 해야 합니다.새로나온것은 보통 좋다는 것만 말하지 실제 써보면 그럼 그렇지 하는게 있지요현재 사용하던 에디터가 다른 프로그램과 연동이 안되서 변경하려 안티그래비티 설치 했는데 이 아이는 vscode 확장 프로그램 설치가 안되네요.이런 경우 폴더를 그냥복사…
  • profile_image 결론 부터 말하면 공부 여전히 열심히 해야 하고 공부의 방법과 방향이 달라지는 것입니다.즉, 사람(에이전트)를 부릴 수 있는 방법에 대한 공부를 해야하고 어떻게 하면 잘 이용 할 수 있는 방법에 대해서 나만의 노하우 같은 것이 필요 하겠습니다.요즘 "AI가 다 알려주는데 굳이 공부할 필요가 있나요?"라는 질문을 자주 듣는다. 언뜻 보면 맞는 말 같다. 코드도 짜주고 설명도 해주는데 뭐.오래전에 있었던 일인데 이런 경우가 있었다.유닉스 시스템의 /etc/passwd 파일에서 사용자 ID를 65536으로 설정했다가 시스템이 그걸 0으로 인식해버린 거다. 이게 바로 오버플러우 문제라는 것이며 이것에 대한 원…
  • profile_image 대표적인 프론트엔드 리엑트 관련된 모든 것들에 대한 것인데요.어떤것을 사용할때는 그것이 왜? 만들어 졌고 사용하지 않으면 어떤 문제가 있을 수 있고 사용했을때의 장점을 알고 있는 것이 좋습니다.요즘 보면 안해도 될것들을 하는것들이 보입니다.물론 내가 취업을 하는데 필요하고 이직을 하는데 있어 필요하면 위와 관계 없이 하는것에 대해 뭐라 할 수 없습니다.경험을 쌓기 위해서 일부러 업무를 이런것 하는것은 좀 ....보통의 일반 사이트에선 SPA가 필요가 없어요.차라리 없는게 더 좋습니다. 초기 로딩속도 느릴 수 밖에 없는 방식이기 때문에 그렇습니다.뒤로가기 문제가 왜? 있을까요. SPA 이니까 그렇잖아요.▷ SPA 장점- …

상업적 이용 금지. 컨텐츠는 개인 용도로만 사용이 가능 합니다.