-
[ λ©΄μ μ μν cs μ 곡μ§μ λ ΈνΈ μ 리 ] 1. λμμΈ ν¨ν΄κ³Ό νλ‘κ·Έλλ° ν¨λ¬λ€μ : νλ‘κ·Έλλ° ν¨λ¬λ€μBook 2024. 4. 12. 15:37λ°μν
νλ‘κ·Έλλ° ν¨λ¬λ€μμ΄λ ?
νλ‘κ·Έλλ¨Έμκ² νλ‘κ·Έλλ°μ κ΄μ μ κ°κ² ν΄μ£Όλ μν μ νλ κ°λ° λ°©λ²λ‘
νλ‘κ·Έλλ° ν¨λ¬λ€μμ ν¬κ² μ μΈν, λͺ λ ΉνμΌλ‘ λλλ©°, μ μΈνμ ν¨μνμ΄λΌλ νμ μ§ν©μ κ°κ³ λͺ λ Ήνμ λ€μ κ°μ²΄μ§ν₯, μ μ°¨μ§ν₯μΌλ‘ λλλ€.
1.2 νλ‘κ·Έλλ° ν¨λ¬λ€μ
1.2.1 μ μΈνκ³Ό ν¨μν νλ‘κ·Έλλ°
1.2.2 κ°μ²΄μ§ν₯ νλ‘κ·Έλλ°
1.2.3 μ μ°¨ν νλ‘κ·Έλλ°
1.2.4 ν¨λ¬λ€μμ νΌν©
1.2 νλ‘κ·Έλλ° ν¨λ¬λ€μ
1.2.1 μ μΈνκ³Ό ν¨μν νλ‘κ·Έλλ°
- μ μΈνκ³Ό ν¨μν νλ‘κ·Έλλ°(declarative programming)μ μ μ
- '무μμ' νμ΄λ΄λκ°μ μ§μ€νλ ν¨λ¬λ€μμΌλ‘, 'μμν¨μ'λ€μ λΈλ‘μ²λΌ μμ λ‘μ§μ ꡬννκ³ 'κ³ μ°¨ ν¨μ'λ₯Ό ν΅ν΄ μ¬μ¬μ©μ±μ λμΈ νλ‘κ·Έλλ° ν¨λ¬λ€μμ΄λ€.
- "νλ‘κ·Έλ¨μ ν¨μλ‘ μ΄λ£¨μ΄μ§ κ²μ΄λ€."λΌλ λͺ μ κ° λ΄κ²¨μλ ν¨λ¬λ€μμ΄κΈ°λ νλ©°, ν¨μν νλ‘κ·Έλλ°(functional programming)μ μ μΈν ν¨λ¬λ€μμ μΌμ’ μ΄λ€.
- μμν¨μ
- μΆλ ₯μ΄ μ λ ₯μλ§ μμ‘΄νλ κ²μ μλ―Ένλ©°, λ§μ½ λ€λ₯Έ μ μλ³μ λ±μ΄ μΆλ ₯μ μν₯μ μ£Όλ©΄ μμν¨μκ° μλλ€.
- κ³ μ°¨ ν¨μ
- ν¨μκ° ν¨μλ₯Ό κ°μ²λΌ 맀κ°λ³μλ‘ λ°μ λ‘μ§μ μμ±ν μ μλ κ²μ λ§νλ€.
- μΌκΈκ°μ²΄
κ³ μ°¨ ν¨μλ₯Ό μ°κΈ° μν΄μλ ν΄λΉ μΈμ΄κ° μΌκΈ κ°μ²΄λΌλ νΉμ§μ κ°μ ΈμΌ νλ©° κ·Έ νΉμ§μ μλμ κ°λ€.
- λ³μλ λ©μλμ ν¨μλ₯Ό ν λΉν μ μμ
- ν¨μ μμ ν¨μλ₯Ό 맀κ°λ³μλ‘ λ΄μ μ μμ
- ν¨μκ° ν¨μλ₯Ό λ°νν μ μμ
1.2.2 κ°μ²΄μ§ν₯ νλ‘κ·Έλλ°
- κ°μ²΄μ§ν₯ νλ‘κ·Έλλ°(OOP, Object-Oriented Programming)μ μ μ
- κ°μ²΄λ€μ μ§ν©μΌλ‘ νλ‘κ·Έλ¨μ μνΈ μμ©μ νννλ©° λ°μ΄ν°λ₯Ό κ°μ²΄λ‘ μ·¨κΈνμ¬ κ°μ²΄ λ΄λΆμ μ μΈλ λ©μλλ₯Ό νμ©νλ λ°©μμ λ§νλ€.
- μ€κ³μ λ§μ μκ°μ΄ μμλλ©°, μ²λ¦¬ μλκ° λ€λ₯Έ νλ‘κ·Έλλ° ν¨λ¬λ€μμ λΉν΄ μλμ μΌλ‘ λ리λ€.
- κ°μ²΄μ§ν₯ νλ‘κ·Έλλ°μ νΉμ§
- μΆμν(abstraction)
볡μ‘ν μμ€ν μΌλ‘λΆν° ν΅μ¬μ μΈ κ°λ λλ κΈ°λ₯μ κ°μΆλ €λ΄λ κ² - μΊ‘μν(encapsulation)
κ°μ²΄μ μμ±κ³Ό λ©μλλ₯Ό νλλ‘ λ¬Άκ³ μΌλΆλ₯Ό μΈλΆμ κ°μΆμ΄ μλνλ κ² - μμμ±(inheriance)
μμ ν΄λμ€μ νΉμ±μ νμ ν΄λμ€κ° μ΄μ΄λ°μμ μ¬μ¬μ©νκ±°λ μΆκ°,νμ₯νλ κ²
μ½λμ μ¬μ¬μ© μΈ‘λ©΄, κ³μΈ΅μ μΈ κ΄κ³ μμ±, μ μ§λ³΄μμ± μΈ‘λ©΄μμ μ€μ - λ€νμ±(polymoriphism)
νλμ λ©μλλ ν΄λμ€κ° λ€μν λ°©λ²μΌλ‘ λμνλ κ²
- μ€λ²λ‘λ©(overloading) : κ°μ μ΄λ¦μ κ°μ§ λ©μλλ₯Ό μ¬λ¬κ° λλ κ²
λ©μλμ νμ , 맀κ°λ³μμ μ ν, κ°μ λ±μΌλ‘ μ¬λ¬ κ°λ₯Ό λ μ μμΌλ©° μ»΄νμΌ μ€μ λ°μνλ μ μ λ€νμ±
class Person { public void eat(String a) { System.out.println("I eat " + a); } public void eat(String a, String b) { System.out.println("I eat " + a + " and " + b); } } public class CalculateArea { public static void main(String[] args) { Person a = new Person(); a.eat("apple"); a.eat("tomato", "phodo"); } } /* I eat apple I eat tomato and phodo */
- μ€λ²λΌμ΄λ©(overriding) : μμ ν΄λμ€λ‘λΆν° μμλ°μ λ©μλλ₯Ό νμ ν΄λμ€κ° μ¬μ μνλ κ²
class Animal { public void bark() { System.out.println("mumu! mumu!"); } } class Dog extends Animal { @Override public void bark() { System.out.println("wal!!! wal!!!"); } } public class Main { public static void main(String[] args) { Dog d = new Dog(); d.bark(); } } /* wal!!! wal!!! */
- μ€κ³μμΉ (SOLID μμΉ)
- λ¨μΌ μ±
μ μμΉ(SRP, Single Responsibility Principle)
λͺ¨λ ν΄λμ€λ κ°κ° νλμ μ± μλ§ κ°μ ΈμΌ νλ€λ μμΉ
AλΌλ λ‘μ§μ΄ μ‘΄μ¬νλ€λ©΄ μ΄λ ν ν΄λμ€λ Aμ λν ν΄λμ€μ¬μΌ νκ³ μ΄λ₯Ό μμ νλ€κ³ ν΄λ Aμ κ΄λ ¨λ μμ μ΄μ΄μΌ ν¨ - κ°λ°©-νμ μμΉ(OCP, Open Closed Prinsiple)
μ μ§λ³΄μ μ¬νμ΄ μκΈ΄λ€λ©΄ μ½λλ₯Ό μ½κ² νμ₯ν μ μκ² νκ³ μμ ν λλ λ«ν μμ΄μΌ νλ μμΉ
κΈ°μ‘΄μ μ½λλ μ λ³κ²½νμ§ μμΌλ©΄μ νμ₯μ μ½κ² ν μ μμ΄μΌ ν¨ - μ€μ½ν μΉν μμΉ(LSP, Liskov Substritution Principle)
νλ‘κ·Έλ¨μ κ°μ²΄λ νλ‘κ·Έλ¨μ μ νμ±μ κΉ¨λ¨λ¦¬μ§ μμΌλ©΄μ νμ νμ μ μΈμ€ν΄μ€λ‘ λ°κΏ μ μμ΄μΌνλ μμΉ
μμλ λΆλͺ¨, μμ κ³μΈ΅μμ λΆλͺ¨ κ°μ²΄μ μμ κ°μ²΄λ₯Ό λ£μ΄λ μμ€ν μ΄ λ¬Έμ μμ΄ λμκ°κ² λ§λλ κ² - μΈν°νμ΄μ€ λΆλ¦¬ μμΉ(ISP, Interface Segragation Principle)
νλμ μΌλ°μ μΈ μΈν°νμ΄μ€λ³΄λ€ ꡬ체μ μΈ μ¬λ¬ κ°μ μΈν°νμ΄μ€λ₯Ό λ§λ€μ΄μΌ νλ μμΉ - μμ‘΄ μμ μμΉ(DIP, Dependency Inversion Principle)
μμ λ³΄λ€ λ³νκΈ° μ¬μ΄ κ²μ μμ‘΄νλ κ²μ μΆμνλ μΈν°νμ΄μ€λ μμ ν΄λμ€λ₯Ό λμ΄ λ³νκΈ° μ¬μ΄ κ²μ λ³νμ μν₯λ°μ§ μκ² νλ μμΉ
μμ κ³μΈ΅μ νμ κ³μΈ΅μ λ³νμ λν ꡬνμΌλ‘λΆν° λ 립ν΄μΌ ν¨
μλ₯Όλ€λ©΄ μλμ°¨μ νμ΄μ΄λ₯Ό κ°μλΌμΈ μ μλ νμ λ§λ€κ³ λ€μν νμ΄μ΄λ₯Ό κ΅μ²΄ν μ μκ² λ§λ€μ΄μΌ ν¨
1.2.3 μ μ°¨ν νλ‘κ·Έλλ°
- μ μ°¨ν νλ‘κ·Έλλ°(Procedural Programming)μ μ μ
- λ‘μ§μ΄ μνλμ΄μΌ ν μ°μμ μΈ κ³μ° κ³Όμ μΌλ‘ μ΄λ£¨μ΄μ Έ μμΌλ©°, μΌμ΄ μ§νλλ λ°©μμΌλ‘ μ½λλ₯Ό ꡬννκΈ°λ§ νλ©΄ λκΈ° λλ¬Έμ μ½λμ κ°λ μ±μ΄ μ’μΌλ©° μ€ν μλκ° λΉ¨λΌ κ³μ°μ΄ λ§μ μμ λ±μ μ°μΈλ€.
- μ μ°¨ν νλ‘κ·Έλλ°(Procedural Programming)μ μ¬μ©μμ
- ν¬νΈλ(fortran)μ μ΄μ©ν λκΈ° κ³Όν κ΄λ ¨ μ°μ°μμ , λ¨Έμ λ¬λμ λ°°μΉ μμ λ±
- μ μ°¨ν νλ‘κ·Έλλ°(Procedural Programming)μ λ¨μ
- λͺ¨λννκΈ°κ° μ΄λ ΅κ³ μ μ§ λ³΄μμ±μ΄ λ¨μ΄μ§λ€.
1.2.4 ν¨λ¬λ€μμ νΌν©
νλμ ν¨λ¬λ€μμ κΈ°λ°μΌλ‘ ν΅μΌνμ¬ μλΉμ€λ₯Ό ꡬμΆν μλ μκ³ , μ¬λ¬ ν¨λ¬λ€μμ μ₯μ λ§ μ‘°ν©ν΄ μν©κ³Ό λ§₯λ½μ λ°λΌ κ°λ°νλ κ²λ μ’λ€.
μλ₯Ό λ€μ΄ λ°±μλμ λ¨Έμ λ¬λ νμ΄νλΌμΈκ³Ό κ±°λ κ΄λ ¨ λ‘μ§μ΄ μλ€λ©΄ λ¨Έμ λ¬λ νμ΄νλΌμΈμ μ μ°¨μ§ν₯ν ν¨λ¬λ€μ, κ±°λ κ΄λ ¨ λ‘μ§μ ν¨μν νλ‘κ·Έλλ°μ μ μ©νλ κ²μ΄ μ’λ€.
λ°μν'Book' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ