-
2022-01-26일 노개북 클린코드Book/Clean Code 2022. 1. 26. 23:54
오늘 읽은 부분 : 3장 함수
작게 만들어라
함수를 작게 작게 만들수록 읽기쉽고 이해하기 쉽다. 중첩 구조가 많아질수록 함수가 점점 커진다. 들여쓰기른 1단이나 2단을 넘기지 말자
한 가지만 해라!
이건 정말 여러번 들었던 말이다. "함수는 한 가지 일만하고, 그 한가지를 잘해야한다."
어떤 작업을 할 때 추상화 수준이 한단계로 쪼개서 수행하기 쉽다.
함수 다 추상화 수준은 하나로!
함수가 확실히 한가지 작업만 하려면 함수 내 모든 문장의 추상화 수준이 동일 해야한다. 추상화 수준이 뒤죽박죽이면 코드를 일는 사람이 헷갈린다. 근본적인 개념인지 세부사항인지 한 눈에 구별하기 어렵기 때문이다.
위에서 아래로 코드 읽기:내려가기 규칙
코드는 위에서 아래로 이야기처럼 읽혀야 좋다.
ex)
- vip회원과 일반회원의 할인 정책을 다르게 적용한다
- vip 회원은 10만원 위 물품은 20%할인을 적용하고, 10만원 아래 물품은 고정적으로 10000원 할인한다
- 10만원 위 물품은 20%할인 구현
- 10만원 아래 물품은 고정적으로 10000원 할인 구현
Switch문
switch 문은 작게 만들기 어렵다. 기본적으로 switch문은 n가지 일을 하기 때문이다. 다형성을 이용하여 저차원 클래스에 각 switch문을 숨기는 방법으로 해결한다. switch문을 완벽히 분리하기는 아직도 어려운것 같다.
서술적인 이름을 사용하라!
함수이름이 조금 길어지더라도 정확히 이 함수가 어떤 일을 하는지 서술식으로 작성하자 그게 더욱 좋은 이름이다. 나만 알고 있는 명명법이 아니라 다른사람도 내 코드를 본다는 생각으로. 또 이름을 붙일때 일관성 있게 표현하자 같은 모듈안에서 같은 문구 명사 동사를 사용하자
함수 인수
함수 인수는 적으면 적을수록 좋다. 3개 이상 넘어가지 말자. 특히 테스트 케이스를 작성할때 인수들이 많아지면 테스트 코드 작성할때 번거롭다. 주어진 인수들을 이용해서 가능성을 모조리 테스트 해야하니..
인수가 2개 이상이 되면 1개로 최대한 줄여보자. 또 공통된 것으로 묶을수 있는지 체크 해보자
부수 효과를 일으키지 마라!
함수에서 한 가지를 하겠다고 약속하고선 남몰래 다른짓도 한다=>해야하는 기능 만이 아니라 외부상태를 변경시킴(예상치 못한 클래스 변수를 수정한다거나 전역변수를 수정한다고나 등등) 시간적인 결함 뿐만이 아니라 순서 조속성을 초래한다.
명령과 조회를 분리하라!
함수는 뭔가를 수행하거나 뭔가에 답하거나 둘 중 하나만 해야 한다. 객체 상태를 변경하거나 객체 정보를 반환하거나 둘 중 하나만 수행 해야한다.
오류 코드보다 예외를 사용하라!
명령 함수에서 오류코드를 반환하는 방식은 명령 조회 분리하라는 원칙을 조금 위반한다. 종종 저학년때 이런 실수를 했던것 같다. if문으로 오류 체크를 한다거나 이렇게 되면 if문 안에 명령에 대한 반환값을 받고 오류랑 또 비교를 해야하는 여러단계가 중첩되어 일어난다.
반면 예외 처리 코드를 사용하면 코드가 깔끔해지고 쉬워진다.
try/catch블록 뽑아내기
try/catch문은 코드 구조에 혼란을 일으키며, 정상 동작과 오류 처리 동작을 뒤 섞는다. 그래서 try안과 catch문 안에 로직을 별도 함수로 뽑아내서 처리하자. => 오류처리도 한가지 작업이다.
반복하지 마라!
로직을 짜다보면 반복적인 내용이 나온다. 그러면 코드가 길어지고 한번 해당 로직을 수정하면 중복된 로직도 수정해야 하기 때문에 번거로워진다.
처음부터 이 모든 가능성을 체크하면서 개발하기는 힘들것이다. 그래서 나는 일단 기능을 구현하는 서투를 코드를 작성하고 테스트를 해보고 리팩터링을 진행한다.
프로그램을 짠다는 것은 이야기를 풀어나간다라고 생각하자
'Book > Clean Code' 카테고리의 다른 글
2022-01-30일 노개북 클린코드 (0) 2022.02.07 2022-01-28일 노개북 클린코드 (0) 2022.02.07 2022-01-24일 노개북 클린코드 (0) 2022.01.24 2022-01-22일 노개북 클린코드 (0) 2022.01.22 2022-01-21 노개북 클린코드 (0) 2022.01.21 - vip회원과 일반회원의 할인 정책을 다르게 적용한다