코드는 없어지지 않는다!
- 코드는 요구사항을 상세히 표현하는 수단이다.
- 코드 생성이 자동화되어도 고도로 추상화된 언어나 특정 분야의 언어로 작성하는 것 역시 코드이기 때문에, 코드가 없어질 일은 없다.
- 오히려 어떤 언어이든 코드는 기계가 이해하고 실행할 수 있도록 세밀하고 구체적으로 작성되어야 한다.
좋은 코드 vs 나쁜 코드
- 개발자는 바쁘더라도 서두르기보다는 손씻기를 우선하는 의사처럼 프로페셔널해야 한다.
- 기한을 맞출 수 있는 유일한 방법은 언제나 깨끗한 코드를 유지하는 습관이다.
- 깨끗한 코드를 작성하려면 좋고 나쁜 코드를 구분하는 '코드 감각'이 있어야 한다.
깨끗한 코드란?
전문가의 의견은..
- 비야네: 세세한 사항까지 꼼꼼히 처리하는 코드
- 그래디: 사실에 기반하여 필요한 내용만 명확히 드러낸 것
- 데이브: 다른 사람이 고치기 쉬운 코드
- 마이클: 주의 깊게 작성한 코드
- 론: 중복 없이, 한 기능만 수행하고, 제대로 표현하며 작게 추상화된 것
- 워드: 읽으면서 짐작한 대로 돌아가는 코드
의도를 분명히 밝혀라
- 의도가 분명한 이름은 시간 절약 차원에서 정말 중요하다.
- 변수 / 함수 / 클래스명에 존재 이유, 수행 기능, 사용 방법 명시할 것.
(주석 필요 = 의도가 분명하지 않음) - 코드의 단순성 < 코드의 함축성
- 너무 기발해서 의도가 명료하게 보이지 않는 이름은 피하자
예시 1)
Bad ❌
- 이름 d 에 아무 의미가 없음
- 경과 시간이나 날짜에 관한 정보 미제공
int d; // 경과 시간(단위: 날짜)
Good ⭕️
- 측정하는 값과 단위를 명시함
int elapsedTimeInDays;
int daysSinceCreation;
int daysSinceModification;
int fileAgeInDays;
예시 2)
Bad ❌
- theList 에 무엇이 들었는지 알려주지 않음
- theList 에서 0번째 값이 중요한 이유를 모름
- 값 4에 대한 설명이 없음
- 함수가 반환하는 list1 의 사용법을 알 수 없음
public List<int[]> getThem() {
List<int[]> list1 = new ArrayList<int[]>();
fot (int[] x : theList)
if (x[0] == 4)
list1.add(x);
return list1;
}
Good ⭕️
- theList 를 게임판이라고 가정하여 네이밍함
- 칸을 간단한 클래스로 표현, 명시적 함수 사용
- 값 4는 깃발이 꽂힌 상태를 가리킴
public List<Cell> getFlaggedCells() {
List<Cell> flaggedCells = new ArrayList<Cell>();
for (Cell cell : gameBoard)
if (cell.isFlagged())
flaggedCells.add(cell);
return flaggedCells;
}
잘못된 정보를 피하라
- 코드에 잘못된 단서를 남기지 말 것
- 일반적인 의미를 가진 단어를 다른 의미로 사용하지 말자
- 서로 비슷한 이름을 사용해 헷갈리지 않도록 주의하기
- 일관성이 떨어지는 표기법은 잘못된 정보이다
의미 있게 구분하라
- 이름이 다르다면 의미도 달라져야 한다.
- name1, name2, name3 등의 연속적 숫자, a / the 추가, data / info 사용 등 주의하기
- variable, table, name, string 등 불용어를 사용하지 말자
클래스 , 객체 , 메소드 네이밍
- 클래스, 객체 이름
- 명사나 명사구가 적합하다
- 예) Info, Data (x) AddressParser, WikiPage (o) - 메소드 이름
- 동사나 동사구가 적합하다
- 접근자, 변경자, 조건자는 값 앞에 get, set, is 를 붙인다
- 예) getName, setName, isPosted
그 외 주의사항
- 발음이 쉬운 이름 사용하기
예) genymdhms (x) generationTimestamp (o) - 검색이 쉬운 이름 사용하기
- 이름의 길이는 범위의 크기에 비례해야 한다
- 의미 있는 함수명은 길어서 찾아보기 쉽다
예) e5 (x) WORK_DAYS_PER_WEEK (o) - 인코딩을 피하라
- 인코딩한 이름은 발음이 어렵고 오타가 생기기 쉽다
- 인코딩을 하더라도 접두사는 붙이지 말 것 - 자신의 기억력을 자랑하지 마라
- 문자 하나만을 변수 이름으로 쓰지 말자
예) 변수 r 이 어떤 조건을 가진 url 이라는 건.. 기억하기 어렵다 - 한 개념에 한 단어 사용하기
- 추상적 개념 하나에 단어 하나를 선택해 꾸준히 사용하자
- 일관성 있는 어휘를 사용할 것! - 말장난을 하지 말자
- 한 단어를 두 가지 목적으로 사용하지 말 것 - 기술 개념에는 기술 분야와 관련된 이름을 붙여라
- 적절한 용어가 없다면 문제 영역에서 이름을 가져올 것 - 의미 있는 맥락 추가, 불필요한 맥락 제거
- 의미가 분명한 경우 지나치게 긴 이름은 좋지 않다
- 이름에 불필요한 맥락을 추가하지 말자
'ETC > Books' 카테고리의 다른 글
[Digging] 이번주에 발견한 흥미로운 글 모음 (+ 간단 요약) (0) | 2023.04.10 |
---|---|
[서평] Do it! 지옥에서 온 문서관리자 깃&깃허브 입문 (0) | 2022.10.26 |
[Clean Code] 1~4장 내용 정리 + 리뷰 (2) | 2022.09.26 |
[Clean Code] 좋은 주석 vs 나쁜 주석 (0) | 2022.09.25 |
[Clean Code] 함수 잘 만드는 법 (0) | 2022.09.22 |