그럼에도 불구하고

👨‍💻

[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