글

라벨이 CleanCode인 게시물 표시

(CleanCode) 의미있는 이름

이미지
1. 의도를 분명히 밝혀라 다음코드의 목적은 무엇인가? public List<int[]> getThem(){   List<int[]> list1 = new ArrayList<int[]>();   for(int[] x : theList)    if(x[0] == 4)      list1.add(x);    return list1; } ====> 코드가 하는 일을 짐작하기 어렵다. 왜일까? 여기서 문제는 코드의 단순성이 아니라 코드의 함축성이다. 코드 맥락이 코드자체에 명시적으로 드러나지 않는다. 1. theList에 무엇이 들었는가? 2. theList에서 0번째 값이 어째서 중요한가? 3. 값 4는 무슨의미인가? 4. 함수가 반환하는 리스트 list1을 어떻게 사용하는가? 2. 그릇된 정보를 피하라 그릇된 단서는  코드 의미를 흐린다. 나름대로 널리 쓰이는 의미가 있는 단어를 다른 의미로 사용해도 안된다. 예를들어, hp, aix, sco는 변수 이름으로 적합하지 않다. 유닉스 플랫폼이나 유닉스 변종을 가리키는 이름이기 때문이다. *서로 흡사한 이름을 사용하지 않도록 주의한다. 한 모듈에서XYZControllerForEfficientHandlingOfStrings라는 이름을 사용하고, 조금 떨어진 모듈에서 XYZControllerForEfficientHandlingStorageOfStrings라는 이름을 사용한다면? 두 단어는 겁나게 비슷하다. *유사한 개념은 유사한 표기법을 사용한다. 자동완성기능 사용!!! * 주의점 대문자 O와 소문자 l사용 주의 왜냐하면 숫자 0과 1과비슷하다. * 불용어를 추가한 이름 역시 아무런 정보도 제공하지 못한다. ->Product라는 클래스가 있다고 가정하자. 다른 클래스를 ProductInfo, ProductData라 ...

(CleanCode) 클린코드

이미지
* 장인정신을 익히는 법 1. 장인에게 필요한 원칙, 패턴, 기법, 경험이라는 지식을 습득 2. 열심히 일하고 연습해 지식을 몸과 마음으로 체득 나쁜코드를 양산하면 오히려 기한을 맞추지 못한다. 나쁜 코드로 속력이 즉각 늦어져서 기한을 놓친다. 기한을 맞추는 방법, 그러니깐 빨리가는 유일한 방법은, 언제나 코드를 깨끗히 유지하는 것이다. <클린코드란?> by C++ 창시자 창문이 깨진 건물은 누구도 상관하지 않는다는 인상을 품긴다. 그래서 사람들도 관심을 끊는다. 창문이 더 깨져도 상관하지 않는다. 마침내 자발적으로 창문을 깬다. 외벽에 그려진 낙서를 방치하고 차고에 쓰레기가 쌓여도 치우지 않는다. 일단 창문이 깨지고 나면 쇠퇴하는 과정이 시작된다.  세세한 사항까지 꼼꼼하게 신경을 쓰라는 소리다. 프로그래머들이 대충 넘어가는 부분중 하나가 오류처리다. 메모리 누수, 경쟁상태, 일관성 없는 명명법이 또 다른 예다. 잘쓴 코드란 자신이 좋아했던 책을 읽었던 기억을 떠올려봐라. 마치 책을 읽는동안 단어가 사라지고 이미지가 떠오르는 듯한 코드!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! <간단한 코드 규칙> 모든 테스트를 통과한다. 중복이 없다.  시스템 내 모든 설계 아이디어를 표현한다. 클래스, 메소드, 함수 등을 최대한 줄인다. * 프로그램은 아주 유사한 요소로 이루어 졌다.  한 가지 예가 '집합에서 항목 찾기'이다. 직원 정보가 저장된 데이터베이스든 키/값 쌍이 저장된 해시 맵이든, 여러 값을 모아놓은 배열이든 이런상황이 발생하면 추상메소드나 추상클래스를 만들어서 실제 구현을 감싼다. 그러면 장점이 생긴다.  실제 기능은 아주 간단한 방식으로, 예를들어 해시맵으로, 구현해도 괜찮다.  다른 코드는 추상 클래스나 추상 메소드가 제공하는 기능을 사용하므로 실제...