1. OOP
1-1. κ°μ²΄μ§ν₯μ 4κ°μ§ νΉμ±
a. λ€νμ±
ν κ°μ§ μν μ΄ μν©μ λ°λΌ κ°κΈ° λ€λ₯Έ νλμ νλ€.
- μ °νκ° νκΈ°μΉ¨μ_νλ€()
- λΆ μ£Όλ°©μ₯ -> λμΉλ₯Ό_λ³Έλ€()
- 쑰리μ₯ -> μ리νλ_μ²μ_νλ€()
b. μΆμν
- 곡ν΅λ κΈ°λ₯μ λ½μλΈλ€.
- νμ€ μΈκ³μ 볡μ‘ν νμμ κ°λ¨ν ννλ‘ λͺ¨λΈλ§νλ€. (simplify)
μ΅μνμ μ 보λ₯Ό μΆμΆ
c. μΊ‘μν
- ꡬν λ΄μ©μ λ΄λΆμ μ¨κ²¨μ μμ§λλ₯Ό λμ΄λ κ²
- μμ§λ : κ°μ²΄κ° μμ κ³Ό κ΄λ ¨λ κ²μ μ€μ¬μ μΌλ‘ νλνλ€.
c-1. κ²°ν©λ
- λ κ°μ²΄κ° μλ‘ κ΄λ ¨λκ±°λ μμ‘΄νλ μ λ
- μ μ’μκ±° (κ°μ²΄λ₯Ό λΌμ΄λ΄κ±°λ λ³κ²½νκΈ° νλ€λ€)
c-2. μΊ‘μνλ₯Ό μλ°ν μ¬λ‘
- μ λ¬Έλ°°λ¬λΆκ° κ³ κ°μ μ§κ°μ κ°μ Έμμ, νκΈμ νμΈνκ³ , λμ κ°μ Έκ°λκ² μλλΌ
- κ³ κ°μ΄ μμ μ μ§κ°μ νκΈμ νμΈνκ³ , λμ μ λ¬Έλ°°λ¬λΆμκ² κ±΄λ€μ£Όλ κ²
d. μμ
- λΆλͺ¨μ κΈ°μ‘΄ κΈ°λ₯μ λ¬Όλ €λ°μ μ μλ€.
1-2. SOLID
μ’μ κ°μ²΄ μ§ν₯ μ€κ³λ₯Ό μν 5κ°μ§ μμΉ
a. Single-Responsibility Principle (λ¨μΌ μ± μ μμΉ)
- κ°μ²΄λ μ€λ‘μ§ νλμ μ± μμ κ°λλ€
- 곡ν΅λ μΌμ νλ κ°μ²΄λ₯Ό νλ λ μΌλ‘μ¨, μ€λ³΅λ μ½λλ₯Ό μ΅λν μ κ±°νλ€.
b. Open/Closed Principle (κ°λ°©/νμ μμΉ)
- λ³κ²½μλ λ«νμκ³ νμ₯μλ μ΄λ €μλ€.
- ν΄λΌμ΄μΈνΈ μ½λκ° λ°λμ§ μλλ‘ νλ€.
- λΆλͺ¨ classμμ μμ classλ₯Ό λ§λ€ λ, μμ classμμ κΈ°λ₯μ μΆκ°/μμ ν μ μμ§λ§,
μμ classλ₯Ό μν΄ λΆλͺ¨ classκ° μμ λ νμλ μλ€.
c. Liskov’s Substitution Principle (리μ€μ½ν μΉν μμΉ)
- μμ νμ μ νμ νμ μΌλ‘ λ°κΎΈλλΌλ μ μ μλν΄μΌ νλ€.
- Ex. μ μ¬κ°νμ μ§μ¬κ°νμ μμ±μ μμμ λ°λ μκ° μ μ¬κ°νμ μ±μ§μ μλ°°λλ€.
- λΆλͺ¨ classμ μμΉμ μμ classλ‘ λ£μ΄λ μ΄λ ν issueλ μμ΄μΌ νλ€λ μμΉμ΄λ€.
d. Interface Segregation Principle (μΈν°νμ΄μ€ λΆλ¦¬ μμΉ)
- ν΄λΌμ΄μΈνΈ μ μ₯μμ νμν κΈ°λ₯ μ€μ¬μΌλ‘ μΈν°νμ΄μ€λ₯Ό λΆλ¦¬νλ€.
- ν΄λΌμ΄μΈνΈκ° μμ κ³Ό κ΄λ ¨μ΄ μλ μΈν°νμ΄μ€λ ꡬννμ§ μμμΌ νλ€.
e. Dependency Inversion Principle (μμ‘΄μ± μμ λ²μΉ)
- μ μμ€ λͺ¨λμ΄ κ³ μμ€ λͺ¨λμμ μ μν μΆμ νμ μ μμ‘΄ν΄μΌ νλ€.
- -> λΆλͺ¨ classλ μμ classμ μμ‘΄ν΄μλ μλλ€.
- ν΄λΌμ΄μΈνΈ μ μ₯μμ νμν μΈν°νμ΄μ€λ₯Ό μΆμΆνλ€.
- λ 립배ν¬κ° κ°λ₯ν΄μ§ λ€λ μ₯μ
2. FP
a. Pure Function (μμν¨μ)
- κ°μ μ λ ₯κ°μλ κ°μ κ²°κ³Όκ°μ λ°ννλ€.
- κ·Έλ¬λ©΄μ side effectκ° μλ κ².
return 2*x
vsalpha = x; return 2*alpha
: μ μκ° μμν¨μ
b. Immutability (λΆλ³μ±)
- μ΄λ―Έ μ μ₯λ κ°μ μνλ₯Ό λ³κ²½νμ§ μλλ€.
- oopμμλ Private, Public λ±μ μ κ·Ό μ μ΄μλ‘ ν΅μ λ₯Ό ν μ μμ§λ§, FPλ κΈ°λ³Έμ μΌλ‘ μλ¬΄λ° λ΄λΆ μνλ₯Ό λ³νμν€μ§ μλλ€.
- λ°μ΄ν°μ λ³κ²½μ΄ νμν κ²½μ°, κ·Έ λ°μ΄ν°μ 볡μ¬λ³Έμ λ§λ€μ΄ λ³κ²½νκ³ , ν΄λΉ 볡μ¬λ³Έμ μ¬μ©ν΄ μμ νλ€.
c. Declerative Pattern (μ μΈμ ν¨ν΄)
- How 보λ€λ Whatμ μ§μ€νλ€.
// λͺ
λ Ήν νλ‘κ·Έλλ°. μ΄λ»κ² μνν μ§
let numbers = [1, 2, 3];
function multiply(numbers, multiplier) {
for (let i = 0; i < numbers.length; i++) {
numbers[i] = numbes[i] * multiplier;
}
}
// ν¨μν νλ‘κ·Έλλ°. 무μμ μνν μ§
function multiply(number, multiplier) {
return number.map((num) => num * multiplier);
}
- Map, filter λ±λ±μ΄ ν¨μν μ½λλΌκ³ ν¨
d. First Class Function (1κΈ κ°μ²΄)
ν¨μν νλ‘κ·Έλλ°μμ ν¨μλ₯Ό 1κΈ κ°μ²΄λ‘ μ·¨κΈνλ€.
- λ³μλ λ°μ΄ν° ꡬ쑰 μμ λ΄μ μ μκ³ , νλΌλ―Έν°λ λ°νκ°μΌλ‘ μ¬μ©ν μ μλ€.
- μμ§ μλ°μμ ν¨μλ₯Ό 1κΈ κ°μ²΄λ‘ μ·¨κΈνμ§ μμ
// 1κΈ κ°μ²΄
const addTwo = (num) => num + 2;
const multiplyTwo = (num) => num * 2;
const transform = (numbers) => numbers.map(addTwo).map(multiplyTwo);
console.log(transform([1, 2, 3, 4])); // [6, 8, 10, 12]
e. High Order Function (κ³ μ°¨ν¨μ)
- ν¨μλ₯Ό ν¨μμ μΈμλ‘ λ°λλ€.
- ν¨μμ λ°νκ°μΌλ‘ λ λ€λ₯Έ ν¨μλ₯Ό μ¬μ©νλ€.
const func1 = (func) => (word) => {
func();
console.log(`${word}`);
};
e.1 컀λ§(currying) κΈ°λ²
- μΈμκ° μ¬λ¬κ°μΈ ν¨μμ μΌλΆ μΈμλ₯Ό κ³ μ μν€λ μλ‘μ΄ ν¨μλ₯Ό λ§λλ κΈ°λ²
function helloFunc(word) {
return function (name) {
console.log(`${word}, ${name}`);
};
}
const printHello = helloFunc("hello");
printHello("Tibetan Fox"); // hello, Tibetan Fox
printHello("Tiger"); // hello, Tiger
- μ»€λ§ κΈ°λ²μ μΌλΆ μΈμμ κ°μ κ°μ λ°λ³΅μ μΌλ‘ μ¬μ©ν λ κ·Έ λ°λ³΅λλ μΈμλ₯Ό κ³ μ ν¨μΌλ‘μ¨ μ€λ³΅μ μ΅μν νκΈ°μ μ ν©ν κΈ°λ²
ν¨μν νλ‘κ·Έλλ°
- νλ‘κ·Έλλ° ν¨λ¬λ€μ μ€ νλ
- μμ ν¨μλ₯Ό ν΅ν΄μ μ΄ν리μΌμ΄μ μ μνκ° νλ₯Έλ€
- λ³λ ¬ μ²λ¦¬μ μ₯μ μ κ°μ§λ€ (μμν¨μ->λΆμν¨κ³Όκ° μλ€. μ¦, μ€λ λμ μμ μ± λ³΄μ₯)
- κ°κ²°νκ³ μ¬μ¬μ©μ±μ΄ λλ€