kok202
[2019.02.04] 클린 코드 (변수,함수,주석)

2019. 2. 6. 01:08[공부] 독서/클린 코드

깨끗한 코드의 중요성


코드는 그 자체로 훌륭한 요구명세가 되여야한다.


르블랑의 법칙 : 나중은 절대 오지 않는다. 그러므로 코드는 진지하게 짜야한다.


전문가 = 나쁜 코드의 위험을 인지하고 코드 개선을 위한 시간이 필요함을 주장할 수 있는 사람


코드는 사실 기반의 필요한 내용만 있어야한다.


보이스카우트 규칙 : 캠프장에 처음 왔을 때보다 더 깨끗하게 해놓고 떠나라

그러므로 코드를 수정하면 깨끗한 코드로 정리해놓고 떠나라





변수 이름


진짜 리스트가 아니라면 변수 이름에 list가 들어가는 것을 피해라 ( list -> group )


발음하기 쉬운 변수 이름을 사용해라 ( ymdt -> tiemstamp )


문자 하나를 사용하는 상수와 이름을 피해라 나중에 검색할 때 찾기 힘들다.

단 for문에 들어가는 i,j,k 는 괜찮다.

for(int i = 0; i < 7 ; i++) -> for(int i = 0; i < MAX_LENGTH ; i++)


멤버 변수를 나타내는 m, 자료형을 나타내는 i, str 과 같은 접두어 는 이제 피해라.

예전에는 좋은 코드였을지 모르지만 이제는 IDE가 색으로 잘 구분해준다.


마찬가지로 인터페이스 클래스 이름 앞에 I를 다는 것도 그만해라.


다른 개발자가 코드를 읽을 때 변수 이름을 자기가 이해하기 쉽도록 변환해가면서 이해해야한다면 옳지 못하다.


클래스 이름 = 명사 혹은 명사구를 사용해라 (단 Manager, Info, Data, Processor 는 피해라)

메소드 이름 = 동사 혹은 동사구로 이름을 시작해라. 특히 is, set, get 은 java 표준이다. (각각 조건자 변경자 접근자)


생성자를 중복정의 한다면 정적 팩토리 메소드를 사용해라 

Complex x = new Complex(5);

Complex x = Complex.FromRealNumber(5);


한개념에 한 단어만 사용해서 통일성을 높여라 

fetch, get, retrieve

controller, manger, driver

하나만 사용해라

단 insert, add, append는 의미가 다르다.

그러니 이것은 구분해줄 가치가 있다.


if 문안의 중복된 과정을 함수로 쪼개는 일이 변수의 의미를 더욱 분명하게 할 수 도 있다.




함수


함수는 작게 만들어라. 

가능하면 한 화면에 담겨야하고 20줄을 안넘기는게 좋다.


if문 else문 while문 try catch문 등에 들어가는 코드 블록에는 한줄만 들어가있는게 베스트다.

가능하면 함수로 빼놔라 


함수는 한가지 일만 해야한다.

명령과 조회를 분리해라.


함수 내에 여러개의 섹션이 나뉜다면 (1,2,3...) 함수를 쪼개라


스위치 문은 가능한 쓰지마라

스위치 문이 허용되는 경우 : 다형성에 의해 타입에 따라 서로 다른 자식 클래스를 new해줘야 하는 경우


인수로 넘긴 데이터가 reference 로 전달되는 경우 함수 내부에서 직접 변환하지마라.

데이터를 변환하는 함수라면 변환된 데이터를 return 해서 사용하도록 해라.


함수의 인수 갯수는 적을수록 좋다.

원하는 위치에 원하지 않는 인수가 바뀌어서 잘못 들어갈 수 있기 때문이다.


if 문에의한 오류 처리보다는 try catch에의한 예외 처리를 사용하라

try catch 문은 보기 굉장히 흉해질 수 있으니 마찬가지의 원리로 블락안의 내용을 함수로 분리해라


함수내에 return문은 하나인게 좋으며 break, continue 를 자제하고 goto는 절대 사용해선 안된다.


함수를 짤 때 추천하는 방식

1. 러프하게 짠다

2. 테스트하는 단위 테스트 케이스를 만든다.

3. 코드를 다듬고 함수를 만든다.

4. 중복을 줄인다.





주석


가능하면 주석 없이 의사전달이 확실하게 코드를 짜는 것이 최고다.


주석을 다는 것에 집중하지말고 주석을 사용해서 의도를 확실하게 표현할 생각을 해라


나쁜 주석

1. 읽기 쉬운 코드를 반복해서 설명하는 주석

2. 닫는 주석 ( } //if )

3. 배너 주석 ( /////////////////////////////////////)

4. 쓸모없는 말을 주절거리는 주석

5. 임시로 주석으로 처리한 코드 -> 걱정말고 그냥 지워라 어차피 git이 기억해준다.

6. 이력 관리를 하는 주석 -> 이제 git이 알아서 해준다.

7. 위키피디아마냥 너무 많은 정보를 달아둔 주석



좋은 주석

1. 법적 효력을 나타내는 주석

2. 정보 제공 주석 (이 정규 표현식은 ~ 하는 것이다.) 근데 이것도 차라리 클래스로 분리해서 주석을 없애는게 좋다.

3. 의도를 설명하는 주석

4. 의미를 명료하게 하는 주석

5. 결과를 경고하는 주석

6. TODO 주석 (단 남발 금지)

7. 중요성을 강조하는 주석