2022.02.22
3장. 함수
지금까지 경험을 바탕으로 그리고 오랜 시행착오를 바탕으로 나는 작은 함수가 좋다고 확신한다. (p.43)
함수는 한 가지를 해야 한다. 그 한 가지를 잘 해야 한다. 그 한 가지만을 해야 한다. (p.44)
코드는 위에서 아래로 이야기처럼 읽혀야 좋다. (추상화 수준이 갈수록 낮아져야 한다.) (p.46)
길고 서술적인 이름이 짧고 어려운 이름보다 좋다. (p.49)
함수에서 이상적인 인수 개수는 0개다. 다음은 1개고, 다음은 2개다. 3개는 가능한 피하는 편이 좋다. 4개 이상은 특별한 이유가 필요하다. 특별한 이유가 있어도 사용하면 안된다. (p.50)
부수 효과는 거짓말이다. 함수에서 한 가지를 하겠다고 약속하고선 남몰래 다른짓도 하니까. (p.54)
함수는 '한 가지' 작업만 해야 한다. 오류 처리도 '한 가지' 작업에 속한다. 그러므로 오류를 처리하는 함수는 오류만 처리해야 마땅하다. (p.59)
어쩌면 중복은 소프트웨어에서 모든 악의 근원이다. (p.60)
(좋은 함수는) 처음부터 탁 짜내지지 않는다. 그게 가능한 사람은 없으리라. (p.62)
이때까지 내가 짜는 함수들은 모두 읽기 쉽고 이해하기 쉬워 '좋은 함수' 라는 착각에 빠져 있었다는 것을 깨달았다. 내가 짜는 함수들은 모두 여러가지 일들을 하고 있었고 한 가지를 잘 하지 못했다.
중복을 최대한 없애려고 하면서도 모든 코드에 복사 붙여넣기를 하고 있는 내 모습을 보고 많은 반성을 하게 되었다.
이때까지 코드를 한 번 짜고 나서 짠 코드를 다시 고치는 일이 잘 없었는데 얼마나 무지한 일이였는지 새삼 깨닫게 됬다. 리팩토링은 중요하다!
함수가 얼마나 작아야 하는지 잘 몰랐었는데 이 책에 나오는 예제를 보고 알게 되었다. 함수는 "더 이상은 도저히 줄일 수 없다." 라는 생각이 들 때까지 작게 만들어야 한다.
TO 문단: LOGO 언어에서 사용하는 키워드 'TO'는 루비나 파이썬에서 사용하는 'def'와 같다. LOGO에서 모든 함수는 키워드 'TO'로 시작한다. 이는 함수를 설계하는 방식에 흥미로운 영향을 미쳤다.
다형성: 다형성(polymorphism)이란 하나의 객체가 여러 가지 타입을 가질 수 있는 것을 의미합니다
SRP (단일 책임 원칙): 단일 책임 원칙이란 모든 클래스는 하나의 책임만 가지며, 클래스는 그 책임을 완전히 캡슐화해야 함을 일컫는다.
OCP: 개방-폐쇄 원칙(OCP, Open-Closed Principle)은 '소프트웨어 개체(클래스, 모듈, 함수 등등)는 확장에 대해 열려 있어야 하고, 수정에 대해서는 닫혀 있어야 한다'는 프로그래밍 원칙이다.