-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #20 from Wannabe-Woowa-Article/soi-ha
goodbye clean code
- Loading branch information
Showing
1 changed file
with
177 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,177 @@ | ||
## π [Goodbye, Clean Code](https://overreacted.io/goodbye-clean-code/) | ||
|
||
### ποΈ λ²μ λ μ§: 2024.07.08 | ||
|
||
### π§ λ²μν ν¬λ£¨: μν(μ΅μμ°) | ||
|
||
--- | ||
|
||
## μκ°, Clean Code | ||
|
||
λ¦μ μ λ μ΄μμ΅λλ€. | ||
|
||
λλ£κ° μΌμ£ΌμΌ λ΄λ΄ μμ±νλ μ½λλ₯Ό λ§ νμΈνμ΅λλ€. μ°λ¦¬λ κ·Έλν½ νΈμ§κΈ° μΊλ²μ€λ₯Ό μμ νκ³ μμκ³ , λλ£λ μ¬κ°νκ³Ό νμ κ°μ λνμ ν¬κΈ°λ₯Ό κ°μ₯μ리μ μμ νΈλ€μ λλκ·Ένμ¬ μ‘°μ ν μ μλ κΈ°λ₯μ ꡬννμ΅λλ€. | ||
|
||
μ½λλ μλνμ΅λλ€. | ||
|
||
νμ§λ§ λ°λ³΅μ μ΄μμ΅λλ€. κ° λν(μ: μ¬κ°ν λλ νμ)μλ λ€λ₯Έ νΈλ€ μΈνΈκ° μμκ³ , κ° νΈλ€μ λ€λ₯Έ λ°©ν₯μΌλ‘ λλκ·Ένλ©΄ λνμ μμΉμ ν¬κΈ°κ° λ€λ₯΄κ² μν₯μ λ°μμ΅λλ€. μ¬μ©μκ° Shift ν€λ₯Ό λλ₯΄κ³ μμΌλ©΄ λΉμ¨μ μ μ§νλ©΄μ ν¬κΈ°λ₯Ό μ‘°μ ν΄μΌ νμ΅λλ€. λ§μ μνμ΄ μμμ΅λλ€. | ||
|
||
μ½λλ λ€μκ³Ό κ°μ΄ μκ²Όμ΅λλ€: | ||
|
||
```jsx | ||
let Rectangle = { | ||
resizeTopLeft(position, size, preserveAspect, dx, dy) { | ||
// 10 repetitive lines of math | ||
}, | ||
resizeTopRight(position, size, preserveAspect, dx, dy) { | ||
// 10 repetitive lines of math | ||
}, | ||
resizeBottomLeft(position, size, preserveAspect, dx, dy) { | ||
// 10 repetitive lines of math | ||
}, | ||
resizeBottomRight(position, size, preserveAspect, dx, dy) { | ||
// 10 repetitive lines of math | ||
}, | ||
}; | ||
|
||
let Oval = { | ||
resizeLeft(position, size, preserveAspect, dx, dy) { | ||
// 10 repetitive lines of math | ||
}, | ||
resizeRight(position, size, preserveAspect, dx, dy) { | ||
// 10 repetitive lines of math | ||
}, | ||
resizeTop(position, size, preserveAspect, dx, dy) { | ||
// 10 repetitive lines of math | ||
}, | ||
resizeBottom(position, size, preserveAspect, dx, dy) { | ||
// 10 repetitive lines of math | ||
}, | ||
}; | ||
|
||
let Header = { | ||
resizeLeft(position, size, preserveAspect, dx, dy) { | ||
// 10 repetitive lines of math | ||
}, | ||
resizeRight(position, size, preserveAspect, dx, dy) { | ||
// 10 repetitive lines of math | ||
}, | ||
}; | ||
|
||
let TextBlock = { | ||
resizeTopLeft(position, size, preserveAspect, dx, dy) { | ||
// 10 repetitive lines of math | ||
}, | ||
resizeTopRight(position, size, preserveAspect, dx, dy) { | ||
// 10 repetitive lines of math | ||
}, | ||
resizeBottomLeft(position, size, preserveAspect, dx, dy) { | ||
// 10 repetitive lines of math | ||
}, | ||
resizeBottomRight(position, size, preserveAspect, dx, dy) { | ||
// 10 repetitive lines of math | ||
}, | ||
}; | ||
``` | ||
|
||
λ°λ³΅λλ μνμ΄ μ λ§ μ κ²½ μ°μμ΅λλ€. | ||
|
||
κΉ¨λνμ§ μμμ΅λλ€. | ||
|
||
λλΆλΆμ λ°λ³΅μ μ μ¬ν λ°©ν₯ μ¬μ΄μμ λ°μνμ΅λλ€. μλ₯Ό λ€μ΄, `Oval.resizeLeft()`λ `Header.resizeLeft()`μ μ μ¬ν μ μ΄ μμμ΅λλ€. μ΄λ λ λ€ μΌμͺ½ κ°μ₯μ리μ νΈλ€μ λλκ·Ένλ κ²μ λ€λ£¨κΈ° λλ¬Έμ λλ€. | ||
|
||
λ λ€λ₯Έ μ μ¬μ μ κ°μ λνμ λν λ©μλ μ¬μ΄μ μμμ΅λλ€. μλ₯Ό λ€μ΄, `Oval.resizeLeft()`λ λ€λ₯Έ `Oval` λ©μλμ μ μ¬ν μ μ΄ μμμ΅λλ€. μ΄λ λͺ¨λ νμμ λ€λ£¨κΈ° λλ¬Έμ λλ€. ν μ€νΈ λΈλ‘μ΄ μ¬κ°νμ΄μκΈ° λλ¬Έμ `Rectangle`, `Header`, `TextBlock` μ¬μ΄μλ μ€λ³΅μ΄ μμμ΅λλ€. | ||
|
||
μμ΄λμ΄κ° λ μ¬λμ΅λλ€. | ||
|
||
λ€μκ³Ό κ°μ΄ μ½λλ₯Ό κ·Έλ£Ήννλ©΄ λͺ¨λ μ€λ³΅μ μ κ±°ν μ μμ΅λλ€: | ||
|
||
```jsx | ||
let Directions = { | ||
top(...) { | ||
// 5 unique lines of math | ||
}, | ||
left(...) { | ||
// 5 unique lines of math | ||
}, | ||
bottom(...) { | ||
// 5 unique lines of math | ||
}, | ||
right(...) { | ||
// 5 unique lines of math | ||
}, | ||
}; | ||
|
||
let Shapes = { | ||
Oval(...) { | ||
// 5 unique lines of math | ||
}, | ||
Rectangle(...) { | ||
// 5 unique lines of math | ||
}, | ||
} | ||
``` | ||
|
||
κ·Έλ¦¬κ³ λμ λμμ ꡬμ±νλ κ²μ λλ€. | ||
|
||
```jsx | ||
let { top, bottom, left, right } = Directions; | ||
|
||
function createHandle(directions) { | ||
// 20 lines of code | ||
} | ||
|
||
let fourCorners = [ | ||
createHandle([top, left]), | ||
createHandle([top, right]), | ||
createHandle([bottom, left]), | ||
createHandle([bottom, right]), | ||
]; | ||
let fourSides = [createHandle([top]), createHandle([left]), createHandle([right]), createHandle([bottom])]; | ||
let twoSides = [createHandle([left]), createHandle([right])]; | ||
|
||
function createBox(shape, handles) { | ||
// 20 lines of code | ||
} | ||
|
||
let Rectangle = createBox(Shapes.Rectangle, fourCorners); | ||
let Oval = createBox(Shapes.Oval, fourSides); | ||
let Header = createBox(Shapes.Rectangle, twoSides); | ||
let TextBox = createBox(Shapes.Rectangle, fourCorners); | ||
``` | ||
|
||
μ½λμ ν¬κΈ°λ μ λ°μΌλ‘ μ€μκ³ , μ€λ³΅μ μμ ν μ¬λΌμ‘μ΅λλ€! μ λ§ κΉλνλ€μ. νΉμ λ°©ν₯μ΄λ λνμ λμμ λ³κ²½νλ €λ©΄ μ¬κΈ°μ κΈ°μ λ©μλλ₯Ό μ λ°μ΄νΈνλ λμ ν κ³³μμ μ²λ¦¬ν μ μμ΅λλ€. | ||
|
||
μ΄λ―Έ λ°€μ΄ λ¦μμμ΅λλ€ (μ λ νΉ λΉ μ Έ μμμ£ ). 리ν©ν°λ§ν λ΄μ©μ masterμ νμΈνκ³ μ μ리μ λ€μμ΅λλ€. λλ£μ μ§μ λΆν μ½λλ₯Ό κΉλνκ² μ 리ν κ²μ΄ μλμ€λ¬μ νλ©΄μμ. | ||
|
||
### λ€μλ μμΉ¨ | ||
|
||
... μμλλ‘ λμ§ μμμ΅λλ€. | ||
|
||
μμ¬κ° μ λ₯Ό μΌλμΌλ‘ λΆλ¬ μ κ° λ³κ²½ν λ΄μ©μ λλ리λΌκ³ μ μ€νκ² μμ²νμ΅λλ€. μ λ 좩격μ λ°μμ΅λλ€. κΈ°μ‘΄ μ½λλ μλ§μ΄μκ³ μ κ° μμ ν κ²μ κΉλνλλ° λ§μ΄μ£ ! | ||
|
||
λ§μ§λͺ»ν΄ λ°λμ§λ§, μμ¬κ° μ³μλ€λ κ²μ κΉ¨λ«λ λ° μλ μ΄ κ±Έλ Έμ΅λλ€. | ||
|
||
### μ΄κ²μ ν λ¨κ³μ λλ€. | ||
|
||
"κΉ¨λν μ½λ"μ μ§μ°©νκ³ μ€λ³΅μ μ κ±°νλ κ²μ μ°λ¦¬ μ€ λ§μ μ¬λλ€μ΄ κ²ͺλ λ¨κ³μ λλ€. μ½λμ μμ κ°μ΄ μμ λ, μΈ‘μ κ°λ₯ν 무μΈκ°μ μμ κ°μΉμ μ λ¬Έμ μΈ μλΆμ¬μ λΆμ¬νλ κ²μ΄ μ νΉμ μ λλ€. μ격ν lint κ·μΉ, λͺ λͺ μ€ν€λ§, νμΌ κ΅¬μ‘°, μ€λ³΅ μμ λ±μ΄ κ·Έ μμ λλ€. | ||
|
||
μ€λ³΅ μ κ±°λ μλνν μ μμ§λ§, μ°μ΅μ ν΅ν΄ λ μ¬μμ§λλ€. λ§€λ² λ³κ²½ ν μ€λ³΅μ΄ μ κ±°λ λ§μμ§ μ μ μμ΅λλ€. κ·Έ κ²°κ³Ό μ€λ³΅ μ κ±°λ μ½λμ λν κ°κ΄μ μΈ λ©νΈλ¦μ κ°μ νλ κ²μ²λΌ λκ»΄μ§λλ€. λ λμ κ²μ μ¬λλ€μ μ 체μ±μ νΌλμ€λ½κ² λ§λ λ€λ κ²μ λλ€: "λλ κΉ¨λν μ½λλ₯Ό μμ±νλ μ¬λμ λλ€". μ΄κ²μ μΌμ’ μ μκΈ°κΈ°λ§λ§νΌ κ°λ ₯ν©λλ€. | ||
|
||
μΌλ¨ μΆμνλ₯Ό λ§λλ λ°©λ²μ λ°°μ°λ©΄, κ·Έ λ₯λ ₯μ λμ·¨λμ΄ λ°λ³΅λλ μ½λλ₯Ό λ³Ό λλ§λ€ μΆμνλ₯Ό ν곡μμ λ½μλ΄λ κ²μ΄ μ νΉμ μ λλ€. λͺ λ λμ μ½λ©μ νλ€ λ³΄λ©΄ μ΄λμμλ λ°λ³΅μ λ³΄κ² λκ³ , μΆμνλ μ°λ¦¬μ μλ‘μ΄ μ΄λ₯λ ₯μ΄ λ©λλ€. λκ΅°κ° μΆμνκ° λ―Έλμ΄λΌκ³ λ§νλ©΄, μ°λ¦¬λ κ·Έκ²μ λ°μλ€μΌ κ²μ λλ€. κ·Έλ¦¬κ³ "κΉ¨λν¨"μ μλ°°νμ§ μλ λ€λ₯Έ μ¬λλ€μ νλ¨νκΈ° μμν κ²μ λλ€. | ||
|
||
μ΄μ μ λ μ "리ν©ν°λ§"μ΄ λ κ°μ§ μΈ‘λ©΄μμ μ¬μμ΄μλ€λ κ²μ κΉ¨λ¬μμ΅λλ€. | ||
|
||
- 첫째, μ λ κ·Έκ²μ μμ±ν μ¬λκ³Ό μ΄μΌκΈ°νμ§ μμμ΅λλ€. μ½λλ₯Ό λ€μ μμ±νκ³ κ·Έλ€μ μ견μ λ£μ§ μκ³ μ²΄ν¬μΈνμ΅λλ€. κ°μ λ κ²μ΄μλ€ νλλΌλ(μ΄μ λ λ μ΄μ κ·Έλ κ² λ―Ώμ§ μμ§λ§), μ΄λ κ·Έκ²μ μ²λ¦¬νλ λμ°ν λ°©λ²μ λλ€. 건κ°ν μμ§λμ΄λ§ νμ λμμμ΄ μ λ’°λ₯Ό μμκ°λλ€. νμκ³Ό μμ μμ΄ μ½λλ₯Ό λ€μ μμ±νλ κ²μ μ½λλ² μ΄μ€λ₯Ό ν¨κ³Όμ μΌλ‘ ν¨κ» νμ νλ λ₯λ ₯μ ν° ν격μ μ€λλ€. | ||
|
||
- λμ§Έ, 곡μ§λ μμ΅λλ€. μ μ½λλ μꡬ μ¬νμ λ³κ²½ν μ μλ λ₯λ ₯μ μ€λ³΅ κ°μμ κ΅ννμ§λ§, μ΄λ μ’μ κ±°λκ° μλμμ΅λλ€. μλ₯Ό λ€μ΄, λμ€μ λ€μν λνμ λ€μν νΈλ€μ λν λ§μ νΉμ μΌμ΄μ€μ λμμ΄ νμνμ΅λλ€. μ μΆμνλ κ·Έλ¬ν λ³κ²½μ μ©μ΄νκ² νκΈ° μν΄ λͺ λ°° λ 볡μ‘ν΄μ ΈμΌ νμ κ²μ λλ€. λ°λ©΄μ μλμ "μ§μ λΆν" λ²μ μμλ κ·Έλ¬ν λ³κ²½μ΄ μΌμ΄ν¬μ²λΌ μ½κ² μ μ§λμμ΅λλ€. | ||
|
||
μ κ° "λλ¬μ΄" μ½λλ₯Ό μμ±ν΄μΌ νλ€κ³ λ§νκ³ μλ κ±ΈκΉμ? μλλλ€. "κΉ¨λν¨" λλ "λλ¬μ"μ΄λΌκ³ λ§ν λ μλ―Ένλ λ°λ₯Ό κΉμ΄ μκ°ν΄ 보λΌκ³ μ μν©λλ€. λ°νμ¬, μ μκ°, μλ¦λ€μ, μ°μν¨μ λλΌμλμ? κ·Έλ¬ν νμ§μ ν΄λΉνλ ꡬ체μ μΈ μμ§λμ΄λ§ κ²°κ³Όλ₯Ό μ΄λ¦ μ§μ μ μλ€κ³ μΌλ§λ νμ νμλμ? κ·Έκ²λ€μ΄ μ½λ μμ± λ° μμ λ°©μμ μ νν μ΄λ€ μν₯μ λ―ΈμΉλμ? | ||
|
||
μ λ μ΄λ¬ν κ²λ€μ λν΄ κΉμ΄ μκ°νμ§ μμμ΅λλ€. μ½λκ° μ΄λ»κ² μκ²Όλμ§μ λν΄μλ λ§μ΄ μκ°νμ§λ§, λ§λλ§λν μΈκ° νκ³Ό ν¨κ» μ΄λ»κ² λ°μ νλμ§μ λν΄μλ μκ°νμ§ μμμ΅λλ€. | ||
|
||
μ½λ©μ μ¬μ μ λλ€. 첫 λ²μ§Έ μ½λ ν μ€λΆν° μ§κΈκΉμ§ μΌλ§λ λ©λ¦¬ μλμ§ μκ°ν΄ 보μΈμ. ν¨μλ₯Ό μΆμΆνκ±°λ ν΄λμ€λ₯Ό 리ν©ν°λ§νμ¬ λ³΅μ‘ν μ½λλ₯Ό κ°λ¨νκ² λ§λ€ μ μλ λ°©λ²μ μ²μ 보μμ λ κΈ°μ¨μ λκΌμ κ²μ λλ€. κΈ°μ μ μλΆμ¬μ λλλ€λ©΄, μ½λμ κΉλν¨μ μΆκ΅¬νλ κ²μ΄ μ νΉμ μΌ κ²μ λλ€. νλμ κ·Έλ κ² ν΄λ³΄μΈμ. | ||
|
||
νμ§λ§ κ±°κΈ°μ λ©μΆμ§ λ§μΈμ. κΉ¨λν μ½λ κ΄μ λκ° λμ§ λ§μΈμ. κΉ¨λν μ½λλ λͺ©νκ° μλλλ€. μ°λ¦¬κ° λ€λ£¨λ μμ€ν μ λ§λν 볡μ‘μ±μμ μ½κ°μ μλ―Έλ₯Ό μ°ΎμΌλ €λ μλμ λλ€. λ³κ²½μ΄ μ½λλ² μ΄μ€μ μ΄λ€ μν₯μ λ―ΈμΉ μ§ μμ§ νμ νμ§ λͺ»νμ§λ§ λ―Έμ§μ λ°λ€μμ μλ΄κ° νμν λ μ¬μ©νλ λ°©μ΄ λ©μ»€λμ¦μ λλ€. | ||
|
||
κΉ¨λν μ½λκ° μ¬λ¬λΆμ μΈλνκ² νμΈμ. **κ·Έλ¦¬κ³ λμμ£ΌμΈμ.** |