TIL (DAY 5)
🔖 오늘 읽은 범위: 3장, 함수
책에서 기억하고 싶은 내용
- 함수를 만드는 첫째 규칙은 '작게!'다. 함수를 만드는 둘째 규칙은 '더 작게!'다. (p42)
- if 문 / else 문 / while 문 등에 들어가는 블록은 한 줄이어야 한다는 의미다. ... 그러므로 함수에서 들여쓰기 수준은 1단이나 2단을 넘어서면 안 된다. 당연한 말이지만, 그래야 함수는 읽고 이해하기 쉬워진다. (p44)
- 함수는 한 가지를 해야 한다. 그 한 가지를 잘 해야 한다. 그 한 가지만을 해야 한다. (p44)
- 단순히 다른 표현이 아니라 의미 있는 이름으로 다른 함수를 추출할 수 있다면 그 함수는 여러 작업을 하는 셈이다. (p45)
- 함수가 확실히 '한 가지' 작업만 하려면 함수 내 모든 문장의 추상화 수준이 동일해야 한다. (p45)
- 코드는 위에서 아래로 이야기처럼 읽혀야 좋다. ... 즉, 위에서 아래로 프로그램을 읽으면 함수 추상화 수준이 한 번에 한 단계씩 낮아진다. (p46)
- 길고 서술적인 이름이 길고 서술적인 주석보다 좋다. (p49)
- 모듈 내에서 함수 이름은 같은 문구, 명사, 동사를 사용한다. includeSetupAndTeardownPages, includeSetupPages, includeSuiteSetupPage, includeSetupPage 등이 좋은 예다. (p50)
- 최선은 입력 인수가 없는 경우이며, 차선은 입력 인수가 1개뿐인 경우다. SetupTeardownIncluder.render(pageData)는 이해하기 아주 쉽다. pageData 객체 내용을 랜더링하겠다는 뜻이다. (p51)
- 단항 형식 (p 51)
- 인수에 질문을 던지는 경우. boolean fileExists("MyFile")
- 인수를 뭔가로 변환해 결과를 반환하는 경우. InputStream fileOpen("MyFile")
- 이벤트. 이벤트 함수는 입력 인수만 있고, 출력 인수는 없음. 프로그램은 함수 호출을 이벤트로 해석해 입력 인수로 시스템 상태를 바꾼다.
- 함수로 bool 값을 넘기는 관례는 정말로 끔찍하다. ... 함수가 한꺼번에 여러 가지를 처리한다고 대놓고 공표하는 셈이니까! (p52) -- switch 함수를 떠올릴 것!
- 인수가 2-3개 필요하다면 일부를 독자적인 클래스 변수로 선언할 가능성을 짚어 본다. (p53)
- 부수 효과를 일으키지 마라! ... 함수에서 한 가지를 하겠다고 약속하고선 남몰래 다른 짓도 하니까. (p55)
- 명령과 조회를 분리하라! ... 객체 상태를 변경하거나 아니면 객체 정보를 반환하거나 둘 중 하나다. (p56)
- 오류 코드 대신 예외를 사용하면 오류 처리 코드가 원래 코드에서 분리되므로 코드가 깔끔해진다. (p58)
- 정상 동작과 오류 처리 동작을 분리하면 코드를 이해하고 수정하기 쉬워진다. (p59)
오늘 읽은 소감 및 생각
- switch 문을 추상 팩토리(abstract factory)에 숨겨 동일한 유형의 함수가 반복되지 않게 한다는 점을 배울 수 있었는데, 이 지점이 바로 추상 팩토리의 주된 역할을 설명해주는 것 같다. 그냥 개념만 가지곤 이해하기 힘들었는데 이렇게 사용법을 알고 나니 조금씩 이해가 되고 있다.
- Argument, 즉 인수를 여러 개 쓰는 것이 나쁜 코드라고 생각해보질 못했다. '좋은' 이름을 가진 인수라면 충분히 쓸만하다 생각해 마구잡이로 인수를 4개, 5개씩 썼던 코드들이 생각나 괴로웠다. 그 코드를 읽는 사람은 얼마나 괴로웠을까 😅 인수가 1개가 넘어간다면, 그건 여러 개의 함수로 나눠서 작성할 수 있는 함수라는 점을 항상 기억해야겠다.
궁금한 내용이나 새로 알게 된 개념
- TO 문단
: LOGO 언어에서 사용하는 키워드 'TO'는 루비나 파이썬에서 사용하는 'def'와 똑같다. LOGO에서 모든 함수는 키워드 'TO'로 시작한다. 이는 함수를 설계하는 방식에 흥미로운 영향을 미쳤다. (출처: <Clean Code>, p45) - SRP (Single Responsibility Principle)
: 객체 지향 프로그래밍에서 단일 책임 원칙(SRP)이란 모든 클래스는 하나의 책임만 가지며, 클래스는 그 책임을 완전히 캡슐화해야 함을 일컫는다. (출처) - OCP (Open Closed Principle)
: 기존의 코드를 변경하지 않으면서 기능을 추가할 수 있도록 설계가 되어야 한다. (출처) - 이벤트 함수
컴퓨팅에서 이벤트(event)란 프로그램에 의해 감지되고 처리될 수 있는 동작이나 사건을 말한다. (출처) - 도메인 특화 언어 (Domain Specific Language, DSL)
: 특정한 도메인을 적용하는데 특화된 컴퓨터 언어. (출처)
'✍️ 글쓰기 > 📕 읽고' 카테고리의 다른 글
#노마드북클럽 | 클린 코드 (Clean Code) 8일차 (0) | 2022.02.28 |
---|---|
#노마드북클럽 | 클린 코드 (Clean Code) 6일차 (0) | 2022.02.25 |
#노마드북클럽 | 클린 코드 (Clean Code) 4일차 (0) | 2022.02.21 |
#노마드북클럽 | 클린 코드 (Clean Code) 3일차 (0) | 2022.02.20 |
#노마드북클럽 | 클린 코드 (Clean Code) 2일차 (0) | 2022.02.19 |
댓글