Clean code(02)

935 views

Published on

summary of chapter 2 in CLEAN CODE.

Published in: Education
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
935
On SlideShare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
0
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Clean code(02)

  1. 1. CLEAN CODE<br />
  2. 2. 우리는 작명가다.<br />클래스, 메소드, 함수, 변수 이름을 매일매일 작명한다.<br />
  3. 3. 시인이 되지마라<br />함축성은 상상력을 자극하지만<br />코드는 의도를 분명하게 보여주는 <br />설명문이여야 한다.<br />int d; // 경과 시간<br />VS<br />intelapsedTimeInDays;<br />intdaySinceCreation;<br />intdaySinceModification;<br />intfileAgeInDays;<br />
  4. 4. EX)<br /> public List<int[]> getThem()<br />{<br /> List<int[]> list1 = new ArrayList<int[]>();<br /> for( int[] x : theList )<br /> if( x[0] == 4 )<br /> list1.add(x);<br /> return list1;<br />}<br />theList<br />theList의 0번째 값<br />4는<br />list1 <br />?<br />
  5. 5. 개선)<br /> public List<int[]> getFlaggedCells()<br /> {<br /> List<int[]> flaggedCells = new ArrayList<int[]>();<br /> for( int[] cell : gameBoard )<br /> if( cell[STATUS_VALUE] == FLAGGED )<br />flaggedCells.add(cell);<br /> return flaggedCells;<br />}<br />cell[STATUS_VALUE] == FLAGGED는 잠정적인 중복의 우려가 있음.<br />멤버함수로 수정하는 것이 좋음.<br />
  6. 6. HP?<br />hypotenuse, health point, Hewlett-Packard어떤 의미?<br />일관성이 떨어지는 표기법<br />l, 1, O, 0 <- 좋은 폰트를 선택하라.<br />그릇된 정보를 제공하자 마라.<br />
  7. 7. 컴파일러, 인터프리터를 위한 작명은 피하라!<br />EX)<br />publicstatic void copyChars( char a1[], char a2[] )<br />{<br /> for( int I = 0; I < a1.length; ++I )<br /> {<br /> a2[i] = a1[i];<br /> }<br />}<br />코드 본문을 보기 전까지 어떤 인자가 복사 원본이고 어떤 인자가 복사 대상인지 모름.<br />
  8. 8. 다음 의도를 구분할 수 있는가?<br /><ul><li>moneyAmountvsmoney
  9. 9. customerInfovscustomer
  10. 10. accountDatavsaccount
  11. 11. theMessagevsmessage</li></ul>여러분 자신과 동료를 위해서 의미 있게 구분하라.<br />
  12. 12. 프로그래밍은 커뮤니케이션이다.<br />발음하기 쉬운 이름을 사용하라.<br />Class DtaRcrd102<br />{<br />private Date genymdhms;<br />private Date modymdhms;<br />private final String pszgint = “102”;<br />/* … */<br />}<br />
  13. 13. vs<br />class Customer<br />{<br />private Date generationTimeStamp;<br />private Date modificationTimeStamp;<br />private final String recordId = “102”;<br />/* … */<br />}<br />어떤 코드로 대화를 하는 것이 편할까?<br />
  14. 14. 정보가 많을 수록 검색양은 줄어든다.<br />EX)MAX_CLASSES_PER_STUDENT vs 7 ?<br />변수나 상수의 가시성의 범위가 넓을 수록<br />이름의 길이도 길어지는 것이 좋다.<br />검색하기쉬운 이름을 사용하라!<br />
  15. 15. 인코딩은디코딩 규칙을 알아야 한다.<br />코드를 읽는 사람에게 추가적인 부담을 주지말자.<br />헝가리언 표기법<br />멤버 변수 접두어<br />인터페이스 클래스와 구현 클래스<br />를구분하기 위한 접두어를사용하지 말자. <br />
  16. 16. 명료함은 최고의 덕목이다.<br />남들이 쉽게 이해할 수 있는 코드를 작성하라.<br />
  17. 17. 클래스 이름은<br />명사, 명사구가 좋다.<br /> Good Ex) Customer, WikiPage, Account, AddressParser<br /> Bad Ex) Manager, Processor, Data, Info<br />동사는 사용하지 않는다.<br />
  18. 18. 메소드 이름은<br />동사, 동사구가 적합하다.<br />EX) postPayment, deletePage, save<br />접근자, 변경자, 조건자는<br />접두어get, set, is를 붙인다.<br />중복 정의 생성자는 정적 팩토리메소드를 사용하고,<br />인수를 설명하는 이름을 사용한다.<br />EX) Complex fulcrumPoint = complex.FromRealNumber(23.0);<br />
  19. 19. 기발한 이름을 피하라.<br />구어체나 속어를 사용하지 마라.<br />특정 그룹에서 통용되는 어휘는 의도가 명확하지 않다.<br />
  20. 20. 추상적인 개념과 단어가 1 : 1 대응이 되도록 한다.<br />EX) controller, manager, driver<br />의도가 차이가 무엇인가?<br />말장난을 하지마라<br />때론 일관성보다는 맥락이 중요하다.<br />코드는논문 모델 < 잡지 모델이 좋다.<br />
  21. 21. 코드를 읽는 사람도 프로그래머이다.<br />Domain영역보다 해법 영역의 이름을 사용하라.<br />EX) AccountVisitor, JobQueue<br />적절한 해법 영역의 단어가 없다면<br />Domain영역에서 이름을 가져오라.<br />
  22. 22. 이름이 충분한 의미를 가지지 못한다면,<br />클래스, 함수, 이름 공간에 넣어 맥락을 부여한다.<br />모든 방법이 실패하면,<br />접두어를 붙인다.<br />과유불급이다.<br />불필요한 맥락을 없애라!<br />
  23. 23. 좋은 이름을 선택하려면<br />설명하는 능력이 있어야 하고<br />문화적인 배경이 같아야 한다.<br />지속적으로이름을 개선하라!<br />개발자의 반대,<br />관리자의 질책을 두려워 마라.<br />코드를 개선하려는 노력을 중단해서는 안 된다.<br />
  24. 24. 끝<br />

×