그럼에도 불구하고

👨‍💻

[CleanCode] 추상화하기 본문

JavaScript/Clean code

[CleanCode] 추상화하기

zenghyun 2023. 6. 5. 12:15

목차

    [ Magic Number ]

    숫자를 직접 기입하는 것보다는 변경 후와 같이 상수를 만들어서 쓰는 것이 유지보수하는데 훨씬 용이합니다.

     

     

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    /**
     * Magic Number
     */
     
    // Numeric Operator
    const PRICE = {
        MIN: 1_000_000, // 1백만원
        MAX: 100_000_000, // 1억원
    };
     
    console.log(PRICE);
     
    // MIN, MAX
     
    // 변경 전 
    getRandomPrice(1000000100000000); 
     
    // 변경 후
    getRandomPrice(PRICE.MIN, PRICE.MAX);
     
    // -
     
    // 변경 전 
     
    function isValidName(name) {
        return carName.length >= 1 && carName.length <= 5;
    }
     
    // 변경 후 
     
    const CAR_NAME_LEN = ({
        MIN: 1,
        MAX: 5
    })
     
    function isValidName(name) {
        return carName.length >= CAR_NAME_LEN.MIN && carName.length <= CAR_NAME_LEN.MAX;
    }
     
    const notiValidName = value => {
        if (!isArrayItemLengthRange(names, CAR_NAME_LEN.MIN, CAR_NAME_LEN.MAX)) {
            alert(`자동차 이름은 ${CAR_NAME_LEN.MIN}자에서 ${CAR_NAME_LEN.MAX}자까지 입력할 수 있습니다.`);
        }
    }
    cs

     

     

    // 변경 전 
    const PRICE = {
        MIN: 1000000, // 1백만원
        MAX: 100000000, // 1억원
    };
    
    // 변경 후 
    const PRICE = {
        MIN: 1_000_000, // 1백만원
        MAX: 100_000_000, // 1억원
    };

     

    변경  전의 수치를 보면 0의 개수가 많아질수록 실수할 확률이 높아집니다. 

     

    이럴 때는 _를 이용하면 숫자를 보기 편하게 입력하여 사용할 수 있습니다. 

     

     

    [ 네이밍 컨벤션 ]

    💡 저장소, 폴더, 파일, 함수, 변수, 상수, 깃 브랜치, 커밋 등 

     * 프로그래밍 전반적으로 이름을 네이밍을 위한 규칙이나 관습을 만드는 것 

     * 팀이나 개인의 차원에 따라 다를 수 있으며 특히 개인적인 견해와 해석에 따라 다를 수 있다.

     * 하지만 기준을 선정할 때 기본적인 논리와 이유는 있어야 한다.

     

    ⭐️ javascript의 예약어(keyword)와 겹치지 않게 사용하는 게 가장 중요하다!! ⭐️

     

    💡 대표적인 케이스 

    - camelCase // JS

    - PascalCase // 함수, 클래스 

    - kebab-case // NPM 패키지, 저장소 등등

    - SNAKE_CASE // 상수 

     

    💡 접두사, 접미사 

    📌 prefix-*,  *-suffix

     

    - data-id

    - data-name

    - data-value

     

    - AppContainer

    - ItemComponent

     

    - ICar

    - TCar

     

    - AType

    - BType

     

    - 동사-* => ⭐️ 함수는 동사로 시작한다. ⭐️

    - _로 시작하거나, #으로 시작하면 private한 용도로 쓰임 

     

    💡 이벤트 표현 

     * function on-*

     * function handle-*

     * function *-Action

     * function *-Event

     * function take-*

     * function *-Query

     * function *-All

     

    💡 CRUD Create Read Update Delete 

     * function generator-*

     * function gen-*

     * function make-*

     * function get

     * function set

     * function remove

     * function create 

     * function delete 

     

    💡 Flag 

     * is ~

     

     * isSubmit

     * isDisable

     * isString

     * isNumber

     

    💡 ETC

     * function selectById(id)

     * function 

     

     

    [ DOM API 접근 추상화 ]

     

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    /**
     * HTML에 접근하는 JavaScript 코드 추상화
     */
     
    // 예제 1 
     
    // 변경 전
    export const loader = () => {
      const el = document.createElement("div");
      el.setAttribute("class""loading d-flex justify-center mt-3");
     
      const el2 = document.createElement("div");
      el2.setAttribute("class""relative spinner-container");
     
      const el3 = document.createElement("div");
      el3.setAttribute("class""material spinner");
     
      el.append(el2);
      el2.append(el3);
    };
     
    // 변경 후
     
    const createLoader = () => {
      // 반복문도 가능
      const el = document.createElement("div");
      const el2 = document.createElement("div");
      const el3 = document.createElement("div");
     
      return {
        el,
        el2,
        el3,
      };
    };
     
    const createLoaderStyle = ({ el, el2, el3 }) => {
      el.setAttribute("class""loading d-flex justify-center mt-3");
      el2.setAttribute("class""relative spinner-container");
      el3.setAttribute("class""material spinner");
     
      return {
       newEl: el,
       newEl2: el2,
       newEl3: el3,
      };
    };
     
    const loader2 = () => {
      const { el, el2, el3 } = createLoader();
      const { newEl, newEl2, newEl3 } = createLoaderStyle({ el, el2, el3 });
     
      newEl.append(newEl2);
      newEl2.append(newEl3);
    };
     
     
    // 예제 2 
     
    const changeColor = (element) => {
        element.style.backgroundColor = 'black';
    }
     
    const openModal = (element) => {
        element.classList.add('--open');
    };
     
     
    const closeModal = (element) => {
        element.classList.remove('--open');
    };
     
     
    const myModal = () => {
        // 모달 생성 코드
     
        return document.querySelector('#modal');
    }
     
     
    openModal(myModal);
    changeColor(myModal);
    closeModal(myModal);
    cs

     

     

    'JavaScript > Clean code' 카테고리의 다른 글

    [CleanCode] 에러 다루기  (0) 2023.06.05
    [CleanCode] 함수 다루기  (1) 2023.06.04
    [CleanCode] 객체 다루기  (0) 2023.06.02
    [CleanCode] 배열 다루기  (0) 2023.06.01
    [CleanCode] 분기다루기  (0) 2023.05.30
    Comments