허원철의 개발 블로그

클린 코드 (2) 본문

clean code & refactoring

클린 코드 (2)

허원철 2017. 3. 26. 18:21
이번 글은 '클린 코드 시작하기'에 이은 글입니다.
 
 
의미 있는 이름 짓기

1) 이름을 명명할 때 명확하게 의도가 드러나도록 합니다.
 
ex) 학생 이름
1
2
String studentName; ------------------- (O)
String nm; ---------------------------- (X)
cs
 
2) 흡사한 이름을 사용하거나 유사한 개념을 다르게 표기하는 행위는 피하도록 합니다.
 
1
Map<String, Student> studentList; ------------------------ (X)
cs
 
3) 의미가 있게 구분합니다.
4) 검색하기 쉬운 이름을 사용합니다.
 
1
2
3
4
5
if ( getDayOfWeek() == 1 ) --------------- (X)
 
private static final MONDAY = 1;
...
if ( getDayOfWeek() == MONDAY ) ---------- (O)
cs
 
5) 클래스명은 명사나 명사구, 메소드는 동사나 동사구로 시작하도록 합니다.
 
1
2
Class     : Cutomer, Account, ...
Method    : getXXX(), setXXX(), isXXX(), ...
cs
 
6) 개념 하나에 단어 하나를 사용합니다.
 
- fetch, retrieve, get... 등등 섞어 쓰지 않습니다. 
 
 
함수 만들기
 
- 제어문 단위로 적절하게, 한 함수에서 한가지 일만 하게 만듭니다.
 
1) 최대한 작게 만듭니다.
 
1
2
3
private boolean isEmpty(String value) {
    return value == null || "".equals(value);
}
cs
 
2) 제어문 단위로 적절하게 함수를 만듭니다.
3) 함수 하나당 하나의 일만 수행합니다.
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
private void method() {
 
   for() {
      ...
   }
 
   for() {
      ...
   }
 
----------------------------- ( X )
 
private void method() {
 
     for1();
 
     for2();
 
----------------------------- ( O )
cs
 
4) 한 함수에서 추상화수준(깊이)을 하나로 합니다.
 
- 꼬리에 꼬리를 무는 메소드는 되도록이면 쓰지 않습니다.
 
5) switch 문을 드러내지 않도록 합니다.
 
- 디자인 패턴인 팩토리 패턴을 활용하는 것을 추천합니다.
 
6) 서술적인 함수명을 사용합니다.
 
- findStudentByStudentId(), findStudentByStudentNumber() 등등
 
7) 어규먼트는 최대한 적게 사용합니다.

 - 플래그 어규먼트 사용하지 않는다.
 - 어규먼트들을 클래스화 할 수 있는지 확인합니다.
 
1
2
3
private List<Area> findAreaByPointXAndPointY(double pointX, double pointY) --- (X)
 
private List<Area> findAreaByPoint(Point point) ------------------------------ (O)
cs
 
8) 함수 안에 부수 기능을 숨기지 않습니다.
 
1
2
3
4
private List<Student> findById(Long id) {
     deleteStudentById(id);
     return ...
------------------------------------- (X)
cs
 
9) 명령과 조회를 구분합니다.

1
2
3
if ( setPoint(127.00000037.000000) ) {
 
------------------------------------- (X)
cs
 
10) 복잡한 구조에서는 예외처리를 이용합니다.
11) 반복 코드를 사용하지 않습니다.
12) 큰 구조에서는 두개이상의 return 문을 넣지 않도록 합니다.


'clean code & refactoring' 카테고리의 다른 글

클린 코드 (3)  (404) 2017.03.26
클린 코드 (1)  (392) 2017.03.26
Comments