반응형
1장 - 표면적 수준에서의 개선
- 특정한 단어를 사용하라 : get 대신 fetch나 download
- 꼭 그래야 하거나 좁은 의미 단순 사용이 아닌경우에는 tmp와 같은 보편적인 이름의 사용을 피하라
- 구체적인 이름을 이용하라 : ServerCanStart()는 CanListenOnPort()에 비해 의미가 모호하다.
- 변수명에 중요한 세부 정보를 덧붙여라 : ~_ms이거나 ~_size
- 사용범위에 따라 이름의 길이를 조절하라.
- 대문자나 밑줄 등을 의미 있는 방식을 활용하라
- 이름에 정보 담기
- 재치 있는 이름보다 명확하고 간결한 이름이 더 좋다.
- retval이라는 이름은 정보를 제대로 담고 있지 않다. 대신 변수 값을 설명하는 이름을 사용하라.
- tmp라는 이름은 대상이 짧게 임시적으로만 존재하고, 임시적 존재 자체가 변수의 가장 중요한 용도일 때에 한해서 사용해야 한다.
- for문의 i,j,k 같은 경우 해당 반복문의 뜻 포함 count_i 이거나 ci 이거나 c_i
- 하나의 함수에 하나의 기능
- 하나의 함수에 하나의 기능을 구현하고 필요시 캡슐화로 새로 구성
- 명명에 단위 포함
- size_mb
- max_kbps
- 상황에 맞는 속성 포함하기 : data 라는 변수를 가공 전,후로 구분
filter\_data += 5; return data\_filter; }
- 패스워드가 'plaintext'에 담겨 있고, 추가적인 처리를 하기 전에 반드시 암호화 되어야한다. -> plaintext_password
- html의 바이트가 utf-8으로 변환되었다 -> html_utf_8
- 이름의 길이는 좁은 범위에서는 짧은 이름, 넓은 범위에서는 적당히 긴 이름
- 의미 축약은 되도록 피하되, str과 같은 일반적인 축약어는 사용하며, 축약어를 사용시 규칙을 정한다.
- 이름 포맷팅으로 의미 전달
- _ : 클래스 멤버
- class 멤버로 존재시 offset_
class Test{ private String offset\_; }
- class 멤버로 존재시 offset_
- _ : 클래스 멤버
- 함수,생성자,정의 : 대소문자
- #define과 같이 CONTENS_NAME ="TEST" 와 같은 형태
- constTestName
- 생성자 -> new Test();
- 일반 함수 -> testSum
- 특정 문법 : $
- jQuery와 같은 저장 변수에 $ 붙이기
var $doller\_test = $("doller\_test")
- jQuery와 같은 저장 변수에 $ 붙이기
- html id와 class : _과 -
3장 : 오해 할 수 없는 이름들 : 영어 - 시한 폭탄 중 하나의 선을 잘라야 한다. "왼쪽을 잘라야하지?" "그래"했다. 그리고 폭탄은 터졌다. 그래(right)의미 중첩
- 본인이 지은 이름의 의미 중복
- filter : results = DataBase.all_objects.filter("year <= 2011") 일 경우 -> 어떤 데이터가 들어 갈 것인가. 2011 이상인 데이터?, 2011 미만인 데이터? -> filter보다는 select, exclude로 의미 분명하도록
- bool 변수 : is, has, can, should로 구분 bool 리턴시 has가 적당
- 이름에 부정보다는 긍정을 쓴다 : bool disable_pass = false 보다 bool use_pass = true
- 시작 포함 마지막 경계를 포함 first, last
- 시작 포함 마지막 경계를 미포함 begin, end
4장 미학 VS 설계
- 눈을 편하게 하라 : 정렬
- 들여쓰기
- 줄바꿈
- 줄 당 80글자과 같은 회사 내 규칙
- 코드 작성 전 해당 클래스, 함수에 대한 정보를 주석으로 예시 표현
- 헬퍼 함수를 만든다. : 함수를 간결하게 보여주기 위해 담는 함수
- 가능하다면 코드 열 맞추기.
- 변수명1 = test + " " +" "
- 변수명10 = test+ "m"+"y_fun "
- 비슷한 코드는 비슷하게, 다른 코드는 다르게 : 오타와 같은 에러
- 선언문을 블록으로 구성하라.
5장 주석
- 주석은 필요한 부분과 필요 없는 부분을 확실히 구분 : 쓸모 없는 주석은 낭비
- 코드의 함수, 변수 명을 보고 바로 알 수 있도록 구성
- 나쁜코드 + 주석은 하지 말자.
- 감독의 입장에서 코드의 작성 된 이유 내용
- 코드의 담긴 철학 TODO 혹은 XXX과 같이 표현 1.
표시 | 보통의 의미 |
TODO | 아직 하지 않은 일 |
FIXME | 오작동을 일으킨다고 알려진 코드 |
HACK | 아름답지 않은 해결책 |
XXX | 위험! 여기 큰 문제가 있다. |
- 어떤 상수가 특정한 값을 가지게 된 사연 : CYCLE = 10 -> CYCLE은 9보다 작으면 안된다.
- 특정 부분을 보고 "뭐라고?"라는 생각을 예측하여 주석 추가
- 평범한 사람이 예상하지 못할 특이한 동작을 기록하라.
- 파일이나 클래스 수준 주석에서 '큰 그림'을 설명하고 각 조각이 어떻게 맞춰지는지 설명하라.
- 세부 코드에 주석을 달아 나무만 보고 숲을 보지 못하는 에러를 없애라.
- 'it'이나 'this'같은 대명사가 같은 대명사가 여러 가지를 가리킬 수 있다면 사용하지 않는 것이 좋다.
- 함수의 동작을 실제로 할 수 있는 한도 내에서 최대한 명확하게 설명하라.
- 신중하게 선택 된 입/출력 에로 주석을 서술하라.
- 코드가 가진 의도를 너무 자세한 내용이 아니라 높은 수준에서 개괄적으로 설명하라.
- 같은 줄에 있는 주석으로(예. Function(/arg=/ …)) 의미가 불문명한 함수의 인수를 설명하라.
- 많은 의미를 함축하는 단어로 주석을 간단하게 만들라.
9장 변수와 가독성
- 변수의 수는 최대한 줄여라 - 특히 전역변수
- 변수가 줄면 읽어야 되는 양은 절반이 될것이다.
- 클로저를 사용하라. return function(){ ... }()
10장 상관없는 하위 문제 추출하기
- 전체 흐름에서 필요 없는 하위 문제는 따로 관리
- Util이라는 폴더에서 공유 할 수 있도록 한다.
- 자잘하게 나눈다고 전부 좋은것은 아니다. (때로는 소극적으로)
반응형
'나(다) > 책' 카테고리의 다른 글
이펙티브 자바 - 9장 : 일반적인 프로그래밍 원칙 (3) | 2021.01.24 |
---|---|
이펙티브 자바 - 8장 : 메서드 (0) | 2021.01.18 |
내 삶의 주인으로 산다는 것 (4) | 2021.01.14 |
이펙티브 자바 - 7장 : 람다와 스트림 (2) | 2021.01.10 |
이펙티브 자바 - 6장 : 열거 타입과 애너테이션 (0) | 2021.01.09 |