undefined

라이브러리, νŒ¨ν‚€μ§€, μ˜€ν”ˆ μ†ŒμŠ€ λ“±μ˜ μ™ΈλΆ€ μ½”λ“œλ₯Ό 우리 μ½”λ“œμ— ν†΅ν•©μ‹œν‚€λŠ” 방법과

이런 μ†Œν”„νŠΈμ›¨μ–΄ 경계λ₯Ό κΉ”λ”ν•˜κ²Œ μ²˜λ¦¬ν•˜λŠ” 방법에 λŒ€ν•΄ μ•Œμ•„λ³Έλ‹€.

μ†Œν”„νŠΈμ›¨μ–΄ κ²½κ³„λž€, μΈν„°νŽ˜μ΄μŠ€ μ œκ³΅μžμ™€ μ‚¬μš©μž μ‚¬μ΄μ˜ μž…μž₯ 차이둜 λ°œμƒν•˜λŠ” 경계

 

  • μΈν„°νŽ˜μ΄μŠ€ μ œκ³΅μžλŠ” μ΅œλŒ€ν•œ μ μš©μ„±μ„ λ„“νžˆλŠ” λ°©ν–₯으둜 μ„€κ³„ν•œλ‹€.
  • μΈν„°νŽ˜μ΄μŠ€ μ‚¬μš©μžλŠ” μžμ‹ μ˜ μš”κ΅¬μ— μ§‘μ€‘ν•˜λŠ” μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ›ν•œλ‹€.

μ™ΈλΆ€ μ½”λ“œ μ‚¬μš©ν•˜κΈ°

예λ₯Ό λ“€μ–΄ Map κ°μ²΄λŠ” ꡉμž₯히 λ‹€μ–‘ν•œ μΈν„°νŽ˜μ΄μŠ€λ‘œ μˆ˜λ§Žμ€ κΈ°λŠ₯을 μ œκ³΅ν•˜λŠ”λ°, 이런 μœ μ—°μ„±μ€ μœ μš©ν•˜μ§€λ§Œ 그만큼 μœ„ν—˜μ΄ 크닀.

  • 객체 μœ ν˜•μ„ μ œν•œν•˜μ§€ μ•ŠλŠ”λ‹€. μ–΄λ–€ νƒ€μž…μ˜ 객체도 μΆ”κ°€ν•  수 μžˆλ‹€.
  • μ‚¬μš©μžμ—κ²Œ ν•„μš”ν•˜μ§€ μ•Šμ€ κΈ°λŠ₯κΉŒμ§€ μ œκ³΅ν•œλ‹€.
    • λˆ„κ΅¬λ‚˜ λ‚΄μž₯된 clear() ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜μ—¬ λ‚΄μš©μ„ μ§€μ›Œλ²„λ¦΄ κ°€λŠ₯성이 μžˆλ‹€.

 

μ œλ„ˆλ¦­ μ‚¬μš©ν•˜κΈ°

const sensors = new Map<string, Sensor>();
  • 객체 μœ ν˜•μ„ 지정할 수 μžˆλ‹€.

 

경계 μΈν„°νŽ˜μ΄μŠ€λ₯Ό μΊ‘μŠν™”ν•˜κΈ°

class Sensors {
    private sensors = new Map<string, Sensor>();

    getById(id: string) {
        return sensors.get(id)
    }
}
  • ν•„μš”ν•œ μΈν„°νŽ˜μ΄μŠ€λ§Œ μ œκ³΅ν•  수 μžˆλ‹€.
  • 섀계 κ·œμΉ™κ³Ό λΉ„μ¦ˆλ‹ˆμŠ€ κ·œμΉ™μ„ λ”°λ₯΄λ„둝 κ°•μ œν•  수 μžˆλ‹€.

경계 μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ΄μš©ν•  λ•ŒλŠ” 이λ₯Ό μ΄μš©ν•˜λŠ” ν΄λž˜μŠ€λ‚˜ 클래슀 계열 λ°–μœΌλ‘œ λ…ΈμΆœλ˜μ§€ μ•Šλ„λ‘ μ£Όμ˜ν•œλ‹€.

경계 μΈν„°νŽ˜μ΄μŠ€μ˜ μΈμŠ€ν„΄μŠ€λ₯Ό 곡개 API의 인수둜 λ„˜κΈ°κ±°λ‚˜ λ°˜ν™˜κ°’μœΌλ‘œ μ‚¬μš©ν•˜μ§€ μ•ŠλŠ”λ‹€.

 

경계 μ‚΄ν”Όκ³  읡히기

μ™ΈλΆ€ μ½”λ“œλ₯Ό μ‚¬μš©ν•˜κΈ° 전에 ν•™μŠ΅ ν…ŒμŠ€νŠΈλ₯Ό 톡해 μ™ΈλΆ€ μ½”λ“œλ₯Ό μ΅νžŒλ‹€.

ν•™μŠ΅ ν…ŒμŠ€νŠΈ: κ°„λ‹¨ν•œ ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€λ₯Ό μž‘μ„±ν•˜μ—¬ ν”„λ‘œκ·Έλž¨μ—μ„œ μ‚¬μš©ν•˜λ €λŠ” λ°©μ‹λŒ€λ‘œ μ™ΈλΆ€ APIλ₯Ό ν˜ΈμΆœν•˜λŠ” 것

  • ν†΅μ œλœ ν™˜κ²½μ—μ„œ APIλ₯Ό μ œλŒ€λ‘œ μ΄ν•΄ν•˜λŠ”μ§€ 확인할 수 μžˆλ‹€.
  • APIλ₯Ό μ‚¬μš©ν•˜λ €λŠ” λͺ©μ μ— μ΄ˆμ μ„ λ§žμΆ”μ–΄ ν…ŒμŠ€νŠΈν•  수 μžˆλ‹€.

 

ν•™μŠ΅ ν…ŒμŠ€νŠΈλŠ” 곡짜 이상이닀.

ν•™μŠ΅ ν…ŒμŠ€νŠΈμ—μ„œ μ‚¬μš©ν•˜λŠ” ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€λŠ” μ‹€μ œ μ½”λ“œμ™€ λ™μΌν•œ λ°©μ‹μœΌλ‘œ μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ‚¬μš©ν•˜λŠ” μ½”λ“œμ΄λ‹€.

λ”°λΌμ„œ ν•™μŠ΅ ν…ŒμŠ€νŠΈλŠ”,

  • νŒ¨ν‚€μ§€κ°€ μ˜ˆμƒλŒ€λ‘œ μž‘λ™ν•˜λŠ”μ§€ κ²€μ¦ν•œλ‹€.
  • νŒ¨ν‚€μ§€κ°€ μƒˆλ‘œμš΄ 버전을 λ¦΄λ¦¬μ¦ˆν–ˆμ„ λ•Œ κΈ°μ‘΄ μ½”λ“œμ™€ ν˜Έν™˜λ˜μ§€ μ•ŠμœΌλ©΄ ν•™μŠ΅ ν…ŒμŠ€νŠΈκ°€ 이λ₯Ό λ°”λ‘œ μ•Œμ•„λ‚Ό 수 μžˆλ‹€.
    • μƒˆ λ²„μ „μœΌλ‘œ μ΄μ „ν•˜κΈ° μ‰¬μ›Œμ§„λ‹€.

 

아직 μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ” μ½”λ“œλ₯Ό μ‚¬μš©ν•˜κΈ°

μ•„λŠ” μ½”λ“œμ™€ λͺ¨λ₯΄λŠ” μ½”λ“œ μ‚¬μ΄μ˜ 경계가 μ‘΄μž¬ν•œλ‹€.

아직 μ •μ˜λ˜μ§€ μ•Šμ€ 경계 λ„ˆλ¨Έμ˜ apiλ₯Ό μΈν„°νŽ˜μ΄μŠ€λ‘œ λΆ„λ¦¬ν•˜κ³  μΊ‘μŠν™”ν•˜μ—¬, APIκ°€ λ°”λ€” λ•Œ μˆ˜μ •ν•  μ½”λ“œλ₯Ό ν•œ 곳으둜 λͺ¨μ•„λ†“λŠ”λ‹€.

  • μš°λ¦¬μ—κ²Œ ν•„μš”ν•œ μΈν„°νŽ˜μ΄μŠ€λ₯Ό 미리 κ΅¬ν˜„ν•΄ λ†“λŠ”λ‹€. → apiκ°€ μ •μ˜λœ ν›„ κ·Έ 간극을 Adapter 클래슀둜 λ©”κΎΌλ‹€.
    • μ „μ μœΌλ‘œ μΈν„°νŽ˜μ΄μŠ€λ₯Ό ν†΅μ œν•  수 μžˆλ‹€λŠ” μž₯점이 생김
  • μ μ ˆν•œ Fake 클래슀λ₯Ό μ‚¬μš©ν•˜λ©΄ ν…ŒμŠ€νŠΈκ°€ κ°€λŠ₯ν•˜λ‹€.
    • apiκ°€ μ •μ˜λœ ν›„ 경계 ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€λ₯Ό μƒμ„±ν•΄μ„œ μ˜¬λ°”λ₯΄κ²Œ μ‚¬μš©ν•˜λŠ”μ§€ ν…ŒμŠ€νŠΈν•  수 μžˆλ‹€.

 

κΉ¨λ—ν•œ 경계

  • 경계에 μœ„μΉ˜ν•˜λŠ” μ½”λ“œλŠ” κΉ”λ”νžˆ λΆ„λ¦¬ν•œλ‹€.
  • κΈ°λŒ€μΉ˜λ₯Ό μ •μ˜ν•˜λŠ” ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€λ₯Ό μž‘μ„±ν•œλ‹€.
  • ν†΅μ œκ°€ λΆˆκ°€λŠ₯ν•œ μ™ΈλΆ€ νŒ¨ν‚€μ§€μ— μ˜μ‘΄ν•˜λŠ” λŒ€μ‹  ν†΅μ œκ°€ κ°€λŠ₯ν•œ 우리 μ½”λ“œμ— μ˜μ‘΄ν•˜λŠ” 편이 훨씬 μ’‹λ‹€.
  • μ™ΈλΆ€ νŒ¨ν‚€μ§€λ₯Ό ν˜ΈμΆœν•˜λŠ” μ½”λ“œλ₯Ό κ°€λŠ₯ν•œ 쀄여 경계λ₯Ό κ΄€λ¦¬ν•˜μž.
    • μƒˆλ‘œμš΄ 클래슀둜 경계λ₯Ό 감싸기
    • ADAPTER νŒ¨ν„΄μ„ μ‚¬μš©ν•΄ μš°λ¦¬κ°€ μ›ν•˜λŠ” μΈν„°νŽ˜μ΄μŠ€λ₯Ό νŒ¨ν‚€μ§€κ°€ μ œκ³΅ν•˜λŠ” μΈν„°νŽ˜μ΄μŠ€λ‘œ λ³€ν™˜

이런 λ°©μ‹μœΌλ‘œ 경계λ₯Ό μ²˜λ¦¬ν•˜λ©΄ μ½”λ“œ 가독성과 일관성이 μ’‹μ•„μ Έ μ™ΈλΆ€ νŒ¨ν‚€μ§€κ°€ λ³€ν•  λ•Œ λ³€κ²½ν•  μ½”λ“œκ°€ 쀄어든닀.


마무리

ν•™μŠ΅ ν…ŒμŠ€νŠΈλž€ 기법을 처음 μ•Œκ²Œ λ˜μ—ˆλ‹€.

비단 μ™ΈλΆ€ 라이브러리λ₯Ό μ‚¬μš©ν•  λ•ŒλΏ μ•„λ‹ˆλΌ, λ‹€λ₯Έ κ°œλ°œμžκ°€ λ§Œλ“  μ»΄ν¬λ„ŒνŠΈλ₯Ό μ‚¬μš©ν•  λ•Œλ„ 이 기법을 ν™œμš©ν•˜λ©΄ μ‰½κ²Œ μ‚¬μš©λ²•μ„ 읡히고 μ˜ˆμƒν•œ λŒ€λ‘œ λ™μž‘ν•˜λŠ”μ§€ 확인할 수 μžˆμ„ 것 κ°™λ‹€.

 

ν”„λ‘ νŠΈμ—”λ“œ κ°œλ°œμ„ ν•˜λ‹€ 보면 λ°±μ—”λ“œμ—μ„œ API λͺ…μ„Έλ₯Ό 전달해 μ£ΌκΈ° 전에 미리 μž‘μ—…μ„ μ‹œμž‘ν•˜λŠ” κ²½μš°κ°€ λ§Žμ€λ° 항상 고민이 λ˜λŠ” 뢀뢄이닀.

μ±…μ—μ„œ λ‚˜μ˜¨ ADAPTER νŒ¨ν„΄μ„ μ μš©ν•˜λ©΄ api λͺ…μ„Έκ°€ 변경될 λ•Œ ν•œ 곳에 λͺ¨μ•„λ‘” μ½”λ“œλ§Œ λ³€κ²½ν•˜λ©΄ 되기 λ•Œλ¬Έμ— λΉ λ₯΄κ²Œ λŒ€μ‘ν•  수 μžˆλ‹€λŠ” μž₯점이 μžˆλ‹€.

ν•˜μ§€λ§Œ λ°±μ—”λ“œμ—μ„œ λ³΄λ‚΄μ£ΌλŠ” 데이터와 ν”„λ‘ νŠΈμ—μ„œ UI에 λΏŒλ €μ£ΌλŠ” λ°μ΄ν„°μ™€μ˜ 간극이 μ‹¬ν•΄μ§ˆ 수 μžˆλ‹€λŠ” 단점이 μžˆλ‹€.

또 AdapterλΌλŠ” 계측이 ν•˜λ‚˜ μΆ”κ°€λ˜λŠ” 것이기 λ•Œλ¬Έμ— μ½”λ“œκ°€ λ³΅μž‘ν•΄μ§ˆ μ—Όλ €κ°€ μžˆλ‹€.

ν”„λ‘ νŠΈμ—”λ“œμ— μ μš©ν•˜κΈ°μ—λŠ” 쑰금 κΉŒλ‹€λ‘œμš΄ λ‚΄μš©μ΄μ—ˆμ§€λ§Œ 경계λ₯Ό κ΅¬λΆ„ν•˜κ³  μ–΄λ–»κ²Œ λ§€λ„λŸ½κ²Œ μ²˜λ¦¬ν•  수 μžˆμ„μ§€ κ³ λ―Όν•΄ λ³Ό 수 μžˆμ—ˆλ‹€.