Community

개발자 99% 커뮤니티에서 수다 떨어요!

← Go back
TIL(22.02.23)_3장 함수
#clean_code
2년 전
441

TIL (Today I Learned)

22.02.23

오늘 읽은 범위

3장 함수

📖 기억하고 싶은 내용

  • p.42 작게 만들어라! 함수를 만드는 첫째 규칙은 ‘작게!’다. 함수를 만드는 둘째 규칙은 ‘더 작게!’다.

  • p.43 블록과 들여쓰기 : if/else문 ,while문 등에 들어가는 블록은 한 줄이어야 한다는 의미다. (...) 이 말은 중첩 구조가 생길만큼 함수가 커져서는 안 된다는 뜻이다.

  • p.44 한 가지만 해라! 함수는 한 가지를 해야한다. 그 한 가지를 잘 해야 한다. 그 한 가지만을 해야한다.

  • p.49~50 서술적인 이름을 사용하라!

    • 이름이 길어도 괜찮다. 길고 서술적인 이름이 짧고 어려운 이름보다 좋다. (...) 이름을 정하느라 시간을 들여도 괜찮다.

    • 이름을 붙일 때는 일관성이 있어야 한다. 모듈 내에서 함수 이름은 같은 문구, 명사,동사를 사용한다.

  • p.54 함수인수 : 단항 함수는 함수와 인수가 동사/명사 쌍을 이뤄야한다. 예를 들어 write(name)는 곧바로 이해한다. (...) 함수 이름이 키워드를 추가하는 형식이다. 예를 들어, assertEquals 보다 assertExpectedEqualsAcutal(expected,actual)이 더 좋다. 그러면 인수 순서를 기억할 필요가 없어진다.

  • p.60 반복하지마라! : 어쩌면 중복은 소프트웨어에서 모든 악의 근원이다.

  • p.61 소프트웨어를 짜는 행위는 여느 글짓기와 비슷하다. 논문이나 기사를 작성할 때는 먼저 생각을 기록한 후 읽기 좋게 다듬는다.

  • p.62 진짜 목표는 시스템이라는 이야기를 풀어가는 데 있다는 사실을 명심하기 바란다.

✍️ 읽은 소감

  • ‘작게 쪼개야한다.’ < 작게 나눈다는 점에서 리액트가 생각나 아! 싶었던 부분.

  • 1장에서 이름에 대해 읽은 후, 작업시 최대한 확실하게 지으려고 하다보니 이름이 길어져서 이게 맞는 건가 고민을 했는데 이번 장에서 그 고민에 대한 답을 받은 것 같아 마음이 편해졌다.

  • 지난 번 2장 읽을 때 좋은 코드를 짜기 위한 과정들이 글쓰기 같다는 평을 남겼는데, 비슷하지만 다른 결의 관점에서 글쓰기와 소프트웨어 작성 행위의 유사점을 작가가 제시해 굉장히 흥미로웠다.

🧐 궁금한 내용, 잘 이해되지 않는 내용

  • 프로그래밍에서의 추상화?

    • 추상화란 복잡한 소프트웨어 시스템을 효율적으로 설계하고 구현할 수 있는 방법.

    • 데이터나 프로세스를 의미, 수행과정이 비슷한 개념으로 묶어 정의(선언)하는 것이 추상화.

    • 예시

    class ImplementAbstraction {
      // method to set values of internal members
      set(x, y) {
        this.a = x;
        this.b = y;
      }
    
      display() {
        console.log('a = ' + this.a);
        console.log('b = ' + this.b);
      }
    }
    
    const obj = new ImplementAbstraction();
    obj.set(10, 20);
    obj.display();
    // a = 10
    // b = 20
    

  • SRP(Single Responsibility)?

  • OCP(Open Closed Principle)

    • 소프트웨어 개체(클래스, 모듈, 함수 등등)는 확장에 대해 열려 있어야 하고, 수정에 대해서는 닫혀 있어야 한다'는 프로그래밍 원칙이다.

    • 확장에 대해 열려 있다.

      : 이것은 모듈의 동작을 확장할 수 있다는 것을 의미한다. 애플리케이션의 요구 사항이 변경될 때, 이 변경에 맞게 새로운 동작을 추가해 모듈을 확장할 수 있다. 즉, 모듈이 하는 일을 변경할 수 있다.

    • 수정에 대해 닫혀 있다

      : 모듈의 소스 코드나 바이너리 코드를 수정하지 않아도 모듈의 기능을 확장하거나 변경할 수 있다. 그 모듈의 실행 가능한 바이너리 형태나 링크 가능한 라이브러리(예를 들어 윈도의 DLL이나 자바의 .jar)를 건드릴 필요가 없다.

    • 출처 :https://ko.wikipedia.org/wiki/개방-폐쇄_원칙

  • 객체 지향 프로그래밍

    • 객체 지향 프로그래밍(Object-Oriented Programming, OOP)은 컴퓨터 프로그래밍 패러다임 중 하나이다. 객체 지향 프로그래밍은 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위, 즉 "객체"들의 모임으로 파악하고자 하는 것이다. 각각의 객체는 메시지를 주고받고, 데이터 를 처리할 수 있다.

    • 출처 : https://ko.wikipedia.org/wiki/객체_지향_프로그래밍