티스토리 뷰
TIL (Today I Learned)
2024.01.29 - 2024.01.30
오늘 읽은 범위
-
- 함수
기억하고 싶은 내용
3. 함수
작게 만들어라
함수를 만드는 첫째 규칙은 작게다
함수를 만드는 둘째 규칙은 더 작게다
얼마나 작게? 최대한 작게
블록과 들여쓰기
if / else / while 문 등에 들어가는 블록은 한 줄이어야 한다.
한 가지만 해라!
함수는 한 가지를 해야 한다. 그 한 가지를 잘 해야 한다.그 한 가지만을 해야 한다.
함수가 한 가지만 하는지 판단하는 방법이 하나 더 있다. 단순히 다른 표현이 아니라 의미 있는 이름으로 다른 함수를 추출할 수 있다면 그 함수는 여러 작업을 하는 셈이다.
함수 당 추상화 수준을 하나로!
함수가 확실히 한 가지 작업만 하려면 함수 내 모든 문장의 추상화 수준이 동일 해야 한다.
위에서 아래로 코드 읽기: 내려가기 규칙
코드는 위에서 아래로 이야기처럼 읽혀야 좋다.
즉, 위에서 아래로 프로그램을 읽으면 함수 추상화 수준이 한 번에 한 단계씩 낮아진다.
이것이 내려가기 규칙이다.
Switch 문
switch 문을 줄이는 것은 매우 어렵다.
case를 통해서 함수를 다르게 실행하는게 아니라 다형성 객체를 생성하면 요히려 많은 코드 수를 줄일 수 있다.
서술적인 이름을 사용하라!
코드를 읽으면서 짐작했던 기능을 각 루틴이 그대로 수행한다면 깨끗한 코드라 불러도 되겠다.
이름이 길어도 괜찮다. 이해하는데 많은 시간을 줄여줄 것이다.
함수 인수
이상적인 인수의 개수는 0개다.
함수의 인수가 많으면 이해하는데도 시간이 걸린다.
많이 쓰이는 단항 형식
단항 형식은 하나의 인수에 질문을 던지는 경우(fileExist("file")
)나 인수를 뭔가로 변환하는 경우(fileOpen("file")
) 보통 두 가지 경우이다. + 이벤트
이 경우가 아니면 단항 형식은 피하자.
변환 함수는 입력 출력 타입을 동일하게 해주는 것이 좋다.
플래그 인수
bool 값을 인수로 넘기는 것은 지양하자.
이항/삼항/... 함수
항을 최대한 줄이고자 노력하자.
인수 객체
객체를 이용해서 인수를 줄이는 것은 좋은 방법이다.
인수 목록
format
함수 처럼 인수 개수가 가변적인 것은 이항 함수와 동일하다.
이를 넘기는 것은 하지말자.
동사와 키워드
순서와 의도를 제대로 표현하는 함수 이름이 필요하다. 키워드를 통해서 인수의 순서를 넣으면 더 좋다.
부수 효과를 일으키지 마라!
함수 내부에서 다른 동작을 하는 경우 곤란한 일이 발생할 수도 있다.
예를 들어 checkPassword
함수에 initializeSession
을 하는 기능이 있으면 부작용이 발생할 수도 있다.
이 경우에는 함수이름을 checkPasswordAndInitializeSession
이라고 하는 것이 좋지만, 한 가지만 해야한다는 사실을 명심하자.
출력 인수
출력 인수는 최대한 사용을 지양해라.addFooter(buffer)
의 경우 buffer
에 footer
를 추가하는 함수라고 하면 buffer.addFooter()
로 구현하는 것이 더 좋다.
명령과 조회를 분리하라!
함수는 수행하거나 답하거나 둘 중에 하나만 해야지 둘 다 하면 안된다.
오류 코드보다 예외를 사용해라!
출력 값으로 오류 코드를 사용하는 것보다 예외를 사용하면 코드가 더 깔끔해진다.
Try/Catch 블록 뽑아내기
다른 코드에서 throw
를 하고 그 함수들을 감싸서 예외 처리하는 함수는 따로 만들면 이해하기 쉬워진다.
오류 처리도 한 가지 작업이다
위에 얘기한 것 처럼 오류 처리하는 함수가 하나 따로 있으면 더 좋다.
Error.java 의존성 자석
오류 코드를 반환한다는 것은 어디선가 오류코드를 정의하고 있다는 뜻이다.
이 경우 오류 코드가 변경되면 해당 오류 코드를 참조하고 있는 모든 코드를 재컴파일해야한다.
예외 처리하는 것이 여러모로 이득이다.
반복하지 마라!
중복은 소프트웨어에어서 모든 악의 근원이다.
구조적 프로그래밍, AOP, COP 모두 중복을 피하기 위해 만들어진 것이다.
구조적 프로그래밍
함수를 만들때는 입구와 출구가 하나여야 해서 goto
, break
, continue
를 지양해야 한다. 하지만 함수를 작게 만들면 중간 return
이나 break
, continue
가 있어도 이해하기가 쉽다.
함수를 어떻게 짜죠?
소프트웨어를 짜는 것은 글짓기와 비슷해 생각한 후 기록하는 것이 바람직하다. 그리고 고치고 다듬는다.
결론
진짜 목표는 시스템이라는 이야기를 풀어 가는 데에 있다.
오늘 읽은 소감
변수 만큼이나 시간을 많이 쏟는 부분인데 이 때까지 얼마나 신경을 쓰지 않았는지 글을 읽으면서 많이 느꼈다. 당연한 것 같지만 간과하고 있었던 부분이 꽤나 있었다는 생각이 들었다. 이야기를 잘 풀어나가고 싶다.
궁금한 것
함수의 길이를 극한으로 줄이다보면 결국에는 의미 없이 줄이는 부분도 있을거고 함수 개수가 많아져 오히려 이해하는 데 방해가 되는 요소가 될 수 있지 않을까?
오늘 읽은 다른 사람의 TIL
'개발 > 노개북' 카테고리의 다른 글
2. 노개북 [CleanCode 2일차] (0) | 2024.01.28 |
---|---|
1. 노개북 [CleanCode 1일차] (1) | 2024.01.27 |
0. 노개북 CleanCode 인증 (1) | 2024.01.26 |