RESTful API, OOP, μ κ·Όμ μ΄μ
[1] RESTful APIλ?
1. μΉ μ ν리μΌμ΄μ μμ μ‘΄μ¬νλ λͺ¨λ 리μμ€μ λν΄ κ³ μ μ URIλ₯Ό λΆμ¬νκ³
- HTTP URIλ₯Ό ν΅ν΄ μμμ λͺ μνλ€.
- 리μμ€λ λ―Έλμ΄, DB λ°μ΄ν° λ±μ λͺ¨λ ν¬ν¨νλ€.
2. HTTP Method(GET, POST, PUT, DELETE)λ₯Ό μ΄μ©ν΄ 리μμ€μ λν΄ CRUD (CREATE, READ, UPDATE, DELETE) λͺ λ Ήμ μ μ©νλ κ²μ μλ―Ένλ€.
- HTTP Method
POST URI μμ² μ 리μμ€λ₯Ό μμ±νλ€. (CREATE) GET 리μμ€ μ‘°ν λ° μμΈν μ 보λ₯Ό κ°μ Έμ¨λ€. (READ) PUT 리μμ€λ₯Ό μμ νλ€. (UPDATE) DELETE 리μμ€λ₯Ό μμ νλ€.
- REST = Representational State Transfer μ μ½μ (λν μν μ λ¬)
- μμμ μ΄λ¦μΌλ‘ ꡬλΆνμ¬(λͺ
μνμ¬) ν΄λΉ μμμ μ 보(μν)λ₯Ό μ£Όκ³ λ°λ λͺ¨λ κ²μ μλ―Ένλ€.
μ¦, μμ(resource)μ νν(representation)μ μν μν μ λ¬
- μμ - URI λΆμ¬, μμ λͺ μ
- νμ(Verb) - HTTP METHOD
- νν
- μμ(resource)μ νν(representation)
- μμ : ν΄λΉ μννΈμ¨μ΄κ° κ΄λ¦¬νλ λͺ¨λ κ²
Ex) λ¬Έμ, κ·Έλ¦Ό, λ°μ΄ν°, ν΄λΉ μννΈμ¨μ΄ μ체 λ±μ λ§νλ€. - μμμ νν : κ·Έ μμμ νννκΈ° μν μ΄λ¦
Ex) DBμ νμ μ λ³΄κ° μμμΌ λ, ‘students’λ₯Ό μμμ ννμΌλ‘ μ νλ€.
- μμ : ν΄λΉ μννΈμ¨μ΄κ° κ΄λ¦¬νλ λͺ¨λ κ²
- μν(μ 보) μ λ¬
- λ°μ΄ν°κ° μμ²λλ μμ μμ μμμ μν(μ 보)λ₯Ό μ λ¬νλ€.
- JSON νΉμ XMLλ₯Ό ν΅ν΄ λ°μ΄ν°λ₯Ό μ£Όκ³ λ°λ κ²μ΄ μΌλ°μ μ΄λ€.
- μ₯μ
- RESTλ κΈ°λ³Έμ μΌλ‘ μΉμ κΈ°μ‘΄ κΈ°μ κ³Ό HTTP νλ‘ν μ½μ κ·Έλλ‘ νμ©νκΈ° λλ¬Έμ μΉμ μ₯μ μ μ΅λν νμ©ν μ μλ μν€ν μ² μ€νμΌμ΄λ€.
- RESTλ λ€νΈμν¬ μμμ Clientμ Server μ¬μ΄μ ν΅μ λ°©μ μ€ νλμ΄λ€.
[2] OOPμ μ₯μ ?
OOPμ μ₯μ κ³Ό λ¨μ
μ₯μ : μ½λμ μ¬μ¬μ©μ±μ΄ λμμ§λ€. μ μ§λ³΄μκ° μ½λ€. μ½λκ° κ°κ²°ν΄μ§λ€.
λ¨μ : μ²λ¦¬ μκ°μ΄ λΉκ΅μ μ€λ κ±Έλ¦°λ€. νλ‘κ·Έλ¨μ μ€κ³ν λ λ§μ κ³ λ―Όκ³Ό μκ°μ ν¬μν΄μΌνλ€.
OOPμ 5μμΉ (SOLID)
- S (SRP : Single Responsibility Principle) : ν ν΄λμ€λ νλμ μ± μλ§ κ°μ ΈμΌ νλ€.
- O (OCP : Open/Closed Principle) : νμ₯μλ μ΄λ €(Open) μμΌλ, λ³κ²½μλ λ«ν(Closed)μμ΄μΌ νλ€.
- L (LSP : Liskov’s Substitution Principle) : νλ‘κ·Έλ¨μ κ°μ²΄λ νλ‘κ·Έλ¨μ μ νμ±μ κΉ¨λ¨λ¦¬μ§ μμΌλ©΄μ νμ νμ μ μΈμ€ν΄μ€λ‘ λ°κΏ μ μμ΄μΌ νλ€.
- I (ISP : Interface Segregation Principle) : νΉμ ν΄λΌμ΄μΈνΈλ₯Ό μν μΈν°νμ΄μ€ μ¬λ¬ κ°κ° λ²μ© μΈν°νμ΄μ€ νλλ³΄λ€ λ«λ€.
- D (DIP : Dependency Inversion Principle) : μΆμνμ μμ‘΄νλ€. ꡬ체νμ μμ‘΄νλ©΄ μλλ€.
κ°μ²΄μ§ν₯ νλ‘κ·Έλλ°(OOP)μ κ°λ
- μ»΄ν¨ν° νλ‘κ·Έλλ°μ ν¨λ¬λ€μ μ€ νλλ‘ μ»΄ν¨ν° νλ‘κ·Έλ¨μ λͺ λ Ήμ΄ λͺ©λ‘μΌλ‘ 보λ μκ°μμ λ²μ΄λ μ¬λ¬ κ°μ λ 립λ λ¨μ, μ¦ "κ°μ²΄"λ€μ λͺ¨μμΌλ‘ νμ νκ³ μ νλ κ²μ΄λ€.
- κ°κ°μ κ°μ²΄λ λ©μμ§λ₯Ό μ£Όκ³ λ°κ³ , λ°μ΄ν°λ₯Όμ²λ¦¬ν μ μλ€.
- νλ‘κ·Έλ¨μ μ μ°νκ³ λ³κ²½μ΄ μ©μ΄νκ² λ§λ€κΈ° λλ¬Έμ λκ·λͺ¨ μννΈμ¨μ΄ κ°λ°μ λ§μ΄ μ¬μ©λλ€.
- νλ‘κ·Έλλ°μ λ λ°°μ°κΈ° μ½κ² νκ³ μννΈμ¨μ΄ κ°λ°κ³ 보μλ₯Ό κ°νΈνκ² νλ©° λ³΄λ€ μ§κ΄μ μΈ μ½λ λΆμμ κ°λ₯νκ² νλ μ₯μ μ΄ μλ€.
κ°μ²΄μ§ν₯ νλ‘κ·Έλλ°μ ꡬμ±μμ 3κ°μ§
- ν΄λμ€, κ°μ²΄, λ©μλ
- ν΄λμ€ : κ°μ μ’ λ₯μ μ§λ¨μ μνλ μμ±κ³Ό νμλ₯Ό μ μν ν° νμ΄λ€. λ€λ₯Έ ν΄λμ€ λλ μΈλΆ μμμ λ 립μ μΌλ‘ λμμΈλλ€.
- κ°μ²΄ : ν΄λμ€μ μΈμ€ν΄μ€μ΄λ€. ν΄λμ€μμ μ μν νμλ₯Ό μννλ€. μμ κ³ μ μ μμ±μ κ°μ§λ€.
- μ¬λμ΄λΌλ ν΄λμ€μ κ°μμ μ΄λ¦μ κ°μ§λ κ°κ°μ μ¬λμ΄ κ°μ²΄μ΄λ€.
- λ©μλ : λ°μ΄ν°λ₯Ό μ΄μ©ν΄ κ°μ²΄κ° μλν κΈ°λ₯μ μ μν κ²μ΄λ€. (μ μ°¨μ νλ‘κ·Έλλ°μμ νλ‘μμ )
κ°μ²΄μ§ν₯ νλ‘κ·Έλλ°μ νΉμ§ 4κ°μ§
1. μΆμν(Abstraction) - μ°λ¦¬κ° ꡬννλ κ°μ²΄λ€μ΄ κ°μ§ 곡ν΅μ μΈ λ°μ΄ν°μ κΈ°λ₯μ λμΆν΄ λ΄λ κ²
2. μΊ‘μν(Encapsulation) - λ°μ΄ν° ꡬ쑰μ λ°μ΄ν°λ₯Ό λ€λ£¨λ λ°©λ²μ κ²°ν©ν΄ λ¬Άλ κ²
3. μμ(Inheritance) - μμκ°λ μ νΉμ§μ νμ κ°λ μ΄ λ¬Όλ €λ°λ κ²
4. λ€νμ±(Polymorphism) - μλ¬Όνμμ λμ¨ κ°λ μΌλ‘ κ°μ μ’ μ΄μ§λ§ κ°μμ μ±μ§μ λ°λΌ λΆλ₯νλ κ²
[3, Java] μ κ·Όμ μ΄μ
- Javaμμ μ 보 μλμ μν΄ μ κ·Ό μ μ΄μλ₯Ό μ 곡νλ€.
- κ°μ²΄ μ§ν₯μ μ 보 μλμ΄λ, μ¬μ©μκ° κ΅³μ΄ μ νμκ° μλ μ 보λ μ¬μ©μλ‘λΆν° μ¨κ²¨μΌ νλ€λ κ°λ
μ΄λ€.
μ¬μ©μλ μ΅μνμ μ 보λ§μΌλ‘ νλ‘κ·Έλ¨μ μμ½κ² μ¬μ©ν μ μλ€.
- κ°μ²΄ μ§ν₯μ μ 보 μλμ΄λ, μ¬μ©μκ° κ΅³μ΄ μ νμκ° μλ μ 보λ μ¬μ©μλ‘λΆν° μ¨κ²¨μΌ νλ€λ κ°λ
μ΄λ€.
- μ κ·Ό μ μ΄μλ‘ ν΄λμ€ μΈλΆμμμ μ§μ μ μΈ μ κ·Όμ νμ©νμ§ μλ λ©€λ²λ₯Ό μ€μ νμ¬ μ 보 μλμ ꡬ체νν μ μλ€.
- private -> default -> protected -> public μμΌλ‘ λ³΄λ€ λ§μ μ κ·Όμ νμ©νλ€.
- λ κ° μ΄μ λμμ μ¬μ©ν μ μλ€.
μ κ·Όμ μ΄μ | ννλ² | λ΄μ© |
public | + | μ΄λ€ ν΄λμ€μμλΌλ μ κ·Όμ΄ κ°λ₯ν©λλ€. |
private | - | ν΄λΉ ν΄λμ€ λ΄λΆμμλ§ μ κ·Όμ΄ κ°λ₯ν©λλ€. |
protected | # | λμΌ ν¨ν€μ§ λ΄μ ν΄λμ€ λλ ν΄λΉ ν΄λμ€λ₯Ό μμ λ°μ μΈλΆ ν¨ν€μ§μ ν΄λμ€μ μ κ·Όμ΄ κ°λ₯ν©λλ€. |
package | ~ | λμΌ ν¨ν€μ§ λ΄λΆμ μλ ν΄λμ€μμλ§ μ κ·Όμ΄ κ°λ₯ν©λλ€. |