자신이 만든 코드가 지저분할 때

leonid의 이미지


제가 프로그램 하나를 짰는데요

사전에 그 프로그램이 가져야 할 구조를 제대로 계획하지 않고

무턱대고 짜버리는 바람에

완성한 후에는 코드가 뒤죽박죽 엉망이더군요. (정상적으로 작동하고 버그도 없지만)

이런 경우에는 어떻게 해야 할까요?

kewlbear의 이미지

그런 것에 대한 책이 있습니다. 리팩토링이란 것이죠.

pok의 이미지

Doxygen 주석등을 작성하면서 코드리뷰를 합니다.
작동되면 다른 스펙이나 요구사항이 정해질때까지 리펙토링은 안하고 리펙토링할 우선순위를 정해둔다거나 TODO를 적어가며 코드리뷰하는걸로 만족합니다.


poklog at http://poksion.cafe24.com/poklog/

chadr의 이미지

우선 세탁기에 넣고 돌립니다.. 만약에 손빨래를 해야하는 경우라면 반드시 뜨거운물이 아닌 찬물로
비틀지말고 조물조물 빨아야합니다...는 농담이구요 :)

우선 전체적으로 완성된 프로그램을 재설계를 한다는건 좀 어려울듯 싶군요..

함수단위로 중복되는 코드를 최대한 없애시고..
상수가 코드에 들어가지 않도록 상수는 define문이나 const 값으로 따로 빼서 참조를 하도록 해보시기 바랍니다.
-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.

-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.

jiee의 이미지

작은 프로그램일 경우엔 다시 만듭니다. -_-a

설계에 대한 확신없는 누더기식 코드는 프로그램의 복잡도만 증가시켜서
결국엔 프로그래머가 복잡도를 컨트롤할 수 없는 지경까지 몰더군요.

제 체험으론 다시 짜게되면 훨씬 간결하고 명확한 코드들이 나옵니다.
시간도 기존에 비해 훨씬 단축되고요.

큰 프로그램이라면...-_-?

토나오게...

Bini의 이미지

버전업이 필요없다면 그냥 쓰시면 될것같고...
그런경우가 아니라면 과감하게 새로짜시는게 낫읍니다.
많은 경우에 고치느니 보다는 새로 깔끔하게 설계하고 다시코딩하는 경우가
머리카락도 덜빠지고 시간도 훨씬 단축됩니다.
그리고 기분도 좋죠 ^^;

keizie의 이미지

뭐 예술할 것도 아니고, 이번에 얻은 경험으로 다음에 다른 거 짤 때 잘 짜면 그만입니다. 산출물만 제대로 나와준다면 무슨 상관이겠습니까.

litdream의 이미지

동감입니다.
다시짜야한다면, 진정으로 다시짜야할 필요가 있을때 그러는게 낫다고 봅니다.
어짜피, 돌아가고 결과 나오고있다면 그코드가 지저분한지 안지저분한지가 문제되는건
프로그래머 뿐이지 않나 생각되네요.

삽질의 대마왕...

삽질의 대마왕...

hongminhee의 이미지

제 경험으로는 한번 만들었던 것을 다시 한번 만들어보는 것 만큼 스스로를 계발시키는 것이 없었던 것 같습니다.

오래된 글타래이지만 답변을 달아봅니다.

c0d3h4ck의 이미지

어느 정도 리펙토링을 해도 맘에 들지가 않습니다.
그럴땐 스스로에게 계속해서 최면을 겁니다.
'이대로도 괜찮아' '나름대로 깔끔해'

그럼 좀 스스로에게 위안이 되곤 합니다;;;

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.