클린코드(1/5)

binary_j·2022년 5월 22일
0

우리 모두는 대충 짠 프로그램이 돌아간다는 사실에 안도감을 느끼며 그래도 안 돌아가는 프로그램보다 돌아가는 쓰레기가 좋다고 스스로를 위로한 경험이 있다.

전부터 읽어야겠다고 한 클린코드를 읽기 시작했다.
취준 할 때는 책 내용을 일일히 정리했었는데 이제 그렇게 하는 것은 조금 무리가 있을 것 같아서 우선 학습을 한 후 내가 기록하고 싶은 내용 위주로만 기록을 남기기로 했다.


1장 : 깨끗한 코드

나쁜 코드는 생산성을 떨어트린다.
좋은 코드를 짜는 것은 프로그래머의 역할이다.
좋은 코드란 무엇인가?

  • 한 가지에 집중
  • 크기가 작아야 함
  • 테스트를 통해 검증됨
  • 단순명로하게 작성
  • 다른 사람이 읽었을 때도 바로 이해할 수 있어야함
  • 명쾌해야함
  • 효율적이어야 함(속도, CPU 자원 등등)
  • 중복이 없어야 함
  • 보이스카우트 규칙: 캠프장은 처음 왔을 때보다 더 깨끗하게 해놓고 떠나라 -> 지속적인 개선을 통해 점점 더 깨끗한 코드로

2장 : 의미 있는 이름

  • 의도를 분명하게 밝히는 이름
    -존재 이유
    -수행 기능
    -사용 방법
  • 그릇된 정보를 피해라
    -널리 쓰이는 이름 사용x
    -실제로 그 자료형이 아니라면 이름에 자료형 넣지 말 것 (ex. List가 아니라면 변수 이름에 list를 붙이지 말 것)
    -흡사한 이름 여러개x
  • 의미 있게 구분하라
    -연속된 숫자를 붙이거나 불용어를 붙이는 식으로 이름붙이지 말 것
    -읽는 사람이 명확하게 기능을 구분할 수 있는 이름을 붙일 것(ex. ProductInfo, ProductData 이런식의 이름을 붙여선 안됨)
  • 발음하기 쉬운 이름을 사용할 것
    -앞글자만 따겠다고 genymdhms 이딴 발음할 수 없는 이름 붙이지 말 것
  • 검색하기 쉬운 이름을 사용할 것
    -검색하기 어려운 짧은 이름(ex. int e1)은 로컬 변수에서만 사용
    -범위가 커질수록 이름도 길게 붙이는 것이 검색할 때 빠르고 쉬움
  • 인코딩을 피하라
  • 자신의 기억력을 자랑하지 마라
    -읽는 사람이 계속해서 머릿속으로 변수 이름을 생각하고 사용해야 한다면 나쁜 코드임 (ex. a, b가 이미 있으니 어떤 변수 이름을 c로 붙임 이런식으로 이름붙이지 말 것)
    -변수 이름은 명료해야 한다.
  • 클래스 이름
    -클래스/객체 이름은 명사나 명사구로 사용
  • 메서드 이름
    -메서드 이름은 동사나 동사구로 사용
    -접근자, 변경자, 조건자는 표준에 따라 get, set, is 접두사로 붙임
  • 기발한 이름을 사용하지 말 것
    -변수 이름으로 특정 문화권에서만 이해할 수 있는 농담같은거 붙이지 말 것
  • 한 개념에 한 단어
    -추상적인 개념 하나에 단어 하나를 선택하고 이를 유지할 것 (ex. 날짜를 가져오는 메서드를 getDate()라고 하기로 했으면 다른 모든 클래스에서도 날짜를 가져오는 메서드를 선언할 때 getDate()라고 이름 붙일 것)
  • 해법 영역에서 가져온 이름 사용
    -컴퓨터 공학에서 사용되는 용어로 이름 붙이기
  • 문제 영역에서 가져온 이름 사용
    -적절한 프로그래머 용어가 없다면 문제 영역에서 이름 가져오기
  • 의미 있는 맥락 추가
  • 불필요한 맥락은 없애라

3장 : 함수

  • 작게 만들어라
    -함수는 작을수록 좋다
  • 함수는 한가지만 해야한다
    -추상화 수준이 하나인 단계만 수행
    -함수 내에서 의미 있는 또 다른 함수를 추출해낼 수 있다면 그 함수는 여러가지를 하는 것이므로 축소 필요
  • 함수 당 추상화 수준은 하나로
    -내려가기 규칙: 함수들은 위에서 아래로 내려가듯이 읽혀야 함, 추상화 수준이 한 번에 한 단계씩 낮아지도록 설계하기
  • Switch 문
    -추상 팩토리로 숨기기.. 되도록 사용x
  • 서술적인 이름 사용
    -길고 서술적인 이름이 짧고 어려운 이름보다 좋다
    -이름은 일관성 있게 붙이기
  • 함수 인수
    -적을수록 좋다
    -인수가 없는 것이 최선이며 차선은 인수가 한 개인 것, 인수 4개 이상은 사용하지 말 것
    -많이 쓰는 단항 형식: 인수에 질문을 넘기는 경우, 인수를 변환해 결과를 반환하는 경우, 이벤트를 사용하는 경우
    -플래그 인수: 사용하지 말 것
    -이항 이상의 함수: 가능하면 단항 함수로 바꾸도록 노력해야 함, (x,y)좌표처럼 자연스럽고 납득 가능한 순서가 있는 경우에만 사용
    -인수 객체: 인수 여러개를 객체로 묶기(ex. double x, double y -> Point center 이런식으로)
    -인수 목록: 가변 인수도 마찬가지
    -동사와 키워드 사용
  • 부수 효과를 일으키지 마라
    -함수 내에서 함수 이름에 명시되지 않은 다른 동작을 하지 말 것
    -차라리 함수 내에서 일어나는 동작이 모두 표현되도록 이름을 아주 길게 붙이거나 함수를 조각조각 분해해서 여러개로 만드는 게 낫다
  • 명령과 조회 분리
  • 오류 코드보다 예외 사용
  • try/catch블록 -> 복잡하고 추한 코드, 별도 함수로 뽑아낼 것
    -함수는 한 가지 일만 해야함 -> 오류도 하나의 작업임
  • 반복 없애기
  • 구조적 프로그래밍: goto 절대 절대 절대 사용하지 말 것
  • 다듬고, 함수를 만들고, 이름을 변경하고, 중복을 제거하고, 메서드를 줄이고 순서를 바꾸고, 클래스를 쪼개며 계속해서 변경해 나가기(단위 테스트는 항상 통과해야 한다)

0개의 댓글