ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 리팩터링 2판 - 6. 기본적인 리팩터링
    Books/리팩터링 2판 2022. 6. 15. 15:23

    6-1. 챕터 소개

    Low-level

    - 변수 : 어떤 데이터가 ?

    - 함수 : 어떤 일을?

     

    High-level

    - 모듈 : 어떤 책임을?

     

    6-2. 함수 포인트 정리

    - 코드를 작성하는 건, 사람, 개발자 - 사람이 이해하기 쉽도록 작성!

    - 함수

        ㆍ특정한 일을 수행하는 코드의 집합

        ㆍ프로그램을 이루는 가장 기본적인 단위

        ㆍ프로그램을 작은 단위로 나누는 주된 수단

        ㆍ재사용 가능 / 유지보수성 / 의미있는이름을 부여함으로써 높은 가독성

        ㆍ주석을 달지 않아도, 함수 이름만으로 코드의 목적이 파악 가능

     

    6-3. 함수 추출하기 ( 책 6.1 )

    - 지역변수는 사용한 곳과 최대한 가까이 정의하는 것이 좋다.

    - 함수에서 리턴값의 변수는 result 라는 이름을 쓸 것

    - 긴 코드가 있다면 의미있는 단위로 나누어서 함수로 만들고 의미있는 이름을 부여하고 가독성, 재사용성, 유지보수성을 높여보자!

     

    6-4. 함수 인라인하기 ( 책 6.2 )

    - 이미 함수이름 그대로 코드가 작성되어 있다면 굳이 함수로 만들 필요없다. 재사용하지 않는다면..

    - 너무 작게 나누면 다시 inline 해준다.

     

    6-5. 변수의 포인트 정리

    - 변수 ( Variable ) : 값을 저장하는 공간, 자료를저장할 수 있는 이름이 주어진 기억장소

        ㆍ저장된 값을 잘 나타낼 수 있는 (구체적으로) 의미있는 이름

        ㆍ변수가 있으면 디버깅이 편해짐

     

    6-6. 변수 추출하기( 책6.3 )

    - 주석을 삭제할 방법이 있다면 삭제하는게 좋다.

    - 변수명을 짧게해도 이해가 되고 문맥상 맞으면 변수명은 짧게

     

    6-8. 이름짓기 포인트 정리

    - 요즘에는 카멜케이스를 많이 사용하고 있다.

    - 변수는 명사, 함수는 동사

    - 클래스안에서 getter를 가지고 있거나 속성에 관련된 함수는 get을 생략가능

      ( getTotalPrice → totalPrice )

    - 함수 인자는 어떤 데이터가 필요한지 잘 나타낼 수 있어야 한다.

     

    6-9. 변수 이름 바꾸기 ( 책 6.7 )

    - 너무 축약 X, 차라리 구체적으로 적는게 좋다.

     

    6-10. 함수 선언 바꾸기 ( 책 6.5 )

    - VScode F2 ( rename symbol ) : 모든 해당 함수의 이름을 바꿔준다.

    - Flag : boolean으로 동작을 다르게 하는 함수, 추가적인 불리언 타입

        → 좋지 않음

    - 함수안에서 정말 필요한 데이터만 받아올 것!

     

    6-11. 함수의 매개변수 포인트 정리

    - 매개변수의 갯수는 최대 3개를 넘지 않는게 좋다.

    - 매개변수가 많다면 연관있는 데이터 구조 하나로 묶어주는게 좋다. - 자료구조나 클래스 등

     

    6-12. 매개변수 객체 만들기( 책 6.8 )

    - 함수에 여러가지 데이터를 전달한다면 하나의 객체로 묶을 수 있는 것을 생각

    - 더나아가 그 객체안에 더 유용한 함수를 만들 수 있는지 생각

     

    6-13. 캡슐화 포인트 정리

    - 캡슐화 ( Encapsulation ) : 내부 구현 사항을 숨기고, 외부에서 필요한 사항들만 공개

    - 아무나 손쉽게 잘못된 값으로 변수 변경을 막음

        → 모듈, 클래스와 같은 형태로 캡슐화 해두자!

        → 데이터를 변경하고, 사용하는 코드를 감시할 수 있는 유일한 통로

     

    6-14. 변수 캡슐화하기 ( 책 6.6 )

    - 객체를 담고 있는 변수는 객체를 가르키고 있는 메모리 주소를 담고 있다. 즉 참조값, 레퍼런스를 담고 있다.

        ㆍ객체 변경가능

     

    해결방안

    1. 객체 복사

    export function getDefaultOwner() {
      return { ...defaultOwner };   //or Object.assign
    }

    - 일반적인 스프레드 연산자를 사용하면 얉은 복사가 이루어짐

    - 중첩된 오브젝트가 있다면 그대로 참조값으로 씀 → 객체의 불변성

     

    2. 클래스

    - 한번 설정 시 get만 제공 시 읽기만 가능

     

    6-15. 여러 함수를 클래스로 묶기 ( 책 6.9 )

    - 클래스 데이터와 밀접하게 관련된 계산은 클래스안으로 넣기

     

    6-16. 여러 함수를 변환 함수로 묶기 ( 책 6.10 )

    - 클래스로 묶는 방법을 더 선호

    - 클래스로 묶는 방법은 get하는 시점에 함수 실행 반환

    - 변환함수는 변환함수를 호출하는 시점의 데이터를 가지고 함수 실행 반환,

        ㆍ나중에 데이터가 업데이트 되어도 변경 X

        ㆍ내가 원하는 시점의 데이터가 있다면 enrich를 호출해야함

     

    6-17. 함수 쪼개기 포인트 정리

    - 긴 함수

        ㆍ함수의 목적을 이해하기 어려움 → 유지보수성 X

        ㆍ이해를 위한 주석이 필요 → 가독성 X

        ㆍ재사용 불가 → 재사용 X

        ㆍ긴 함수는 작은 단위의 함수로 목적에 맞게 나누자!

    - 단계별로 쪼개기

        ㆍ단계별로 나누니 가독성도 좋아지고 재사용성도 높아짐

        ㆍ불필요한 주석도 제거할 수 있고 코드가 깔끔

        ㆍ주석을 달지 않아도, 함수 이름만으로 코드의 목적 파악

        ㆍ함수 내부 구현 사항에 대해서는 매번 신경 X

    댓글

Designed by Tistory.