클린코드
1. 의미 있는 이름
1)의도를 분명하게 이름을 지어라
좋은 이름을 지으려면 시간이 걸리지만 좋은 이름으로 절약하는 시간이 훨씬 더 많다.
변수나 함수 그리고 클래스 이름은 다음과 같은 굵직한 질문에 모두 답해야 한다.
존재이유, 수행기능, 사용방법 따로 주석이 필요하다면 의도를 분명히 드러내지 못했다는 말이다.
2)발음하기 쉬운 이름을 사용하라
3)검색하기 쉬운 이름을 사용하라
4)클래스 이름: 명사나 명사구
5)메서드 이름: 동사나 동사구
6)한 개념에 한 단어를 사용하라 : 같은 의미의 메서드를 fetch, retireve, get등 유사한 여러 이름으로 사용하지 마라
2.함수
1)작게 만들어라 : 작게 더작게
2)한가지만 해라
함수는 한 가지를 해야한다. 그 한 가지를 잘 해야 한다. 그 한 가지만을 해야 한다.
3)함수 당 추상화 수준은 하나로
위에서 아래로 코드 읽기 (내려가기 규칙) : 이야기 처럼 읽혀야 한다.
한 함수 다음에는 추상화 수준이 한 단계 낮은 함수가 온다.
4)서술적인 이름을 사용하라
이름이 길어도 괜찮다, 일관성 있는 문구/명사/동사를 사용하라
5)함수인수
이상적인 인수 개수는 0개다, 다음은 1개, 그 다음은 2개, 3개는 가능한 피하는 편이 좋다. 4개 이상은 특별한 이유가 필요하다. 플래그 인수를 사용하지 마라
6)오류 코드보다 예외를 사용하라!
7)반복하지 마라
7)함수를 짜는 방법
함수를 만들고, 이름을 바꾸고, 중복을 제거한다. 메서드를 줄이고 순서를 바꾼다. 때로는 전체 클래스를 쪼개기도 한다.
3.주석
주석은 코드로 의도를 표현하기 실패한 산물이다.
1)주석은 나쁜 코드를 보완하지 못한다.
2)코드로 의도를 표현하라
4.형식 맞추기
1)형식을 맞추는 목적
코드의 형식은 의사소통의 일환이다.
구현 스타일과 가독성 수준은 유지보수 용이성과 확장성에 영향을 미친다.
2)적절한 행 길이를 유지하라
신문 기사처럼 작성하라. : 첫 문단은 전체 기사 내용을 용한다. 셋한 사실은 숨기고 커다란 그림을 보여준다. 쭉 읽으며 내려가면 세세한 사실이 조금씩 드러난다.
개념은 줄바꿈으로 분리하라.
세로 밀집도 : 줄바꿈이 개념을 분리한다면 세로 밀집도는 연관성을 의미한다. 서로 밀접한 개념은 세로로 가까이 둬야 한다.
3)변수선언
사용하는 위치에 최대한 가까이 선언한다.
우리가 만든 함수는 매우 짧으므로 지역 변수는 각 함수 맨 처음에 선언한다.
다소 긴 한수에서 블록 상단이나 루프 직전에 변수를 선언하는 사례도 있다.
4)인수턴스 변수 : 인스턴스 변수는 클래스 맨 처음에 선언한다.
5)종속함수
한 함수가 다른 함수를 호출한다면 두 함수는 세로로 가까이 배치한다.
또한 가능하다면 호출하는 함수를 호출되는 함수보다 먼저 배치한다.
첫째 함수에서 가장 먼저 호출하는 함수가 바로 아래 정의된다.
다음으로 호출하는 함수는 그 아래에 정의된다.
6)가로길이 : 120자가 넘지 않는 수준
7)가로 공백과 밀집도
연산자 사이 공백, 함수 이름과 이어지는 괄호 사이에는 공백을 넣지 않는다. 인수는 공백으로 분리. 승수 사이에는 공백이 없다.
8)가로정렬 : 선언부에서 클래스 변수명을 정렬하지 않는다.
9)들여쓰기
메서드는 클래스보다 한 수준 들여쓴다.
메서드 코드는 메서드 선언보다 한 수준 들여쓴다.
블록 코드는 블록을 포함하는 코드보다 한 수준 들여쓴다.
5.객체와 자료 구조
변수를 비공개로 정의하는 이유가 있다. 남들이 변수에 의존하지 않게 만들고 싶어서다.
1.자료 추상화
2.자료/객체 비대칭
3.디미터 법칙
4.기차충돌
5.잡종구조
6.자료전달객체
6.오류 처리
1)오류 코드보다 예외를 사용하라
2)Try-Catch-Finally 문부터 작성하라
3)미확인 예외를 사용하라
4)예외에 의미를 제공하라
5)호출자를 고려해 예외 클래스를 정의하라
6)null을 반환하지 마라
7)null을 전달하지 마라
7.클래스
1)클래스는 작아야 한다.
2)단일 책임 원칙(Single Responsibility Principle)
단일 책임 원칙은 클래스나 모듈을 변경할 이유가 하나, 단 하나뿐이어야 한다는 원칙이다.
3)응집도
응집도가 높은 클래스를 선호한다.
응집도가 높다는 말은 클래스에 속한 메서드와 변수가 서로 의존하며 논리적인 단위로 묶인다는 의미기 때문이다.
'함수를 작게, 매개변수 목록을 짧게'라는 전략을 따르다 보면 때때로 몇몇 메서드만이 사용하는 인스턴수 변수가 아주 많아진다.
이는 십중팔구 새로운 크래스로 쪼개야 한다는 신호다.
4)변경하기 쉬운 클래스
'개발 > 개발에 유용한 팁' 카테고리의 다른 글
Regular Expression (0) | 2021.03.07 |
---|---|
Mybatis 쿼리 바인딩 로그 출력 (0) | 2020.08.24 |
MessageBundle DB로 전환 (0) | 2020.08.23 |
Mysql vo 만들기 (0) | 2020.08.15 |
톰캣 재시작 없이 Java 수정 (0) | 2020.08.15 |