CHAPTER 4 코딩 규칙
4.1 명명과 주석
명명은 코드 가독성에 큰 영향을 미치며 프로그래머의 기본 능력과 소양을 반영 하기도 한다
4.1.1 긴 이름과 짧은 이름
- 긴 이름 : 가급적 이름이 그 의미를 자세하기 표현하기 원함 그래야 한눈에 설계 의도를 파악할수 있기 때문
- 짧은 이름 : 코드가 간결하다
명명시 일반적인 약어는 사용할수 있지만 약어 사용을 주의 해야 된다.
함수의 임시 변수와 같이 사용 범위가 비교적 작은 변수의 경우 짧은 이름을 사용할수 있다.
4.1.2 문맥 정보를 사용한 명명 단순화
객체의 콘텍스트 정보를 통해 명확하게 표현할수 있다
함수의 콘텍스트 정보를 통해 매개 변수의 이름도 단순화 할수 있다
4.1.3 비즈니스 용어집을 사용한 명명 통일
영어의 이해수준이 틀려서 동일한 비즈니스 용어의 번역이 다를수 있고 그 결과 코드의 가독성이 떨어진다
통일된 용어집을 준비해두면 이문제를 해결할수 있다 특히 긴 단어에 대해서 통일된 약어를 지정할수 있다
4.1.4 명명은 정확하지만 추상적이어야 한다
명명은 정확하지만 추상적인 특성도 고려해야 클래스, 함수 등을 수정하더라도 이름을 매번 변경할 필요가 없다
4.1.5 주석에 반드시 포함되어야 하는 것들
일부 프로그래머는 좋은 명명이 주석을 완전히 대체할 수 있으며, 만약 코드에 주석이 필요하면 명명이 충분히 적합하지 않다는 뜻 이러한 견해는 매우 편향적일수 있다
명명을 아무리 잘해도 결국 길이 제한이 있을 뿐만 아니라 모든 것을 담을 수 없다
주석은 매우 좋은 보충 설명이 될수 있다
주석은 주로 무엇 what을 하는지, 왜 why를 하는지, 어떻게 how를 하는지에 대한 정보를 담고 있다
- 주석에는 이름 보다 훨씬 더 많은 정보를 담을수 있다
- 주석은 설명과 시연의 역활을 한다
- 요약 주석은 코드의 논리를 더 명확하게 할 수 있다
4.1.6 주석이 많다고 좋은 것은 아니다
클래스, 함수, 멤버 변수에 대해서는 자세한 주석을 작성하는 것이 필요하지만
지역 변수와 같은 함수 내부의 코드나 함수 내부의 각 명령문에 대해서는 가능한 주석을 줄이고 좋은 명명, 기능 분활, 설명 변수로 대체할수 있다
4.2 코드 스타일
중요한건 팀이나 프로젝트 전체에서 코드 스타일을 일관되게 유지하는 것이다.
이렇게 하면 코드를 읽을 때 다른 스타일로 인해 발생하는 간섭을 줄일 수 있다
4.2.1 클래스, 함수의 적절한 크기
클래스나 함수의 코드 줄 수는 너무 많아도 안 되며, 너무 적어도 안된다.
하지만 클래스나 함수의 크기가 몇 줄이어야 하는 지 명확한 수치는 없다
일부 프로그래머는 함수의 크기가 디스플레이가 한 번에 표시할수 있는 줄 수를 넘어서는 안된다고 생각한다
그렇지 않으면 함수의 내용을 파악하기 위해 계속 화면을 스크롤해야 하며, 이는 좋은 코드 리드 경험이라고 할 수 없다
4.2.2 한 줄의 적절한 길이
코드의 줄의 길이와 관련하여 가급적 IDE의 표시 너비를 초과해서는 안된다는 규칙을 따를 수 있다
이렇게 하면 코드를 읽을 때 화면을 스크롤할 필요가 없어진다
하지만 너무 짧아도 하나의 문장이 두 개 이상의 라인으로 분활되기 때문에 오히려 가독성이 떨어지는 경우가 생긴다
4.2.3 빈 줄을 활용한 코드 블록 구분
코드 블록을 별도의 함수로 분리하기 불편한 경우 코드의 논리를 명확하게 하기위해서 빈 줄을 사용하여 코드 블록을 구분할 수도 있다
4.2.4 4칸 들여쓰기 혹은 2칸 들여쓰기
공간을 절약하기 위해 2칸
4칸은 코드의 중첩이 늘어나면 누적된 들여쓰기로 인해 문장이 두줄 이상 분리될 확일이 높아져서 가독성에 영향을 미친다
들여쓰기에 tab을 사용하면 안된다 표시되는 너비가 틀려 가독성에 좋지 않다
4.2.5 여는 중괄호는 어디에 놓여야 할까
새로운 줄에서 여는 중괄호와 닫는 중괄호가 정렬되 코드 구조가 훨씬 명확해진다
앞줄에서 이어지는 중괄호는 공간이 줄어드는 장점 하지만 코드가 너무 붙어서 가독성이 떨어질수도 있다
4.2.6 클래스의 멤버 순서
클래스에서 멤버 변수는 일반적으로 함수 앞에 놓는다
멤버 변수사이, 함수 사이의 관계는 먼저 정적 멤버 변수 도는 정적함수가 놓이고 뒤에 비정적 멤버 변수와 비정정함수가 놓인다
멤버 변수와 함수 범위는 내림차순으로 정렬되므로, 먼저 public, protected, private 순으로 정렬된다
4.3 코딩 팁
4.3.1 복잡한 코드의 모듈화
커다른 블록을 클래스나 함수로 캡슐화 하는데 능숙해져야 된다
4.3.2 함수의 매개변수 관리
함수의 매개변수가 너무 많으면 함수를 읽거나 사용하는 것이 불편해진다
매개변수가 5개를 넘어가면 너무 많다고 할수 있다
- 함수를 호출할때 함수 호출문이 길어저 가독성이 떨어진다
- 매개변수가 너무 많으면 단일 책임원칙을 지키지 않았었을 가능성이 높다
4.3.3 함수의 플래그 매개변수 제거
플래그 매개변수는 함수의 기능을 분기하는데 사용되는 매개변수이다
- 단일 책임원칙과 인터페이스 분리원칙을 위반한다
4.3.4 깊은 중첩 코드 제거
- 중복되는 if, else문을 제거
- continue, break문, return문을 사용하여 중첩을 바로 종료한다
- 실행 순서를 조정하여 중첩 단계를 줄인다
- 중첩 단계를 줄이기 위해 코드의 일부를 함수로 캡슐화한다
4.3.5 설명 변수
- 매직 넘버 대신 상수를 사용한다
- 설명 변수를 사용하여 복잡한 표현을 설명한다