독서/클린코드

[클린코드] 2022-02-22 TIL

콘요맘떼 2022. 2. 22. 02:12

TIL (Today I Learned)

2022.02.22

 

오늘 읽은 범위

3장. 함수

 

책에서 기억하고 싶은 내용을 써보세요.

  • if 문/else 문/while 문 등에 들어가는 블록은 한 줄이어야 한다는 의미다. 대개 거기서 함수를 호출한다. 함수에서 들여쓰기 수준은 1단이나 2단을 넘어서면 안 된다. 그래야 함수는 읽고 이해하기 쉬워진다. (p.44)
  • 단순히 다른 표현이 아니라 의미 있는 이름으로 다른 함수를 추출할 수 있다면 그 함수는 여러 작업을 하는 셈이다. (p.45)
  • 함수가 확시히 '한 가지' 작업만 하려면 함수 내 모든 문장의 추상화 수준이 동일해야 한다. (p.45)
  • 함수에서 이상적인 인수 개수는 0개(무항)다. 다음은 1개(단항)고, 다음은 가능한 피하는 편이 좋다. 4개 이상(다항)은 특별한 이유가 필요하다. 특별한 이유가 있어도 사용하면 안 된다. (p.50)
  • 함수에 인수 1개를 넘기는 이유 중 가장 흔한 하나는 인수에 질문을 던지는 질문을 던지는 경우이고 또 다른 하나는 인수를 뭔가로 변환해 결과를 반환하는 경우이다. 드물지만 입력 인수로 시스템 상태를 바꾸는 이벤트 함수도 존재한다. 변환 함수를 사용할 때는 void 반환 형태보다 변환 결과를 반환하는 형태의 함수가 보다 바람직하다. (p.51)
  • 플래그 인수를 사용하는 것보다는 각각의 기능을 별도의 함수로 분리하는 것이 바람직하다. (p.52)
  • 함수의 이름에서 표현되지 않은 기능을 수행하는 것은 부수 효과(side effect)이다. 부수 효과는 해당 함수를 사용하는 사람들에게 예상치 못한 시간적 결합이나 순서 종속성을 불러올 수 있다. (p.54)
  • 함수에서 상태를 변경해야 한다면 함수가 속한 객체 상태를 변경하는 방식을 택한다. (p.56)
  • 함수는 무언가를 수행하거나 무슨 정보를 반환하거나 둘 중 하나만을 수행해야 한다. (p.56)
  • try/catch 블록을 각각 별도 함수로 뽑아내면 보다 깔끔한 표현이 가능하다. (try/catch 각각 하나의 함수로 처리) (p.58)
  • 객체지향 프로그래밍은 코드를 부모 클래스로 몰아 중복을 없앤다. (p.60)

 

오늘 읽은 소감은? 떠오르는 생각을 가볍게 적어보세요

  • '함수는 하나의 기능만, 그리고 플래그 인수는 사용하지 않기. 인수는 적을수록 좋다.' 이미 모두가 알고 있는 지식이지만 막상 코드를 작성하다보면 위의 규칙들을 지키는 것들이 참 쉽지가 않다. 중복을 최대한 없애고 싶었으나 정말 사소한 차이 하나씩으로 불필요한 중복이 생겨버리고 데이터를 처리하다 보니 서너개의 인수가 사용되는 경우도 존재한다. 뭐든지 머리로 아는 것과 그것을 할 수 있는 것은 참 다른 것 같다. 책에도 적혀 있듯이 처음부터 완벽한 코드를 짜는 것은 쉬운 일이 아니다. 나 역시도 최근 프로젝트들을 진행할 때에는 우선적으로 기능을 구현한 후 계속적으로 코드를 다듬어가는 과정을 거쳤었다. 앞으로도 조금 더 차분하게, 마음의 여유를 가지고 내 코드들을 바라보는 시간들이 필요할 듯 싶다. 이러한 노력들을 조금씩 할수록 다른 방법으로, 보다 이쁜 코드를 짜는 방법들이 조금씩 보이는 것 같다.

 

궁금한 내용이 있거나, 잘 이해되지 않는 내용이 있다면 적어보세요.

  • 플래그 인수(p.52) : 인자값에 따라 함수가 다른 연산을 수행하도록 하는 함수 인자의 한 종류.
  • 시간적 결합(temporal coupling, p.55) : 시간적 개념이 포함된 시스템 혹은 프로그램의 요소들 간 종속성을 뜻한다. 다양한 자료 구조, 디자인 패턴, 툴킷, 비동기 프로그램 등이 이러한 문제점을 극복하기 위해 등장하였다. 시간적 결합은 성능적 이슈와 밀접한 연관을 지니는데 현대의 분산 시스템의 등장과 함께 다시 주목을 받게 되었다.
  • 단일 입/출구 규칙(single entry-exit rule, p.61) - 함수가 무조건 특정 지역에서 시작하고 특정 지역(함수의 끝)에서 종료해야 한다는 규칙이다. 함수의 길이가 길어질수록 함수 종료 위치가 다양할 때 그 로직을 파악하는 것이 어렵기 때문에 해당 규칙의 효과가 극대화된다.
  • 도메인 특화 언어(DSL - Domain Specific Language, p.62) : 특정 도메인을 적용하는 데 특화된 컴퓨터 언어이다. 어느 도메인에나 적용될 수 있는 범용 언어(General Purpose Language)와 반대되는 개념이다. 대표적인 예시로 웹페이지에서 활용되는 HTML이 있다. DSL을 이용하면 관련된 소프트웨어 개발의 특정 부분에서 런타임 오버헤드를 제거하는 등 보다 효율적인 작업이 가능해진다. 

'독서 > 클린코드' 카테고리의 다른 글

[클린코드] 2022-03-01 TIL  (0) 2022.03.02
[클린코드] 2022-02-28 TIL  (0) 2022.03.01
[클린코드] 2022-02-25 TIL  (0) 2022.02.26
[클린코드] 2022-02-21 TIL  (0) 2022.02.21
[클린코드] 2022-02-20 TIL  (0) 2022.02.20