Clean Code

diense_kk·2023년 7월 26일
0

Developer

목록 보기
1/8

클린 코드(Clean Code)란

  • 제 3자가 읽기 쉽고 고치기 쉬운 코드 즉, 유지보수가 쉬운 코드
  • 테스트 케이스가 있는 코드
  • 한가지에 집중하는 코드

특히 여기서 가장 중요하게 생각하느 부분은 제 3자가 읽기 쉽고 고치기 쉬운 코드라고 행각하는데, 코드는 그것을 구현한 사람만이 사용 하는 것이 아닌 다른 사람이 코드를 이어받아 유지 보수하는 경우가 많기 때문에 제 3자가 읽기 쉽고 고치기 쉬운 코드가 가장 중요하다고 생각된다.

그럼 클린 코드를 작성하는 방법을 알아보자

1. 의미 있는 이름

의미 있는 이름을 짓는 것은 human readable하게 코드를 작성하는 것과 직결되는 문제이기 때문에 더 신경 써야 하는 부분이다.

의미 있는 이름을 정하는 방법은 다음과 같다.

1. 의도를 분명히 밝히기

이름이 함수 혹은 변수의 존재 이유, 수행하는 기능, 사용 방법을 대변해야한다.

주석이 없더라도 그 함수 혹은 변수가 어떤 역할인지 알아 볼 수 있어야 된다.

2.함수의 이름은 동사를 넣기

예를 들어 기타를 치는 기능을 수행하는 함수라면 함수의 이름은 playGuitar처럼 동사를 넣어 어떤 역할을 수행하는지 명시 하는 것이 좋다.

3.검색하기 쉬운 단어를 사용하기

긴 단어보다는 짧은 단어가 좋으며 검색하기 쉬운 이름으로 사용 하는 것이 좋다.

함수

'함수는 하나의 일만 해야 한다' 이것은 아마 많은 사람들이 들어봤을 내용이다

내가 코드를 작성할 때 늘 신경 쓰면서 작성하고자 하는 부분도 이런 부분이다. 쪼갤 수 있을 때까지 쪼개면 과유불급 같고, 함수가 너무 커지게 되기 때문이다.
그렇다면 클린 코드를 위해 함수를 어떻게 작성해야될까?

1. 작게 만들기

함수 안의 줄 수는 적을수록 좋다.

들여 쓰기 레벨도 최대 2단까지만 있는 것이 가장 바람직하다.

2. 한 가지의 일만 하기

한 가지 일을 하는 함수들과 그 함수들을 호출하는 함수 하나로 이루어져 있어야 한다

의미 있는 이름으로 함수를 추출할 수 있다면 한 가지의 일만 하고 있는 것이다.

3. 함수 당 추상화 수준은 동일하게 하기

코드는 위에서 아래로 읽혀야 한다.

4. 함수 파라미터 최대한 적게 쓰기

가장 좋은 경우는 인수가 없는 것, 다음에는 단항 함수(파라미터가 1개)이다.

입력값이 있는 변환 함수는 반환 값이 있는 것이 좋다.

파라미터가 많이 필요하다면 object 형태로 key value를 지정하여 알아보기 쉽게 만드는 것 또한 권장한다.

또한 파라미터로 boolean값을 넘기지 않는것이 좋다 boolean값을 넘긴다면 함수 내부에 if else문이 있을 확률이 높다 그것보다는 True일때와 False일때 서로 다른 함수를 호출하도록 2개의 함수로 분리 하는 것이 낫다.

5. 명령과 조회 분리하기

함수는 무언가를 수행하거나 답하거나 둘 중 하나만 해야 한다.

주석

해당 장을 한 줄로 요약하면 '주석은 가능한 적은 게 좋다. 주석이 필요 없는 코드를 만들어야 한다.'
주석이 많은 코드를 본적이 있는 사람들은 아마 공감 할 것이다. 아무리 VSCode에서 주석과 코드의 색을 다르게 하더라도 주석이 굉장히 많다면 어디가 코드인지 정확히 보기도 어렵다.

주석은 나쁜 코드를 보완하지 못한다. 복잡하고 어수선하며 주석이 많이 달린 코드를 만드는 것보단 표현력이 풍부하고 깔끔한 코드를 만드는데 집중해야 한다.
때문에 의미 있는 이름을 붙이는 것이 굉장히 중요하다.

좋은 주석

코드로 표현하지 못하는 정보를 제공하는 주석
의도를 설명하는 주석
결과를 경고하는 주석
중요성을 강조하는 주석

나쁜 주석

코드로 설명할 수 있는데, 코드를 설명하는 주석
주석으로 처리한 코드
이력을 기록하는 주석

단위 테스트

테스트 코드만 봐도 실제 코드가 이해 갈 수 있게 작성하라

TDD로 개발해보자

실패하는 단위 테스트를 작성할 때까지 실제 코드를 작성하지 않는다.

컴파일은 실패하지 않으면서 실행이 실패하는 정도로만 단위 테스트를 작성한다.

현재 실패하는 테스트를 통과할 정도로만 실제 코드를 작성한다.

테스트는 유연성, 유지 보수성, 재사용성을 제공한다.

테스트는 실제 코드보다 더 가독성이 중요하다.

F.I.R.S.T

Fast : 테스트는 빨리 돌아가야 한다.
Independent : 테스트는 서로 의존하면 안 된다. 한 테스트가 다음 테스트의 실행을 준비해서도 안 된다.
Repeatable : 테스트는 어떤 환경에서도 반복 가능해야 한다. (네트워크가 없어도 돌아가야 한다.)
Self-Validating : 결괏값은 boolean 이여야 한다. (성공/실패)
Timely : 실제 코드 구현 전에 작성해야 한다.

또한 코드를 작성시에 처음부터 클린 코드로 작성 하지 말고 기능을 구현 한 이후 클린 코드로 보수 하는편이 좋다.
단, 코드 작성시에도 의미 있는 이름을 붙이는 것은 중요하다.

1개의 댓글

comment-user-thumbnail
2023년 7월 26일

잘 읽었습니다. 좋은 정보 감사드립니다.

답글 달기