Git Product home page Git Product logo

tdd_juicemaker's Introduction

TDD_JuiceMaker๐Ÿฅค

๊ธฐ์กด์˜ UIKit ํ”„๋กœ์ ํŠธ๋ฅผ MVVM + RxSwift + TDD ๋ฐฉ์‹์œผ๋กœ ์ƒˆ๋กญ๊ฒŒ ๊ตฌํ˜„ํ•œ ํ”„๋กœ์ ํŠธ์ž…๋‹ˆ๋‹ค.

์ฃผ์š” ๊ธฐ๋Šฅ

์ฃผ์Šค ์ฃผ๋ฌธ, ์ฃผ๋ฌธ ์žฌ๊ณ  ์ฐจ๊ฐ, ๊ณผ์ผ ์žฌ๊ณ  ๊ด€๋ฆฌ ๋“ฑ

ํ‚ค์›Œ๋“œ

  • RxSwift
  • MVVM
  • TDD
  • UnitTest
  • Input/Output

ํ”„๋กœ์ ํŠธ ๋ชฉ์ 

  • MVVM + RxSwift๋ฅผ ์ง์ ‘ ์ ์šฉํ•ด๋ณด๋ฉฐ ํ•™์Šต
  • ํ…Œ์ŠคํŠธ ์ฃผ๋„ ๊ฐœ๋ฐœ ๋ฐฉ์‹ ๊ฒฝํ—˜


๐Ÿ’ก ๊ธฐ๋Šฅ

์ฃผ์Šค ์ฃผ๋ฌธ

  • ์ฃผ์Šค ์ฃผ๋ฌธ ๋ฒ„ํŠผ์„ ํ†ตํ•ด ์ฃผ๋ฌธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Simulator Screen Recording - iPhone 13 - 2022-09-06 at 17 03 34


  • ๊ณผ์ผ์€ ์ฃผ์Šค์— ํ•„์š”ํ•œ ๊ฐœ์ˆ˜๋งŒํผ ์ฐจ๊ฐ๋ฉ๋‹ˆ๋‹ค.
  • ์žฌ๊ณ ๊ฐ€ ๋ถ€์กฑํ•  ๊ฒฝ์šฐ ์ฃผ๋ฌธ์ด ๋ถˆ๊ฐ€ํ•˜๋ฉฐ ์•Œ๋ฆผ ๋ฉ”์„ธ์ง€๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

Simulator Screen Recording - iPhone 13 - 2022-09-06 at 17 03 54

์žฌ๊ณ  ๊ด€๋ฆฌ

  • ๊ณผ์ผ์˜ ์žฌ๊ณ ๋ฅผ Stepper๋ฅผ ํ†ตํ•ด์„œ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Simulator Screen Recording - iPhone 13 - 2022-09-06 at 17 04 11


๐Ÿ’ก ๊ณ ๋ฏผ์ 

RxBlocking์˜ ์‚ฌ์šฉ

  • RxTest: ์˜ต์ €๋ฒ„๋ธ”์— ์‹œ๊ฐ„ ๊ฐœ๋…์„ ์ฃผ์ž…ํ•˜์—ฌ ์›ํ•˜๋Š” ์‹œ๊ฐ„์— ๋ฐฉ์ถœ๋˜๋Š” ์ด๋ฒคํŠธ๋ฅผ ๊ฒ€์ฆ
  • RxBlocking: ์˜ต์ €๋ฒ„๋ธ”์˜ ํŠน์ •์‹œ๊ฐ„ ๋‚ด์˜ ์ด๋ฒคํŠธ ๋ฐฉ์ถœ๋งŒ์„ ๊ฒ€์ฆ

์‹œ๊ฐ„์˜ ํ๋ฆ„์— ๋”ฐ๋ผ ๋ฐฉ์ถœ๋˜๋Š” ์ด๋ฒคํŠธ๋ฅผ ๊ฒ€์ฆํ•˜๋Š” RxTest๋ณด๋‹ค๋Š”, ๋‹จ์ˆœํžˆ ๋ฐฉ์ถœ๋˜๋Š” ์ด๋ฒคํŠธ๋งŒ์„ ๊ฒ€์ฆํ•˜๋Š” RxBlocking์ด ์ ํ•ฉํ•˜๋‹ค๊ณ  ํŒ๋‹จํ•˜์—ฌ ์ด๋ฅผ ์ด์šฉํ•œ ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค.

Stream์˜ ๋ฐฉํ–ฅ๊ณผ ๋ฐฉ์‹

์ดˆ๋ฐ˜ ๊ตฌํ˜„์—๋Š” ViewModel๊ณผ UseCase์—์„œ ์˜ต์ €๋ฒ„๋ธ”์„ ๊ตฌ๋…ํ•˜๊ณ  ์ƒˆ๋กญ๊ฒŒ ์ƒ์„ฑํ•ด์„œ ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ์‹์˜ ์ฝ”๋“œ๊ฐ€ ์กด์žฌํ–ˆ์Šต๋‹ˆ๋‹ค. ์ŠคํŠธ๋ฆผ์ด ์ค‘๊ฐ„์—์„œ ๋Š๊ธฐ๋Š” ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์€ ํ”„๋กœ์ ํŠธ ๊ทœ๋ชจ๊ฐ€ ์ปค์งˆ ๊ฒฝ์šฐ ๊ฐ€๋…์„ฑ์ด ๋–จ์–ด์งˆ ์ˆ˜ ์žˆ๊ณ , ํ๋ฆ„์ด ์ค‘๊ฐ„์— ์œ ์‹ค๋  ๊ฐ€๋Šฅ์„ฑ๋„ ์žˆ๋‹ค๊ณ  ํŒ๋‹จํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด์— ํ•˜๋‚˜์˜ ์ŠคํŠธ๋ฆผ์€ ํ•œ๋ฒˆ๋งŒ ์†Œ๋น„๋˜๋„๋ก ์œ ์˜ํ•˜๋ฉฐ, ํ•œ๋ฐฉํ–ฅ์œผ๋กœ ๋Š์–ด์ง€์ง€ ์•Š๋Š” ํ๋ฆ„์ด ์œ ์ง€๋˜๋„๋ก ๋ฆฌํŒฉํ† ๋ง ํ–ˆ์Šต๋‹ˆ๋‹ค.

retry

ํ˜„์žฌ ์ฝ”๋“œ์—์„œ๋Š” ์žฌ๊ณ ๊ฐ€ ๋ถ€์กฑํ•  ๋•Œ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š”๋ฐ, ์˜ต์ €๋ฒ„๋ธ”์—์„œ ์—๋Ÿฌ๊ฐ€ ๋ฐฉ์ถœ๋˜์–ด๋„ ์ŠคํŠธ๋ฆผ์ด ์ข…๋ฃŒ๋˜์ง€ ์•Š๋„๋ก retry์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. ์—๋Ÿฌ๊ฐ€ ๋ฐฉ์ถœ ๋œ ํ›„ diposeํ•˜๊ณ  ๋‹ค์‹œ subscribe๊ฐ€ ํ˜ธ์ถœ๋˜์–ด์„œ ์ŠคํŠธ๋ฆผ์„ ๊ณ„์† ์ด์–ด๋‚˜๊ฐˆ ์ˆ˜ ์žˆ๋„๋ก ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ’ก Trouble Shooting

skip(1)

EditViewModel์—์„œ ๋ฐ”์ธ๋”ฉ์„ ํ•  ๋•Œ์˜ stepperValue๋Š” ์ดˆ๊ธฐ์ƒํƒœ, ์ฆ‰ 0์ด๊ธฐ ๋•Œ๋ฌธ์— ์žฌ๊ณ ๊ฐ’์— 0์ด ์—…๋ฐ์ดํŠธ ๋˜๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์•„๋ž˜์˜ ์‹œ๋„๋ฅผ ํ–ˆ์Šต๋‹ˆ๋‹ค.

  1. Output์— ํ˜„์žฌ์˜ ์žฌ๊ณ ๊ฐ’์„ ๋‹ด๋Š” ๋”•์…”๋„ˆ๋ฆฌ ํƒ€์ž…์˜ ํ”„๋กœํผํ‹ฐ currentStock์„ ์ถ”๊ฐ€
  2. transform์—์„œ ํ˜„์žฌ ์žฌ๊ณ ๊ฐ’์„ currentStock ํ”„๋กœํผํ‹ฐ์— ๋‹ด์•„ Output์„ ํ†ตํ•ด์„œ [Fruit: Double] ํ˜•ํƒœ๋กœ ๋ทฐ์— ์ „๋‹ฌ

๋‹ค๋งŒ, ์œ„์™€ ๊ฐ™์€ ๋ฐฉ์‹์€ ๋ทฐ๋ชจ๋ธ์—์„œ ์˜ต์ €๋ฒ„๋ธ”์„ ์†Œ๋น„ํ•˜๋Š” ๋ฐฉ์‹์ด๊ธฐ ๋•Œ๋ฌธ์— skip(1) ์˜คํผ๋ ˆ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฒซ๋ฒˆ์งธ ์ด๋ฒคํŠธ๋Š” ๋ฌด์‹œํ•˜๋„๋ก ๊ตฌํ˜„ํ•˜์—ฌ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค.


๐Ÿ’ก ํ”„๋กœ์ ํŠธ๋ฅผ ํ†ตํ•œ ํ•™์Šต๊ฒฐ๊ณผ

TDD์˜ ์žฅ์ ๊ณผ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ์˜ ํ•„์š”์„ฑ์„ ์ง์ ‘ ๊ฒฝํ—˜

ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉฐ ๋Š๋‚€ TDD์˜ ์žฅ์ ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ํ•œ๊ฐ€์ง€ ๊ธฐ๋Šฅ๋งŒ์„ ํ…Œ์ŠคํŠธํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ๋จผ์ € ์ž‘์„ฑํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ฝ”๋“œ์˜ ์—ญํ• , ๊ธฐ๋Šฅ ๋ถ„๋ฆฌ๊ฐ€ ์ˆ˜์›”ํ•ด์ง„๋‹ค.
  • Low Level์˜ ์ฝ”๋“œ๋ถ€ํ„ฐ ์ž‘์„ฑํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋ฉฐ ๋ฐœ์ƒํ•˜๋Š” ๊ด€๋ จ ๋ฉ”์†Œ๋“œ ๋ฆฌํŒฉํ† ๋ง ๋น„์šฉ์ด ๊ฐ์†Œํ•œ๋‹ค.
  • ์‹ค์ œ ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜์ง€ ์•Š๊ณ  ๋‹ค์–‘ํ•œ ์ƒํ™ฉ์„ ํ…Œ์ŠคํŠธํ•ด๋ณผ ์ˆ˜ ์žˆ๋‹ค.
  • ๋””๋ฒ„๊น…์ด ์ˆ˜์›”ํ•˜๋‹ค.

TDD์˜ ๋‹จ์ ์œผ๋กœ๋Š” ๊ฐœ๋ฐœ ์†Œ์š” ์‹œ๊ฐ„์ด ์ฆ๊ฐ€ํ•œ๋‹ค ๋ผ๊ณ  ์•Œ๊ณ  ์žˆ๋Š”๋ฐ, ํ€„๋ฆฌํ‹ฐ๋ณด๋‹ค ๋น ๋ฅธ ๊ฒฐ๊ณผ๋ฌผ์ด ํ•„์š”ํ•œ ์ƒํ™ฉ์ด๋ผ๋ฉด ์ ํ•ฉํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค๊ณ  ๋Š๊ผˆ์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ๋””๋ฒ„๊น…์— ์†Œ์š”๋˜๋Š” ์‹œ๊ฐ„๊ณผ ๋…ธ๋ ฅ์„ ๋‹จ์ถ•์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์—์„œ, ๋””๋ฒ„๊น…์— ์ž์ฃผ ๋งˆ์ฃผ์น˜๋Š” ์ดˆ๋ณด ๊ฐœ๋ฐœ์ž์ผ์ˆ˜๋ก ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ์ž‘์—…์˜ ํšจ์œจ์„ ํฌ๊ฒŒ ์˜ฌ๋ฆด ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.

UIKit + MVC๋กœ ์ง„ํ–‰ํ•œ ๋™์ผ ํ”„๋กœ์ ํŠธ์™€์˜ ์ฐจ์ด์ 

์žฅ์ 

  • ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๋ทฐ๋ชจ๋ธ์ด ๊ด€๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ทฐ์˜ ์žฌ์‚ฌ์šฉ์„ฑ์ด ์ข‹๋‹ค.
  • ๋ทฐ์™€ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์ด ๋ถ„๋ฆฌ๋˜๊ธฐ ๋•Œ๋ฌธ์— ํ…Œ์ŠคํŠธ์— ์šฉ์ดํ•˜๋‹ค.
  • ํ•œ๋ฒˆ์˜ ๊ตฌ๋…๊ณผ ๋‹ค์–‘ํ•œ ์˜คํผ๋ ˆ์ดํ„ฐ์˜ ์‚ฌ์šฉ์œผ๋กœ ์ฝ”๋“œ๊ฐ€ ๊น”๋”ํ•ด์ง„๋‹ค.

๋‹จ์ 

  • ์˜ต์ €๋ฒ„๋ธ”์˜ ํ๋ฆ„์ด ํ•œ๋ฒˆ์— ๋ณด์ด๊ธฐ ์–ด๋ ค์šธ ์ˆ˜ ์žˆ๋‹ค.
  • ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ์— ๋” ์œ ์˜ํ•ด์•ผํ•œ๋‹ค.

๋น„๋™๊ธฐ ๋„คํŠธ์›Œํ‚น์„ ํ•˜๋Š” ์•ฑ์—์„œ ๋” ํ™•์‹คํ•œ ์žฅ์ ์„ ๋ฐœํœ˜ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ์‹์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. ํ†ต์‹ ์ด ์—ฐ๊ฒฐ๋œ ๋’ค ๋Š์–ด์ง€๊ธฐ ์ „๊นŒ์ง€ ํ๋ฆ„์„ ์œ ์ง€ํ•˜๋ฉฐ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€๊ณตํ•˜๋Š” ๊ฒƒ์— ์ ํ•ฉํ•œ ๋ฐฉ์‹์ผ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ๋‹ค์–‘ํ•œ ์˜คํผ๋ ˆ์ดํ„ฐ๋ฅผ ์ ์ ˆํ•œ ์ƒํ™ฉ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋” ๋งŽ์€ ๊ณต๋ถ€์™€ ๊ฒฝํ—˜์ด ํ•„์š”ํ•˜๋‹ค๊ณ  ๋Š๊ผˆ์Šต๋‹ˆ๋‹ค.

tdd_juicemaker's People

Contributors

horeng2 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.