'λ©΄μ μ μν CS μ 곡μ§μ λ ΈνΈ'λ₯Ό μ½κ³ κ°μΈμ μΌλ‘ μ 리ν κΈμ λλ€.
1.2 νλ‘κ·Έλλ° ν¨λ¬λ€μ
νλ‘κ·Έλλ° ν¨λ¬λ€μ(programming paradigm)μ νλ‘κ·Έλλ¨Έμκ² νλ‘κ·Έλλ°μ κ΄μ μ κ°κ² ν΄μ£Όλ μν μ νλ κ°λ° λ°©λ²λ‘ μ
=> κ°μ²΄μ§ν₯ νλ‘κ·Έλλ°μ νλ‘κ·Έλλ¨Έλ€μ΄ νλ‘κ·Έλ¨μ μνΈ μμ©νλ κ°μ²΄λ€μ μ§ν©μΌλ‘ λ³Ό μ μκ² νλ λ°λ©΄μ, ν¨μν νλ‘κ·Έλλ°μ μν κ°μ μ§λμ§ μλ ν¨μ κ°λ€μ μ°μμΌλ‘ μκ°ν μ μκ² ν΄μ€
1.2.1 μ μΈνκ³Ό ν¨μν νλ‘κ·Έλλ°
μ μΈν νλ‘κ·Έλλ°(declarative programming)μ΄λ '무μμ' νμ΄λ΄λκ°μ μ§μ€νλ ν¨λ¬λ€μμ΄λ©°, 'νλ‘κ·Έλ¨μ ν¨μλ‘ μ΄λ£¨μ΄μ§ κ²μ΄λ€' λΌλ λͺ μ κ° λ΄κ²¨ μλ ν¨λ¬λ€μμ΄κΈ°λ ν¨
=> ν¨μν νλ‘κ·Έλλ°(functional programming)μ μ μΈν ν¨λ¬λ€μμ μΌμ’
ν¨μν νλ‘κ·Έλλ°μ μμ 'μμ ν¨μ'λ€μ λΈλ‘μ²λΌ μμ λ‘μ§μ ꡬννκ³ 'κ³ μ°¨ ν¨μ'λ₯Ό ν΅ν΄ μ¬μ¬μ©μ±μ λμΈ νλ‘κ·Έλλ° ν¨λ¬λ€μμ
=> JSλ ν¨μκ° μΌκΈ κ°μ²΄μ΄κΈ° λλ¬Έμ κ°μ²΄μ§ν₯ νλ‘κ·Έλλ°λ³΄λ€λ ν¨μν νλ‘κ·Έλλ° λ°©μμ΄ μ νΈλ¨
μμ ν¨μλ μΆλ ₯μ΄ μ λ ₯μλ§ μμ‘΄νλ κ²μ μλ―Έν¨
const pure = (a, b) => {
return a + b
}
μ κ°μ ν¨μλ₯Ό μκ°ν΄λ³Ό μ μμ
κ³ μ°¨ ν¨μλ ν¨μκ° ν¨μλ₯Ό κ°μ²λΌ 맀κ°λ³μλ‘ λ°μ λ‘μ§μ μμ±ν μ μλ κ²μ λ§ν¨
μ΄λ κ³ μ°¨ ν¨μλ₯Ό μ°κΈ° μν΄μλ ν΄λΉ μΈμ΄κ° μΌκΈ κ°μ²΄λΌλ νΉμ§μ κ°μ ΈμΌ νλ©° κ·Έ νΉμ§μ λ€μκ³Ό κ°μ
1. λ³μλ λ©μλμ ν¨μλ₯Ό ν λΉν μ μμ
2. ν¨μ μμ ν¨μλ₯Ό 맀κ°λ³μλ‘ λ΄μ μ μμ
3. ν¨μκ° ν¨μλ₯Ό λ°νν μ μμ
1.2.2 κ°μ²΄μ§ν₯ νλ‘κ·Έλλ°
κ°μ²΄μ§ν₯ νλ‘κ·Έλλ°(OOP, Object-Oriented Programming)μ κ°μ²΄λ€μ μ§ν©μΌλ‘ νλ‘κ·Έλ¨μ μνΈ μμ©μ νννλ©° λ°μ΄ν°λ₯Ό κ°μ²΄λ‘ μ·¨κΈνμ¬ κ°μ²΄ λ΄λΆμ μ μΈλ λ©μλλ₯Ό νμ©νλ λ°©μμ λ§ν¨
=> μ€κ³μ λ§μ μκ°μ΄ μμλλ©° μ²λ¦¬ μλκ° λ€λ₯Έ νλ‘κ·Έλλ° ν¨λ¬λ€μμ λΉν΄ μλμ μΌλ‘ λλ¦Ό
κ°μ²΄μ§ν₯ νλ‘κ·Έλλ°μ νΉμ§
μΆμν
μΆμν(abstraction)λ 볡μ‘ν μμ€ν μΌλ‘λΆν° ν΅μ¬μ μΈ κ°λ λλ κΈ°λ₯μ κ°μΆλ €λ΄λ κ²μ μλ―Έν¨
μΊ‘μν
μΊ‘μν(encapsulation)λ κ°μ²΄μ μμ±κ³Ό λ©μλλ₯Ό νλλ‘ λ¬Άκ³ μΌλΆλ₯Ό μΈλΆμ κ°μΆμ΄ μλνλ κ²μ λ§ν¨
μμμ±
μμμ±(inheritance)μ μμ ν΄λμ€μ νΉμ±μ νμ ν΄λμ€κ° μ΄μ΄λ°μμ μ¬μ¬μ©νκ±°λ μΆκ°, νμ₯ νλ κ²μ λ§ν¨
=> μ½λμ μ¬μ¬μ© μΈ‘λ©΄, κ³μΈ΅μ μΈ κ΄κ³ μμ±, μ μ§ λ³΄μμ± μΈ‘λ©΄μμ μ€μν¨
λ€νμ±
λ€νμ±(polymorphism)μ νλμ λ©μλλ ν΄λμ€κ° λ€μν λ°©λ²μΌλ‘ λμνλ κ²μ λ§ν¨
=> λνμ μΌλ‘ μ€λ²λ‘λ©, μ€λ²λΌμ΄λ©μ΄ μμ
μ€λ²λ‘λ©(overloading)μ κ°μ μ΄λ¦μ κ°μ§ λ©μλλ₯Ό μ¬λ¬ κ° λλ κ²μ λ§ν¨
=> λ©μλμ νμ , 맀κ°λ³μμ μ ν, κ°μ λ±μΌλ‘ μ¬λ¬ κ°λ₯Ό λ μ μμΌλ©° μ»΄νμΌ μ€μ λ°μνλ 'μ μ ' λ€νμ±μ
μ€λ²λΌμ΄λ©(overriding)μ μ£Όλ‘ λ©μλ μ€λ²λΌμ΄λ©μ λ§νλ©° μμ ν΄λμ€λ‘λΆν° μμ λ°μ λ©μλλ₯Ό νμ ν΄λμ€κ° μ¬μ μνλ κ²μ μλ―Έν¨
=> λ°νμ μ€μ λ°μνλ 'λμ ' λ€νμ±μ
μ€κ³ μμΉ
κ°μ²΄μ§ν₯ νλ‘κ·Έλλ°μ μ€κ³ν λλ SOLID μμΉμ μ§μΌμ£Όμ΄μΌν¨
λ¨μΌ μ± μ μμΉ (S)
λ¨μΌ μ± μ μμΉ(SRP, Single Responsibility Principle)μ λͺ¨λ ν΄λμ€λ κ°κ° νλμ μ± μλ§ κ°μ ΈμΌ νλ μμΉ
=> AλΌλ λ‘μ§μ΄ μ‘΄μ¬νλ€λ©΄ μ΄λ ν ν΄λμ€λ Aμ κ΄ν ν΄λμ€μ¬μΌνκ³ μ΄λ₯Ό μμ νλ€κ³ νμ λλ Aμ κ΄λ ¨λ μμ μ΄μ¬μΌν¨
κ°λ°©-νμ μμΉ (O)
κ°λ°©-νμ μμΉ(OCP, Open Closed Principle)μ μ μ§ λ³΄μ μ¬νμ΄ μκΈ΄λ€λ©΄ μ½λλ₯Ό μ½κ² νμ₯ν μ μλλ‘ νκ³ μμ ν λλ λ«ν μμ΄μΌ νλ μμΉμ
=> κΈ°μ‘΄μ μ½λλ μ λ³κ²½νμ§ μμΌλ©΄μλ νμ₯μ μ½κ²ν μ μμ΄μΌν¨
리μ€μ½ν μΉν μμΉ (L)
리μ€μ½ν μΉν μμΉ(LSP, Liskov Substitution Principle)μ νλ‘κ·Έλ¨μ κ°μ²΄λ νλ‘κ·Έλ¨μ μ νμ±μ κΉ¨λ¨λ¦¬μ§ μμΌλ©΄μ νμ νμ μ μΈμ€ν΄μ€λ‘ λ°κΏ μ μμ΄μΌ νλ κ²μ μλ―Έν¨
=> λΆλͺ¨ κ°μ²΄μ μμ κ°μ²΄λ₯Ό λ£μ΄λ μμ€ν μ΄ λ¬Έμ μμ΄ λμκ°κ² λ§λλ κ²μ λ§ν¨
μΈν°νμ΄μ€ λΆλ¦¬ μμΉ (I)
μΈν°νμ΄μ€ λΆλ¦¬ μμΉ(ISP, Interface Segregation Principle)μ νλμ μΌλ°μ μΈ μΈν°νμ΄μ€λ³΄λ€ ꡬ체μ μΈ μ¬λ¬ κ°μ μΈν°νμ΄μ€λ₯Ό λ§λ€μ΄μΌ νλ μμΉμ λ§ν¨
μμ‘΄ μμ μμΉ (D)
μμ‘΄ μμ μμΉ(DIP, Dependency Inversion Principle)μ μμ λ³΄λ€ λ³νκΈ° μ¬μ΄ κ²μ μμ‘΄νλ κ²μ μΆμνλ μΈν°νμ΄μ€λ μμ ν΄λμ€λ₯Ό λμ΄ λ³νκΈ° μ¬μ΄ κ²μ λ³νμ μν₯λ°μ§ μκ² νλ μμΉμ λ§ν¨
=> μμ κ³μΈ΅μ νμ κ³μΈ΅μ λ³νμ λν ꡬνμΌλ‘λΆν° λ 립ν΄μΌν¨
1.2.3 μ μ°¨ν νλ‘κ·Έλλ°
μ μ°¨ν νλ‘κ·Έλλ°μ λ‘μ§μ΄ μνλμ΄μΌ ν μ°μμ μΈ κ³μ° κ³Όμ μΌλ‘ μ΄λ£¨μ΄μ Έμμ
=> μΌμ΄ μ§νλλ λ°©μμΌλ‘ κ·Έμ μ½λλ₯Ό ꡬννλ©΄ λκΈ°μ μ½λμ κ°λ μ±μ΄ μ’κ³ μ€ν μλκ° λΉ λ¦
(κ³μ°μ΄ λ§μ μμ λ±μ μ°μ)
λ¨μ μΌλ‘λ λͺ¨λννκΈ°κ° μ΄λ ΅κ³ μ μ§ λ³΄μμ±μ΄ λ¨μ΄μ§λ€λ μ μ΄ μκΈ΄ν¨
const ret = [1, 2, 3, 4, 5, 11, 12]
let a = 0
for (let i = 0; i < ret.length; i++) {
a = Math.max(ret[i], a)
}
console.log(a) // 12
1.2.4 ν¨λ¬λ€μμ νΌν©
'μ΄λ ν ν¨λ¬λ€μμ΄ κ°μ₯ μ’λ€' λΌλ μ λ΅μ μκ³ λΉμ¦λμ€ λ‘μ§μ΄λ μλΉμ€μ νΉμ§μ κ³ λ €ν΄μ ν¨λ¬λ€μμ μ νλ κ²μ΄ κ°μ₯ μ’μ
νλμ ν¨λ¬λ€μμ κΈ°λ°μΌλ‘ ν΅μΌνμ¬ μλΉμ€λ₯Ό ꡬμΆνλ κ²λ μ’μ§λ§ μ¬λ¬ ν¨λ¬λ€μμ μ‘°ν©νμ¬ μν©κ³Ό λ§₯λ½μ λ°λΌ ν¨λ¬λ€μ κ°μ μ₯μ λ§ μ·¨ν΄ κ°λ°νλ κ²μ΄ μ’μ
=> λ°±μλμ λ¨Έμ λ¬λ νμ΄νλΌμΈκ³Ό κ±°λ κ΄λ ¨ λ‘μ§μ΄ μλ€λ©΄ λ¨Έμ λ¬λ νμ΄νλΌμΈμ μ μ°¨μ§ν₯ν ν¨λ¬λ€μ, κ±°λ κ΄λ ¨ λ‘μ§μ ν¨μν νλ‘κ·Έλλ°μ μ μ©νλ κ²μ΄ μ’μ
'π» CS' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[CS μ 곡μ§μ λ ΈνΈ] IP μ£Όμ (0) | 2025.02.07 |
---|---|
[CS μ 곡μ§μ λ ΈνΈ] λ€νΈμν¬ κΈ°κΈ° (0) | 2025.02.05 |
[CS μ 곡μ§μ λ ΈνΈ] TCP/IP 4κ³μΈ΅ λͺ¨λΈ (0) | 2025.02.03 |
[CS μ 곡μ§μ λ ΈνΈ] λ€νΈμν¬μ κΈ°μ΄ (0) | 2025.02.01 |
[CS μ 곡μ§μ λ ΈνΈ] λμμΈ ν¨ν΄ (1) | 2025.01.27 |