코드의 의도

2007/02/03 14:36

cycle length calculator
http://cavin.egloos.com/3049122


TDD로 구현한 코드를 블로그에 공개를 하신 cavin님의 코드를 구경을 해봤다. 그리고, 아래와 같은 덧글도 목격을 했다.

User inserted image

frok님의 입장은 if문에 직접적으로 이해할수 없는 조건절을 넣는것으로 덧글을 남기셨고,

User inserted image

cavin 님은 위와 같은 덧글로 코드에 의도를 나타냈다는 답글을 다셨다.

저같은 경우는 멤버변수로 cavin님처럼 사용하지는 않지만, 가능한 extract method로 조건문을 추출을 해서 의도를 표현을 한다. 개념적으로는 cavin님하고 같은 방식이라고 하겠다.

martinfowler의 책(http://www.ologist.co.kr/409)을 보면 다음과 같은 내용이 나온다.

"컴퓨터가 이해할수 있는 코드는 어느 바보나 다 작성할 수 있다. 좋은 프로그래머는 사람이 이해할 수 있는 코드를 짠다 "

그런 의미에서 cavin님의 코드 스타일에 한표를 던진다!! number == 1의 의미를 아는 사람은 세상에 아무도 없을 것이다.

간혹 이름을 잘 지을 경우가 의도를 분명히 나타내지 않겠느냐고 생각을 하는데, 일단 자신이 알아볼수 있는 이름으로 지어두고, 추후에 다른 개발자와 pair로 프로그래밍을 하다가 더 좋은 이름으로  refactoring을 해도 되고, 코드리뷰시간에 다른 분들과 좋은 이름을 선택하면 되는 것이다. 같은 의미로 공유할수 있는 이름은 한번에 나오지 않을 수도 있는 것이다.


리팩토링...

cavin님의 주석이 위에 코드에 대한 주석인지 아래 코드에 대한 주석인지 잘 모르겠지만, 위에 코드라면 숫자 1만  선택을 하고 refactoring menu를 누르면, extract constant, extract local variable를 사용할 수가 있다.

boolean isEndNumberOfPermutation = (number == 1);
// 값을 상수필드로 바꾸는 refactoring잘 안됨, ex) .. = 1;

number == 1을 상수로 빼고자 했다면, number가 멤버변수이기때문에 refactoring이 안되는 것이고, extract method를 통해서 refactoring을 하면 됩니다.

트랙백 보낼 주소 :: http://www.ologist.co.kr/trackback/507

  1. 3n+1문제 관련하여..

    2007/02/09 02:45
    삭제
    TDD습작을 통해 몇가지 문제를 깨달았는데.. 개인적으로 네이밍에 따라 그 개념에 사로잡혀 문제를 어렵게 끌어나가는 경향..이 곧잘 있음.. 그리고 김창준님께서 좋은 말씀을 해주셨는데.. 가독성은 독자에 상대적이라는 것과.. 때때로 가독성보다 중복을 줄이며 흥미로운 객체를 발견할 수 있다..는 말씀. 정확히 이해한건지 확실치 는 않지만 이번 J-language에서와 같이 우리가 일반적으로 인지하는 것...
  2. 3n+1문제와 가독성...그리고 객체

    2007/02/09 08:58
    삭제
    코드의 의도http://www.ologist.co.kr/507위에 많은 덧글들이 달려서 덧글 및 트랙백을 통해서 느낌점을 얘기해보려 합니다.cycle length calculatorhttp://cavin.egloos.com/3049122이 이야기의 시작은 바로 위에 있는 링크입니다. 애시당초 number 라는 변수의 이름 자체가 모호해서 생긴 문제를 불필요하게 해결한 건 아닌가 하는 생각이 듭니다. - 이희승 네이밍을 잘 지으면, 구현이 단순해질수..

댓글을 달아주세요:: 네티켓은 기본, 스팸은 사절

  1. 2007/02/03 16:02
    댓글 주소 수정/삭제 댓글
    애시당초 number 라는 변수의 이름 자체가 모호해서 생긴 문제를 불필요하게 해결한 건 아닌가 하는 생각이 듭니다.
    • 2007/02/03 16:15
      댓글 주소 수정/삭제
      오호~ 그럴수도 있겠네요. 희승씨라면 어떻게 코딩을 했을까요?
  2. 2007/02/03 22:56
    댓글 주소 수정/삭제 댓글
    Cycle Length 가 뭔지 몰라 모르겠습니다 ㅡㅡ;
  3. 2007/02/03 23:57
    댓글 주소 수정/삭제 댓글
    ologist님 안녕하세요^^
    스터디를 위한 습작이라 참 부끄러운코드입니다T-T

    그 주석은 말씀하신 extract constant->extract local variable 내용이 맞습니다.
    replace magic number with symbolic constant 리팩토링 내용처럼
    일단 static으로 빼서 클래스 전체에서 공유하는 상수를 바꿔주는 게 맞습니다.
    일단 그 경우 수열의 끝이라는 것을 인지하는 범위를 메소드 내로 한정하고 싶은데
    extract constant로 메소드 바깥으로 빠져나온 것을 다시 메소드 내로
    범위를 한정하기 위한 리팩토링이 잘 떠오르지 않더라구요. T-T
    짬나실때 같이 고민해주시면 좋겠네요. :)
    (기왕이면 문제도 같이 풀어서 공유한다면 좋은 경험이 될 것 같아요^^

    희승님 안녕하세요~
    문제는 3n 1이라는 문제인데요.
    http://cavin.egloos.com/3049122 에 문제를 첨부했습니다.
    희승님도 TDD로 풀어서 소스를 공유해주시면 어떨까요 재미있을 것 같은데.. :)
  4. 2007/02/09 00:34
    댓글 주소 수정/삭제 댓글
    cavin님의 코드는 일종의 극단적 가독성을 추구하신 거네요. 이 문제에만 국한해 본다면 저는 그냥 조건문을 그대로 두겠습니다. 코드는 항상 독자를 일차 고려대상으로 해야하는데, 그 정도는 독자가 쉽게 이해할 것 같습니다. 또, 때로는 말로 길게 풀어쓰는 것이 가독성을 떨어뜨리기도 합니다. 뭔가 장황해 보이니까요. 우리는 산문보다 운문(가령 하이쿠)에서 배울 것이 많습니다.
  5. 2007/02/09 00:35
    댓글 주소 수정/삭제 댓글
    만약 코드가 비지니스 로직이 들어가고 그 로직이 domain-rich하다면 되도록 가독성을 추구하겠지만(가독성은 독자에 따른 상대적 개념이라는 것을 명심하면서), 저는 때로 가독성을 손해보면서까지 중복을 줄이기도 합니다.
  6. 2007/02/09 00:35
    댓글 주소 수정/삭제 댓글
    객체지향에서 그걸 하다 보면 흥미로운 객체들을 발견합니다. 함수형에서 그렇게 하다 보면 흥미로운 함수와 함수의 함수(functional)를 발견합니다. 이 "흥미로운 무엇"은 강력합니다. 내가 전에 모르던 것을 배우게 됩니다. 그리고 종종 이것은 프로그래머의 울타리를 넘어서 영향력을 끼치기도 합니다. 고객들의 대화가 바뀔 수도 있습니다.

    객체지향을 하면서 흥미로운 객체들을 발견하지 못한다면 너무 고리타분한 코딩은 아닐까 생각합니다.
  7. 2007/02/09 00:38
    댓글 주소 수정/삭제 댓글
    여러번에 나눠 커멘트를 적어서 죄송합니다. 두가지 이유가 있습니다:
    1) 사용할 수 없는 단어(아마도 하이어 오더 펑션)를 써서 등록할 수 없다고 나왔고, 무슨 단어 때문인지 몰라 실험적으로 분할해서 올려봤습니다.
    2) 실험후 글을 지우려고 했더니 모두다 암호가 틀렸다고 나오네요.
    • 2007/02/09 08:12
      댓글 주소 수정/삭제
      태터에 버그 좀 있나보네요.
      더 많은 코멘트를 나누어서 적어도 괜찮습니다. 편하게 남기세요~^^
  8. 2007/02/09 02:44
    댓글 주소 수정/삭제 댓글
    TDD를 습작하면서 여러모로 배우게 되네요.
    '흥미로운 무엇' 곰곰이 생각해보게 됩니다. 좋은말씀 감사합니다.
  9. 2007/02/09 10:02
    댓글 주소 수정/삭제 댓글
    리펙토링을 고려하셨다면 메소드 자체에서 선언해주시는 필요없는
    참조를 없애는 더 좋은 방법이 아닐까요?
    public int cycleLengthOf(int isEndNumberOfPermutation) {
    ..
    }
    이런식으로 말이죠..
    프로그래머가 이 프로그램을 볼때 그만한 선행지식이 있는 상태에서
    본다고 생각했기 때문에 그렇게 작성한것뿐입니다.
  10. 2008/05/23 04:32
    댓글 주소 수정/삭제 댓글
    위치에 그것을 중대한 일은 좋아했다!
  11. 2008/05/23 05:03
    댓글 주소 수정/삭제 댓글
    많은 감사 위치! 우수한 나는 너의.
  12. 2008/05/23 05:34
    댓글 주소 수정/삭제 댓글
    걸출한 뉴스!! 종류 블로그!
  13. 2008/05/23 07:12
    댓글 주소 수정/삭제 댓글
    뉴스를 위한 감사합니다…
  14. 2008/05/23 07:27
    댓글 주소 수정/삭제 댓글
    우수한과 아주 도움이 되는!
  15. 2008/05/24 01:31
    댓글 주소 수정/삭제 댓글
    그런 위치를 경이롭 위해 많게의 감사!
  16. 2008/05/24 01:39
    댓글 주소 수정/삭제 댓글
    너는 위치가 우수한 있는다!
  17. 2008/05/24 01:42
    댓글 주소 수정/삭제 댓글
    친구는 너의 현재 위치의 팬이 되었다!


BLOG main image
OOP and Java by ologist

공지사항

카테고리

All (649)
private!! (106)
WEB & IT (140)
Developer (400)