코드 중복, 리팩토링 질문드릴께요

kws4679의 이미지

코드 중복시 반드시 중복을 없애고 분리한다고들 하더군요

그런데 중복인줄 알고 분리했다가 분리된부분을 수정하는과정에 예상치 못한 결과를 초례한다던가

아니면 완전히 중복히 아닌경우 공통된 부분만을 추출하느라 구조가 복잡해지는 경우가 많더군요

예를들어 웹페이지를 만들때 글 작성과 글 수정 페이지가 있습니다. 글 수정 페이지를 글 작성 페이지에서 input 박스에 내용만 채워져있는 형태로

만들고자 할때 두 페이지는 거의 동일한 코드를 가지고있을텐데요 이런경우 어떻게들 하시나요?

그리고 작성페이지에 내용을 검사하는 루틴과 수정 페이지에 내용을 검사하는 루틴도 거의 비슷할텐데 일부는 달라질수가 있죠 예컨데 수정 페이지에서는 특정 필드를 검사한다던가

이런경우에 공통된 검사를 분리하는게 좋은가요?

이렇게 중복된 내용을 추출하면 함수가 기하급수적으로 늘어나고 재사용하기 힘든 형태의 함수가 존재하거나 해당 함수가 존재하는지 찾기 힘든경우조차 생기곤 하는데

이런 문제를 해결할수 있는 방법이 있을까요? 예컨데 함수명 알파벳 순으로 정렬을 한다던가....

mirheekl의 이미지


간단하게는 함수에 플래그를 줘서 해결할 수도 있을 것이고.

페이지 속성 하나하나를 오브젝트화해서 해당 속성의 무결성을 검사하는 루틴을 따로따로 구현한 뒤 페이지에서는 자기가 가진 모든 속성에 대해 검사 루틴만 호출해준다든지.. 이를테면 모든 코드를 잘게 부숴서 처음부터 재사용을 고려해서 만드는 식.

기타 아주 여러 가지 방법이 있을 것 같습니다. 정답이 딱히 있는 것 같지는 않고 결국 회사에서 협업하는 사람들과 상의해서 어떤 방식이 좋을지 결정하는게 좋을듯 합니다. 한번 룰을 결정하면 공식적으로 바꾸기 전까진 반드시 지키도록 유도하고 말이죠.

--

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.