CS 곡뢀

RESTful API, OOP, μ ‘κ·Όμ œμ–΄μž

은진 2021. 9. 23. 21:08

[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 ~ 동일 νŒ¨ν‚€μ§€ 내뢀에 μžˆλŠ” ν΄λž˜μŠ€μ—μ„œλ§Œ 접근이 κ°€λŠ₯ν•©λ‹ˆλ‹€.