Skip to content

πŸ“± 패슀트캠퍼슀, ν™•μž₯μ„± 높은 μ•± μ•„ν‚€ν…μ²˜ ꡬ좕 μ‹€μŠ΅(feat. Xcodegen) [η©Ί]

Notifications You must be signed in to change notification settings

MOON-HJ/ExtensibleAppArchitecture

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

ExtensibleAppArchitecture

πŸ“± 패슀트캠퍼슀, The RED : μŠˆνΌμ•± μš΄μ˜μ„ μœ„ν•œ ν™•μž₯μ„± 높은 μ•± μ•„ν‚€ν…μ²˜ ꡬ좕 곡뢀내역 정리 : πŸ”— FastCampus κ°•μ’Œλ§ν¬

패슀트캠퍼슀 κ°•μ˜μ½”λ“œμ— Xcodegen을 적용.


Scaleκ³Ό μ—°κ΄€λœ λ‹€μ–‘ν•œ 문제

κ°œλ°œμžκ°€ κ²ͺλŠ” 문제 μ‚¬μš©μžκ°€ κ²ͺλŠ” 문제
- λΉŒλ“œμ‹œκ°„ 증가
- μ½”λ“œ 좩돌 증가
- QA, 디버깅 μ‹œκ°„ 증가
- λŠμ΄μ§€ μ•ŠλŠ” νšŒκ·€ 버그
- 개발 μ†Œμš” μ‹œκ°„ 증가
- ...
- μ—‘ Startup μ‹œκ°„μ¦κ°€
- κ³Όλ„ν•œ λ¦¬μ†ŒμŠ€ μ‚¬μš©
- μ•± μš©λŸ‰ 증가
- 버그 증가
- μ•± μ•ˆμ •μ„± ν•˜λ½
- ...

ν™•μž₯ κ°€λŠ₯ν•œ μ•± μ•„ν‚€ν…μ²˜μ˜ νŠΉμ§•

  • λͺ…ν™•ν•œ μ—­ν•  ꡬ뢄 : 객체/λͺ¨λ“ˆμ€ ν•˜λ‚˜μ˜ μ—­ν• λ§Œ μˆ˜ν–‰, λ°μ΄ν„°μ˜ 흐름을 μ‰½κ²Œ λ”°λΌκ°ˆ 수 있음
  • 변화에 μœ μ—° : μ˜μ‘΄μ„±μ€ decoupling λ˜μ–΄μžˆκ³ , ꡬ쑰가 λ‹¨μˆœν•˜κΈ° λ•Œλ¬Έμ— μœ μ—°
  • ν…ŒμŠ€νŠΈκ°€ 용이 : μœ λ‹› ν…ŒμŠ€νŠΈκ°€ μ–΄λ ΅λ‹€λ©΄ ꡬ쑰 κ°œμ„ μ΄ ν•„μš”ν•˜λ‹€λŠ” μ‹ ν˜Έ, ν…ŒμŠ€νŠΈλŠ” ν’ˆμ§ˆ 관리에 유용

아킀텍쳐와 Composition

Favor Object Composition Over Class Inheritance - Gang of Four, Design Patterns(1994)

객체합성을 ν™œμš©, 상속은 μœ μ—°ν•˜μ§€ λͺ»ν•¨ - μ½”λ“œκ°•ν•œ κ²°ν•©μ˜ ν˜•νƒœμž„

ν•˜λ‚˜μ˜ 객체가 λ„ˆλ¬΄ λ§Žμ€κ²ƒμ„ μ•Œκ³  μžˆλŠ” κ²½μš°κ°€ μ’‹μ„λ•ŒλŠ” 많이 μ—†μŒ 더 μž‘κ³  더 적은 정보λ₯Ό 가진 객체λ₯Ό λ§Œλ“œλŠ”κ²Œ μœ μ§€λ³΄μˆ˜ μΈ‘λ©΄μ—μ„œ μ’‹μŒ

μ•± 둜직의 λΆ„λ₯˜

μ™ΈλΆ€ λ””νŽœλ˜μ‹œ λΉ„μ¦ˆλ‹ˆμŠ€ 둜직 UI
데이터 μ €μž₯ : λ©”λͺ¨λ¦¬ μΊμ‹œ λ°”μ΄λ„ˆλ¦¬, λ°μ΄ν„°λ² μ΄μŠ€, 파일 λ“±
μ„œλΉ„μŠ€ : λ„€νŠΈμ›Œν¬, λΈ”λ£¨νˆ¬μŠ€, μœ„μΉ˜ μ„œλΉ„μŠ€
λ‚΄λΉ„κ²Œμ΄μ…˜ : ν™”λ©΄μ˜ 이동 ( present, dismiss, push, pop)
μ½”λ””λ„€μ΄μ…˜ : 각쒅 λ ˆμ΄μ–΄λ₯Ό μ‘°ν•©ν•΄ 앱이 μ‚¬μš©μžλ₯Ό μœ„ν•΄ ν•˜λŠ” 일
λ·° : UIView, UIViewController
ν”„λ ˆμ  ν…Œμ΄μ…˜ : 이미지 색상 폰트 λ“± UIλͺ¨λΈ λ³€ν™˜

RIBs Pattern

ν•˜λ‚˜μ˜ 둜직의 λ‹¨μœ„μ—λŠ” Router, Interactor, Builder, View β†’ ν•˜λ‚˜μ˜ λ‹¨μœ„λŠ” 리블렛이라 뢀름

  • Builder : λ¦¬λΈ”λ ›μ˜ 객체듀을 생성 λΌμš°ν„°λ₯Ό λ¦¬ν„΄ν•˜λŠ” μ—­ν• 
  • Interactor : 둜직이 λ“€μ–΄κ°€λŠ” λΆ€λΆ„, λ‘λ‡Œμ—­ν• 
  • Router : 리블렛 ν…ŒμΌμ„ λ§Œλ“€κ³  λ·°λ‚˜ 뷰컨트둀러 κ°„μ˜ λΌμš°νŒ… 역할을 μˆ˜ν–‰.

λͺ¨λ“ˆ 레벨 아킀텍쳐

λͺ¨λ…Έλ¦¬ν‹± μ•± ꡬ쑰

  • 단일 νƒ€κ²Ÿ ( λͺ¨λ“ˆ)
  • 객체 κ°„ λ¬΄λΆ„λ³„ν•œ μ°Έμ‘°
  • μ½”λ“œ λ³€κ²½μ˜ 영ν–₯ λ²”μœ„ νŒŒμ•…μ΄ νž˜λ“¦
  • λΉŒλ“œ μ‹œκ°„ 증가에 λ”°λ₯Έ 생산성 μ €ν•˜

λͺ¨λ“ˆν™” ꡬ쑰

β†’ 잘 λ‚˜λˆ μ§„ λͺ¨λ“ˆμ€ 계측화 ν•  수 있음, μƒμœ„μ— μžˆλŠ” λͺ¨λ“ˆμ€ ν•˜μœ„μ— μžˆλŠ” λͺ¨λ“ˆμ— μ ‘κ·Όν•  수 μžˆμ§€λ§Œ, λ°˜λŒ€μ˜ κ²½μš°λŠ” μ ‘κ·Όν•  수 μ—†μŒ 체계적인 섀계λ₯Ό 톡해 둜직이 단방ν–₯으둜 흐λ₯΄κ²Œ λ§Œλ“œλŠ” 것이 μ€‘μš”

λͺ¨λ“ˆν™” ꡬ쑰의 μž₯점

  • 관심사가 λΆ„λ¦¬λœλ‹€.
  • μ½”λ“œνŒŒμ•…μ΄ λΉ λ₯΄λ‹€

λͺ¨λ“ˆν™”λž€ λͺ¨λ“ˆμ„ λ§Œλ“œλŠ” ν–‰μœ„κ°€ μ€‘μš”ν•œ 것이 μ•„λ‹ˆλΌ κ°μ²΄λ‚˜ λ‘œμ§λ“€μ˜ 참쑰관계λ₯Ό μ •λ¦¬ν•˜λŠ”κ²ƒμ΄ 핡심


λŠμŠ¨ν•œ κ²°ν•©

μ˜μ‘΄μ„±

  • μ½”λ“œμ˜ 호좜(λŸ°νƒ€μž„ μ˜μ‘΄μ„±)
  • μ†ŒμŠ€μ½”λ“œ μ˜μ‘΄μ„±(μ»΄νŒŒμΌνƒ€μž„ μ˜μ‘΄μ„±)

XcodeλŠ” λ³‘λ ¬λ‘œ λΉŒλ“œλ₯Ό ν•˜κΈ° λ•Œλ¬Έμ— μ•±μ˜ λΉŒλ“œμ‹œκ°„μ„ 쀄이기 μœ„ν•΄μ„œλŠ” 병λͺ©λͺ¨λ“ˆμ„ μ°Ύμ•„μ„œ κ·Έ λͺ¨λ“ˆμ˜ λΉŒλ“œμ‹œκ°„μ„ 쀄여야함

The power of OO comes from safe, convenient polymorphism with OO you have absolute control over the every single source code dependency in your system - Robert C. Martin, The Future Of Programming Languages

λ‹€ν˜•μ„±μ„ μ΄μš©ν•œ μ˜μ‘΄μ„± μ—­μ „

곡톡기λŠ₯ λͺ¨λ“ˆμ΄λ‚˜ λΉŒλ“œμ‹œκ°„μ΄ 였래 κ±Έλ¦¬λŠ” λͺ¨λ“ˆμ„ μ†ŒμŠ€μ½”λ“œ μ˜μ‘΄μ„±μ„ λŠμ–΄λ²„λ¦ΌμœΌλ‘œμ„œ λ‚΄ λͺ¨λ“ˆμ˜ λΉŒλ“œμ‹œκ°„μ— 영ν–₯받지 μ•Šκ²Œ λ§Œλ“€ 수 있음

λŠμŠ¨ν•˜κ²Œ κ²°ν•©λœ λͺ¨λ“ˆ ꡬ쑰의 μž₯점

ν™•μž₯κ³Ό μž¬μ‚¬μš©

  • μƒˆ κΈ°λŠ₯ 개발, κΈ°μ‘΄ κΈ°λŠ₯ μˆ˜μ • μˆ˜μ›”
  • λͺ¨λ“ˆλ³„λ‘œ 독립적인 μž¬μ‚¬μš©κ°€λŠ₯

λ³‘λ ¬κ°œλ°œ

  • 규λͺ¨κ°€ 큰 νŒ€μ—κ²Œ ν•„μˆ˜
  • 고립된 κ°œλ°œν™˜κ²½
  • λ―Έμ™„μ„± λͺ¨λ“ˆμ—λ„ μ˜μ‘΄ν•  수 있음

μœ μ§€λ³΄μˆ˜

  • λͺ¨λ“ˆμ˜ 경계가 λͺ…ν™•
  • μˆ˜μ •, 영ν–₯λ²”μœ„ νŒŒμ•…μ΄ 쉬움
  • 개발 생산성 ν–₯상
  • λΉŒλ“œμ‹œκ°„ 단좕

ν…ŒμŠ€νŠΈ μš©μ΄μ„±

  • ν…ŒμŠ€νŠΈ λŒ€μ—­μœΌλ‘œ μΉ˜ν™˜
  • λΉ λ₯Έ μžλ™ν™” ν…ŒμŠ€νŠΈ

μ˜μ‘΄μ„± μ—­μ „μ˜ ν•œκ³„/단점

  • μ½”λ“œλ₯Ό μ΄ν•΄ν•˜κΈ° μ–΄λ €μ›Œμ§ (μ½”λ“œ 호좜의 흐름을 따라가기 어렀움)

μ˜μ‘΄μ„± μ£Όμž…

μ˜μ‘΄μ„± μ£Όμž… νŒ¨ν„΄

  • μƒμ„±μž μ£Όμž…
  • λ©”μ†Œλ“œ μ£Όμž…
  • ν”„λ‘œνΌν‹° μ£Όμž…

ν™”λ©΄ 흐름에 따라 μƒμœ„ν™”λ©΄μ€ μžμ‹ μ—κ²Œ ν•„μš”μ—†λŠ” λΆˆν•„μš”ν•œ μ˜μ‘΄μ„±μ„ λ“€κ³  μžˆμ–΄μ•Όν•¨, 이λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ Composition Rootλ₯Ό 톡해 화면에 ν•„μš”ν•œ μ˜μ‘΄μ„±λ“€μ„ Composition Rootκ°€ λ“€κ³  있게 ν•˜κ³  각 화면을 μƒμ„±ν•˜λŠ” 역할을 λ‹΄λ‹Ήν•˜κ²Œ ν•˜λ©΄ λ‹€μŒν™”λ©΄μ˜ μ˜μ‘΄μ„±μ„ 이전화면이 λ“€κ³  μžˆμ§€ μ•Šκ²Œ ν•  수 있음

Composition Root, ( Flow Controller / Coordinator )

μ˜μ‘΄μ„±μ„ μ£Όμž…ν•  것인가 말것인가

Volatile Dependency Stable Dependency
μ£Όμž…ν•΄μ•Όν•˜λŠ” μ˜μ‘΄μ„± μ£Όμž…ν•  ν•„μš”μ—†λŠ” μ˜μ‘΄μ„±
- μ‚¬μš©ν•˜κΈ°μ „ Runtime에 μ΄ˆκΈ°ν™”κ°€ ν•„μš”ν•œκ²ƒ
- 아직 μ‘΄μž¬ν•˜μ§€ μ•Šκ±°λ‚˜ κ°œλ°œμ€‘μΈ 것
- 비결정둠적 λ™μž‘/μ•Œκ³ λ¦¬μ¦˜
- 결정둠적 λ™μž‘/μ•Œκ³ λ¦¬μ¦˜
- μ‹ λ’°ν• λ§Œν•œ ν•˜μœ„ν˜Έν™˜μ„±
- Volatile μ˜μ‘΄μ„±μ„ μ œμ™Έν•œ λͺ¨λ“  것
예 λ°μ΄ν„°λ² μ΄μŠ€, μ˜†νŒ€μ΄ κ°œλ°œν•˜κ³  μžˆλŠ” 결제 λͺ¨λ“ˆ, λžœλ€ν•¨μˆ˜, Date() λ“±λ“±.. Foundation, μœ ν‹Έμ„± μ½”λ“œ, Formmater

About

πŸ“± 패슀트캠퍼슀, ν™•μž₯μ„± 높은 μ•± μ•„ν‚€ν…μ²˜ ꡬ좕 μ‹€μŠ΅(feat. Xcodegen) [η©Ί]

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages