오늘 내가 한 일 - TIL

노개북 클린코드(clean code) 2022.02.22 ~ 23

바구레 2022. 2. 23. 19:18

오늘 읽은 범위

3장. 함수

 

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

  • 작게 만들어라
    • 블로과 들여쓰기 : if문 / else문 / while 문 등에 들어가는 블록은 한 줄이어야 한다. 중첩 구조가 생길만큼 함수가 커져서는 안 된다.
  • 한 가지만 해라 : 함수는 한 가지를 해야 한다. 그 한 가지를 잘 해야 한다. 그 한 가지만을 해야 한다. 지정된 함수 이름 아래에서 추상화 수준이 하나인 단계만 수행한다면 그 함수는 한 가지 작업만 한다.
  • 함수 당 추상화 수준은 하나로
    • 위에서 아래로 코드 읽기: 내려가기 규칙. TO문단을 읽듯이 프로그램이 읽혀야 한다는 의미이다. 
  • 서술적인 이름을 사용하라 : 길고 서술적인 이름이 길고 서술적인 주석보다 좋다. 이름을 붙일 때는 일관성이 있어야 한다. 모듈 내에서 함수 이름은 같은 문구, 명사, 동사를 사용한다. 
  • 함수 인수 : 함수에서 이상적인 인수 개수는 0개(무항)이다. 다음은 1개(단항)고, 다음은 2개(이항)다. 3개(삼항)는 가능한 피하는 편이 좋다. 4개 이상(다항)은 특별한 이유가 필요하다. 특별한 이유가 있어도 사용하면 안 된다.
  • 부수 효과를 일으키지 마라
  • 명령과 조회를 분리하라 : 함수는 뭔가를 수행하거나 뭔가에 답하거나 둘 중 하나만 해야 한다. 
  • 오류 코드보다 예외를 사용하라
  • 반복하지 마라 : 중복은 문제다. 코드 길이가 늘어날 뿐 아니라 알고리즘이 변하면 여러 곳을 손봐야 한다. 어느 한곳이라도 빠뜨리면 오류가 발생할 확률도 늘어난다. 중복은 소프트웨어에서 모든 악의 근원이다.
  • 구조적 프로그래밍 : 모든 함수와 함수 내 모든 블록에 입구와 출구가 하나만 존재해야 한다. 즉 함수는 return 문이 하나여야 한다. 

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

아주 예전에 슬라이드를 만들어보겠다며 함수를 '하나' 만들었다. 슬라이드가 자동으로 움직이는 동작, 슬라이드가 추가되고 제거되는 동작, 멈추기, 좌우로 이동하기 등... 이걸 하나의 함수 안에서 셀수 없는 깊이의 if 문을 사용해서 작업했었다. 그러다보니 하나를 고칠 때마다 연쇄적인 오류가 발생해 결국엔 작업에서 손을 놓게 만들어 버렸다.

 

노마드 코더에서 처음 클론 강의를 들었을 때(크롬 웹 만들기) 동작 하나마다 함수를 하나씩 만드는 것을 보고 놀랐던 기억이 난다. 함수 하나에 이 동작과 저 동작을 넣으면 더 편한게 아닌가? 생각했었다. 하지만 강의를 따라 갈수록 함수 하나에 하나의 동작을 담고, 또 그에 어울리는 이름을 짓고나니 함수의 이름만 봐도 어떤 역할을 하는지 알 수 있었고 여러 곳에서 같은 동작을 수행해야할 때 함수를 사용할 수 있다는 점에서 감탄했던 기억이 있다. 

 

책에 작성된 예시코드가 자바코드로 되어있어 100% 정확한 이해를 하지는 못했지만 과거의 경험을 토대로 책을 읽었을 때 나의 실수가 떠오르면서 책의 내용이 이해가 되었다. 

함수는 작게, 한가지 동작을, 서술적인 이름을 지어서... 이 세가지만이라도 제대로 알고 간다면 지금보다 더 좋은 코드를 만들 수 있을 것 같다. 

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

  • 책의 예시 코드가 자바로 작성되어있다보니 코드를 읽으며 이해하는데 어려움이 있었다. 내용이 많이 어려웠는데, 깊이 이해하기 보다는 이러한 내용이 있구나 정도로 이해하려고 한다. (딥하게 들어가면 못따라갈 것 같다.)
  • 다형성 polymorphism : 프로그래밍 언어의 자료형 체계의 성질을 나타내는 것으로, 프로그램 언어의 각 요소들(상수, 변수, 식, 오브젝트, 함수, 메소드 등)이 다양한 자료형(type)에 속하는 것이 허가되는 성질을 가리킨다. 
  • 단일 책임 원칙 single responsibility principle : 객체 지향 프로그래밍에서 모든 클래스는 하나의 책임만 가지며, 클래스는 그 책임을 완전히 캡슐화해야 함을 일컫는다. 
  • 개방-폐쇄 원칙 open closed principle : 소프트웨어 개체(클래스, 모듈, 함수 등)는 확장에 대해 열려 있어야 하고, 수정에 대해서는 닫혀 있어야 한다는 프로그래밍 원칙
  • 추상화 수준 : https://sosimhan-dev.tistory.com/4  (이 분의 블로그 글을 보고 완벽하지는 않지만 책에서 어떤 말을 하고 싶었던 것인지 이해가 되었다.)
 

[CleanCode] 함수의 추상화 수준이란?

 오랜만에 CleanCode를 다시 읽어보고 있는데 함수의 추상화 수준에서 책 읽기를 멈추고 3번 다시 읽었다. 아무래도 책의 추상화 수준이 높은 단계 였던 것 같다. "메서드는 한 가지만 해라!"라는

sosimhan-dev.tistory.com

 


출처 https://ko.wikipedia.org/

 

위키백과, 우리 모두의 백과사전

위키백과:대문 위키백과, 우리 모두의 백과사전. 위키백과 우리 모두가 만들어가는 자유 백과사전문서 577,427개와 최근 기여자 2,255명 사랑방 다른 분들과 의견을 교환해봐요! 질문방 지침으로

ko.wikipedia.org