๐ŸฆŠ1. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ค๊ณ„๋ž€ ?

Jamezz Devยท2020๋…„ 7์›” 5์ผ
2

android-Architecture

๋ชฉ๋ก ๋ณด๊ธฐ
1/8
post-thumbnail

๐Ÿฅด1. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ค๊ณ„๋ž€ ?

- ๊ตฌ์„ฑ ์š”์†Œ๋“ค ๊ฐ„์˜ ์œ ๊ธฐ์  ๊ด€๊ณ„๋ฅผ ํ‘œํ˜„ํ•˜๊ณ , ์š”๊ตฌ์‚ฌํ•ญ์„ ํ•ด๊ฒฐํ•˜๋ ค๋Š” ๊ณ„ํš ๊ณผ์ •๋“ฑ์˜ ์›์น™์„ ๋‚˜ํƒ€๋‚ธ๋‹ค. 

- ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ํ•„์ˆ˜์ด๋‹ค. ์™œ๋ƒํ•˜๋ฉด ์•ˆ๋“œ๋กœ์ด๋“œ ํ”Œ๋žซํผ ๋ฒ„์ „๊ณผ ํ˜ธํ™˜๋˜์ง€ ์•Š๊ฑฐ๋‚˜ ๋งˆ์ผ“ ์ •์ฑ…์ƒ์˜ ์ด์œ ๋กœ ์•ฑ์ด ์ œ ๊ธฐ๋Šฅ์„ ํ•˜์ง€ ์•ˆ๋Š”๋‹ค๋ฉด ์ œ ๊ธฐ๋Šฅ์„ ํ•˜์ง€ ๋ชปํ•œ๋‹ค. 

๐Ÿฅฑ2. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์„ค๊ณ„ ์›์น™?

- 2000๋…„๋Œ€ SOLID 5๊ฐ€์ง€ ์›์น™ 
- ๊ฐ ์›์น™์˜ ๋จธ๋ฆฌ ๊ธ€์ž๋ฅผ ๋”ฐ์™€ ๋งŒ๋“  ๋ช…์นญ
- ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์„ ๋†’์ด๊ณ  ํ™•์žฅ์ด ์‰ฌ์šด ๊ตฌ์กฐ๋ฅผ ๋งŒ๋“œ๋Š” ์ง€์นจ

1) ๋‹จ์ผ ์ฑ…์ž„ ์›์น™(Single Responsibility Principle)
	- ๋ชจ๋“  ํด๋ž˜์Šค๋Š” ํ•˜๋‚˜์˜ ์ฑ…์ž„๋งŒ ๊ฐ€์ง€๋ฉฐ, ํด๋ž˜์Šค๋Š” ๊ทธ ์ฑ…์ž„์„ ์™„์ „ํžˆ ์บก์Šํ™” ํ•จ์„ ๋งํ•œ๋‹ค.
	- ๋‹จ์ผ ์ฑ…์ž„ : ์–ด๋–ค ํด๋ž˜์Šค๋‚˜ ๋ชจ๋“ˆ ๋˜๋Š” ๋ฉ”์„œ๋“œ๊ฐ€ ๋‹จ ํ•˜๋‚˜์˜ ๊ธฐ๋Šฅ์„ ๊ฐ€์ ธ์•ผ ํ•จ์„ ๋งํ•œ๋‹ค. 
    	์ฆ‰, ๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ๋ฐœ์ƒํ•˜๋”๋ผ๋„ ๊ทธ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์— ๋Œ€ํ•œ ์ฑ…์ž„์ด ์žˆ๋Š” ๋ถ€๋ถ„๋งŒ ์ˆ˜์ •ํ•˜๋ฉด ๋œ๋‹ค.

2)๊ฐœ๋ฐฉ ํ์‡„ ์›์น™ (Open Closed Principle)

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

3) ๋ฆฌ์Šค์ฝ”ํ”„ ์น˜ํ™˜ ์›์น™( Liskov Substitution Principle)

	- ์น˜ํ™˜์„ฑ  : ํด๋ž˜์Šค S ๊ฐ€ ํด๋ž˜์Šค T ์˜ ์ž์‹ ํด๋ž˜์Šค๋ผ๋ฉด ๋ณ„๋‹ค๋ฅธ ๋ณ€๊ฒฝ ์—†์ด ๋ถ€๋ชจ ํด๋ž˜์Šค T๋ฅผ ์ž์‹ ํด๋ž˜์Šค S ๋กœ ์น˜ํ™˜ํ• ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค๋Š” ์›์น™. ์ฆ‰ ๋‹ค์šด ์บ์ŠคํŒ…๋œ ์ธ์Šคํ„ด์Šค๊ฐ€ ๋…ผ๋ฆฌ์ ์œผ๋กœ ๊ทธ ์—ญํ• ์ด ๋ฌธ์ œ๊ฐ€ ์—†์–ด์•ผํ•œ๋‹ค.
	- ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํŠน์ง•์— ๊ด€ํ•œ ๋ช‡ ๊ฐ€์ง€ ํ‘œ์ค€์ ์ธ ์š”๊ตฌ์‚ฌํ•ญ์„ ๊ฐ•์ œํ•œ๋‹ค.
	-ํ•˜์œ„ ํด๋ž˜์Šค์—์„œ ๋ฉ”์„œ๋“œ ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ๋ฐ˜๊ณต๋ณ€์„ฑ
	-ํ•˜์œ„ ํด๋ž˜์Šค์—์„œ ๋ฐ˜ํ™˜ํ˜•์˜ ๊ณต๋ณ€์„ฑ
	-ํ•˜์œ„ ํด๋ž˜์Šค์—์„œ ๋ฉ”์„œ๋“œ๋Š” ์ƒ์œ„ ํด๋ž˜์Šค ๋ฉ”์„œ๋“œ์—์„œ ๋˜์ ธ์ง„ ์˜ˆ์™ธ ์‚ฌํ•ญ์„ ์ œ์™ธํ•˜๊ณ  ์ƒˆ๋กœ์šด ์˜ˆ์™ธ ์‚ฌํ•ญ์„ ๋˜์ง€๋ฉด ์•ˆ๋จ
	-ํ•˜์œ„ ํด๋ž˜์Šค์—์„œ ์„ ํ–‰ ์กฐ๊ฑด์€ ๊ฐ•ํ™”๋  ์ˆ˜ ์—†์Œ
	-ํ•˜์œ„ ํด๋ž˜์Šค์—์„œ ํ›„ํ–‰ ์กฐ๊ฑด์€ ์•ฝํ™”๋  ์ˆ˜ ์—†์Œ 
	-ํ•˜์œ„ ํ˜•์—์„œ ์ƒ์œ„ ํ˜•์˜ ๋ถˆ๋ณ€ ์กฐ๊ฑด์€ ๋ฐ˜๋“œ์‹œ ์œ ์ง€๋˜์–ด์•ผ ํ•œ๋‹ค 

- ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ฐจ๋ก€๋กœ ์ƒ์†๋ฐ›๋Š” ํƒ€์ž…์ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•œ๋‹ค
  A <- B <- C 
  public class A{}
  public class B extends A{}
  public class C extends B{}
- ๊ณต๋ณ€์„ฑ

   List<?extends B> ๋ž€ B๋ฅผ ์ƒ์†๋ฐ›๋Š” ํƒ€์ž…์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ๋ฆฌ์ŠคํŠธ๊ฐ€ ์žˆ๋‹ค๋ฉด  List<C>๋ฅผ ์‚ฌ์šฉํ• ์ˆ˜ ์žˆ๋‹ค๋Š” ๋‚ด์šฉ์ด๋‹ค. 

- ๋ฐ˜๊ณต๋ณ€์„ฑ
    -List<? extends B>๋ž€ ๋ฆฌ์ŠคํŠธ๊ฐ€ ์žˆ์„๋•Œ List<A>๋ฅผ ์‚ฌ์šฉํ• ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ด๋‹ค. ๋ฌผ๋ก  A ์˜ ๋ถ€๋ชจํƒ€์ž…์œผ๋กœ๋„ ์น˜ํ™˜์ด ๊ฐ€๋Šฅํ•˜๋‹ค 

4) ์ธํ„ฐํŽ˜์ด์Šค ๋ถ„๋ฆฌ ์›์น™ (Interface Segregation Principle)

	-์–ด๋– ํ•œ ํด๋ž˜์Šค๊ฐ€ ์ž์‹ ์ด ์ด์šฉํ•˜์ง€ ์•Š๋Š” ๋ฉ”์„œ๋“œ์— ์˜์กดํ•˜์ง€ ์•Š์•„์•ผ ํ•˜๋Š”์›์น™
    	-ํฐ๋ฉ์–ด๋ฆฌ์˜ ์ธํ„ฐํŽ˜์ด์Šค๋“ค์„ ๊ตฌ์ฒด์ ์ด๊ณ  ์ž‘์€ ๋‹จ์œ„๋“ค๋กœ ๋ถ„๋ฆฌํ•จ์œผ๋กœ์จ ํด๋ž˜์Šค๋“ค์ด ๊ผญ ํ•„์š”ํ•œ ๋ฉ”์„œ๋“œ๋“ค๋งŒ ์ด์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค. 
    	-์—ญํ•  ์ธํ„ฐํŽ˜์ด์Šค : ์ž‘์€ ๋‹จ์œ„๋กœ ๋ฉ”์„œ๋“œ ๋“ค๋กœ ๊ตฌ์„ฑ๋œ ์ธํ„ฐํŽ˜์ด์Šค 
    	-fly() ๋ฉ”์„œ๋“œ๋ฅผ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๋ถ„๋ฆฌํ•˜๊ณ  ๋‚ ์ˆ˜ ์žˆ๋Š” ์ƒˆ์—๋งŒ ๊ตฌํ˜„ํ•จ์œผ๋กœ ์จ ํŽญ๊ท„์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” fly() ๋ฉ”์†Œ๋“œ๋ฅผ ๊ฐ€์ง€์ง€ ์•Š์„์ˆ˜ ์žˆ์–ด ISP ์›์น™์„ ์ง€ํ‚ฌ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค. 
    	- ๋…์ˆ˜๋ฆฌ๋ฅผ ํด๋ž˜์Šค๋กœ ํ‘œํ˜„ํ•˜๋Š” ์˜ˆ์ œ
      public abstract class Bird{
          abstract void fly();
          abstract void cry();
      }
      public class Eagle extends Bird{
          @Override
          public void fly(){...}
          @Override
          public void cry(){...}
      }
	- ํŽญ๊ท„์„ ํด๋ž˜์Šค๋กœ ํ‘œํ˜„ํ•˜๋Š” ์˜ˆ์ œ
      public abstract class Bird{
      	abstract void cry();
  	  }
      public interface Flyable{
          void fly();
      }
      public abstract class FlyableBird extends Bird 					implements Flyable{
          ...
      }
      public class Eagle implements FlyableBird{
          @Override
          public void fly(){...}
          @Override
          public void cry(){...}
      }
      public class Penguin extends Bird{
          @Override
          public void cry(){...}
      }
5)์˜์กด ์—ญ์ „ ์›์น™( Dependency Inversion Principle)
 -๋ชจ๋“ˆ๋“ค์„ ๋ถ„๋ฆฌํ•˜๋Š” ํŠน์ • ํ˜•์‹์„ ์ง€์นญํ•œ๋‹ค
 -์ƒ์œ„ ๊ณ„์ธต์ด ํ•˜์œ„ ๊ณ„์ธต์— ์˜์กดํ•˜๋Š” ์ „ํ†ต์ ์ธ ์˜์กด๊ด€๊ณ„๋ฅผ ์—ญ์ „ํ•จ์œผ๋กœ์จ ์ƒ์œ„ ๊ณ„์ธต์ด ํ•˜์œ„๊ณ„์ธต์˜ ๊ตฌํ˜„์œผ๋กœ๋ถ€ํ„ฐ ๋…๋ฆฝ๋˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค. 
 -๋‹ค์Œ๊ณผ ๊ฐ™์€ ์›์น™์„ ๊ฐ–๊ณ  ์žˆ๋‹ค 
   	5-1) ์ƒ์œ„ ๋ชจ๋“ˆ์€ ํ•˜์œ„ ๋ชจ๋“ˆ์— ์˜์กดํ•ด์„œ๋Š” ์•ˆ๋œ๋‹ค. ์ƒ์œ„ ๋ชจ๋“ˆ๊ณผ ํ•˜์œ„ ๋ชจ๋“ˆ ๋ชจ๋‘ ์ถ”์ƒํ™”์— ์˜์กดํ•ด์•ผ ํ•œ๋‹ค. 
    	5-2) ์ถ”์ƒํ™”๋Š” ์„ธ๋ถ€ ์‚ฌํ•ญ์— ์˜์กดํ•ด์„œ๋Š” ์•ˆ๋œ๋‹ค. ์„ธ๋ถ€์‚ฌํ•ญ์ด ์ถ”์ƒํ™”์— ์˜์กดํ•ด์•ผ ํ•œ๋‹ค. 
          	โ‡’ ์ƒ์œ„์™€ ํ•˜์œ„ ๋ชจ๋‘๊ฐ€ ๋™์ผํ•œ ์ถ”์ƒํ™”์— ์˜์กดํ•ด์•ผ ํ•œ๋‹ค. ๋Š” ๊ฐ์ฒด ์ง€ํ–ฅ์  ์„ค๊ณ„์˜ ๋Œ€์›์น™์„ ์ œ๊ณตํ•จ. 
 -์˜ˆ์‹œ 1) ์˜ˆ์ „์˜ ํฐ์€ ํฐ๋งˆ๋‹ค ์ „์šฉ ์ถฉ์ „๊ธฐ๊ฐ€ ์กด์žฌ ํ–ˆ๋‹ค ์ „์šฉ ์ถฉ์ „๊ธฐ ์™ธ์˜ ๋‹ค๋ฅธ ์ถฉ์ „๊ธฐ๋Š” ํ˜ธํ™˜๋˜์ง€ ์•Š์•˜๋Š”๋ฐ ์ด ๊ธฐ๊ธฐ๋Š” ์ „์šฉ ์ถฉ์ „๊ธฐ์— ๊ฐ•ํ•œ ์˜์กด์„ฑ์„ ๊ฐ€์ง„๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค. 
 -์˜ˆ์‹œ 2) ์š”์ฆ˜ ์•ˆ๋“œ๋กœ์ด๋“œ ํฐ์€ C ํƒ€์ž… ๋‹จ์ž๋ผ๋ฉด ์–ด๋Š ์ œ์กฐ์‚ฌ์˜ ๊ฒƒ์„ ๋ผ์›Œ๋„ ํ˜ธํ™˜์ด ๋œ๋‹ค. ์ „์šฉ ์ถฉ์ „๊ธฐ๊ฐ€ ํ•„์š”๊ฐ€ ์—†์œผ๋ฉฐ  ์–ด๋Š” ์ œ์กฐ์‚ฌ์˜ ๊ฒƒ์„ ๋ผ์›Œ๋„ ์ž˜ ๋™์ž‘ํ•œ๋‹ค ์ด๋Š” C ํƒ€์ž…์„ ์ถ”์ƒํ™” ์‹œ์ผœ์„œ ๊ธฐ๊ธฐ๊ฐ€ ํŠน์ • ์ถฉ์ „๊ธฐ์— ์˜์กดํ•˜๋˜๊ฒƒ์„ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ์˜์กด์„ฑ์„ ์—ญ์ „์‹œ์ผฐ๋‹ค. 

๐Ÿคฉ3. ํด๋ฆฐ ์•„ํ‚คํ…์ณ

- ๋กœ๋ฒ„ํŠธ C ๋งˆํ‹ด์— ์˜ํ•ด ๋งŒ๋“ค์–ด์ง„ ์ฒ ํ•™์œผ๋กœ ์†Œํ”„ํŠธ์›จ์–ด์˜ ๊ด€์‹ฌ์‚ฌ๋ฅผ ๊ณ„์ธต๋ณ„๋กœ ๋ถ„๋ฆฌํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด ๋””์ž์ธ ์ฒ ํ•™์ด๋‹ค.
- Entities โ† Usecases โ† Presenters โ†UI
- ์ฝ”๋“œ ์ข…์†์„ฑ์ด ์™ธ๋ถ€๋กœ๋ถ€ํ„ฐ ๋‚ด๋ถ€๋กœ ์˜์กดํ•œ๋‹ค.
- ๋‚ด๋ถ€ ๊ณ„์ธต์˜ ์ฝ”๋“œ๋Š” ์™ธ๋ถ€ ๊ณ„์ธต์˜ ๊ธฐ๋Šฅ์„ ์•Œ์ˆ˜ ์—†๋‹ค
- ์™ธ๋ถ€ ๊ณ„์ธต์— ์กด์žฌํ•˜๋Š” ๋ณ€์ˆ˜, ํ•จ์ˆ˜๋ฐ ํด๋ž˜์Šค๋Š” ์•ˆ์ชฝ ๊ณ„์ธต์—์„œ ๋‹ค์‹œ ๋“ฑ์žฅํ•  ์ˆ˜ ์—†๋‹ค
- ํด๋ฆฐ ์•„ํ‚คํ…์ณ๋ฅผ ์‚ฌ์šฉํ–ˆ์„๋•Œ ์žฅ์ 
- ๊ณ„์ธต์„ ๋ถ„๋ฆฌํ•˜๊ณ  ๊ณ„์ธต๊ฐ„์˜ ์˜์กด์„ฑ์„ ๋‹จ๋ฐฉํ–ฅ์œผ๋กœ ๋งŒ๋“ค๊ธฐ๋•Œ๋ฌธ์— ์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ์„ฑ์ด ์šฉ์ดํ•ด์ง„๋‹ค.
- ์œ ๋‹› ํ…Œ์ŠคํŠธ๊ฐ€ ์‰ฌ์›Œ์ง„๋‹ค. 

1) Entities
   	- ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋‚˜ ๋ฉ”์„œ๋“œ๋ฅผ ํฌํ•จํ•˜๋Š” ๊ฐ์ฒด์ด๋‹ค. 
	- ๋„คํŠธ์›Œํฌ๋‚˜ ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค์™€ ๊ด€๋ จ๋œ ํด๋ž˜์Šค๋ฅผ ์ž‘์„ฑํ• ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ๋ฐ์ดํ„ฐ ํด๋ž˜์Šค๋ฅผ ๋งํ•œ๋‹ค 

2) Use Cases
	- ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ๊ด€๋ จ๋œ ๋น„์ฆˆ๋‹ˆ์Šค ๊ทœ์น™์„ ํฌํ•จํ•˜๊ณ  ์‹œ์Šคํ…œ์˜ ๋ชจ๋“  ์œ ์Šค์ผ€์ด์Šค ๊ตฌํ˜„์ฒด๋“ค์„ ์บก์Šํ™” ํ•œ๋‹ค. 
	- ์—”ํ„ฐํ‹ฐ๋กœ๋ถ€ํ„ฐ์˜ ๋ฐ์ดํ„ฐ ํ๋ฆ„์„ ๊ด€๋ฆฌํ•˜๋ฉฐ ์œ ์Šค ์ผ€์ด์Šค์˜ ๋ชฉ์ ์„ ๋‹ฌ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ์–ธํ…Œํ‹ฐ์— ๋„“๊ณ  ์ „์‚ฌ์ ์ธ ๋น„์ฆˆ๋‹ˆ์Šค ๊ทœ์น™์˜ ์‚ฌ์šฉ์„ ๊ฐ€๋ฅด์นœ๋‹ค. 
	- ์•ˆ๋“œ๋กœ์ด๋“œ์—์„œ๋Š” Model, Repository ,Executor๋“ฑ๊ณผ ๊ด€๋ จ๋œ ๋‚ด์šฉ์ด ์ด ๊ณ„์ธต์— ์†ํ•œ๋‹ค
		2-1)Model 
		-๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค์˜ ์งˆ์˜๋‚˜ ๋„คํŠธ์›Œํฌ์˜ ์š”์ฒญ์˜ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. 
		2-2) Repository
		-๋‚ด๋ถ€ DB์— ์ ‘๊ทผํ•˜๊ฑฐ๋‚˜ ์ €์žฅ ๋˜๋Š” ์›๊ฒฉ ์„œ๋ฒ„์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜์—ฌ ์™ธ๋ถ€ ๊ณ„์ธต๊ณผ์˜ ์—ฐ๊ฒฐ์„ ๋Š์Šจํ•˜๊ฒŒ ํ•œ๋‹ค
		2-3) Executor 
		-Repository ๋‚˜ Model๊ณผ ๊ด€๋ จ๋œ ์ž‘์—…์ด ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์ž‘์—…์„ ์ˆ˜ํ–‰ ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ž‘์—… ์Šค๋ ˆ๋“œ๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ  ์ œ๊ณตํ•œ๋‹ค.

3) Interface Adapters
	- Use Cases , Entities๋กœ๋ถ€ํ„ฐ ์–ป๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€๊ณตํ•˜๋Š” ๊ณ„์ธต์ด๋‹ค. 
	- ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์ˆ˜ํ–‰ํ•˜์—ฌ ์›ํ•˜๋Š” ๊ฒฐ๊ณผ๊ฐ’์„ ์–ป์–ด UI์— ํ‘œํ˜„ํ•˜๋ ค๊ณ  ์ ๋‹นํ•œ ํ˜•์‹์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€๊ณตํ•ด ํ”ํžˆ ๋งํ•˜๋Š” Presenter,View, ViewModel, Controller ์™€ ๊ฐ™์€ ๊ด€์‹ฌ์‚ฌ๊ฐ€ ์—ฌ๊ธฐ์— ์†ํ•œ๋‹ค. 
	- ์ด ๊ณ„์ธต์˜ ๋ชฉ์ ์€ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๊ณผ ํ”„๋ ˆ์ž„ ์›Œํฌ ์ฝ”๋“œ๋ฅผ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์—ฐ๊ฒฐํ•˜๋Š” ๊ฒƒ์ด๋‹ค 

4) Frameworks ์™€ Drivers
	- ๊ฐ€์žฅ ๋ฐ”๊นฅ ๊ณ„์ธต์œผ๋กœ ์•ˆ๋“œ๋กœ์ด๋“œ์—์„œ๋Š” UI ์™€ ๊ด€๋ จ๋œ ์•กํ‹ฐ๋น„ํ‹ฐ, ํ”„๋ž˜๊ทธ๋จผํŠธ ,์ธํ…ํŠธ ์ „๋‹ฌ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค, ์ฝ˜ํ…์ธ  ํ”„๋กœ๋ฐ”์ด๋”๊ฐ€ ํฌํ•จ๋˜๋ฉฐ Retrofit๊ณผ ๊ฐ™์€ ๋„คํŠธ์›Œํฌ์™€ ๊ด€๋ จ๋œ ํ”„๋ ˆ์ž„์›Œํฌ ์ฝ”๋“œ๊ฐ€ ์—ฌ๊ธฐ์— ์†ํ•œ๋‹ค. 

๐Ÿ˜‚4. ์•ˆ๋“œ๋กœ์ด๋“œ์˜ ํŠน์ง•

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

๐Ÿฆฎ5. ์•ˆ๋“œ๋กœ์ด๋“œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ค๊ณ„ ์›์น™

- ๊ฐ€์žฅ ์ค‘์š”ํ•œ ์›์น™์€ ๊ด€์‹ฌ์‚ฌ ๋ถ„๋ฆฌ๋‹ค
- ๊ด€์‹ฌ์‚ฌ๋ถ„๋ฆฌ๋ž€?
	- ํด๋ž˜์Šค ๊ฐ„์˜ ๊ฐ•ํ•œ ์˜์กด์„ฑ์„ ๋Š์Šจํ•˜๊ฒŒ ํ•˜๋ฉด์„œ ๋ชจ๋“ˆํ™” ์‹œํ‚จ๋‹ค
	- ๋ชจ๋“ˆํ™” : ๋‹ค๋ฅธ ๋ชจ๋“ˆ๋กœ๋ถ€ํ„ฐ ๋…๋ฆฝ์ ์ด๋ฉฐ ์˜์—ญ์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ์—ญํ• ์„ ํ•œ๋‹ค๋Š” ์˜๋ฏธ 
- ๊ด€์‹ฌ์‚ฌ ๋ถ„๋ฆฌ = ์ถ”์ƒํ™”

๐Ÿคฏ6. ์•ˆ๋“œ๋กœ์ด๋“œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ค๊ณ„ ํŒจํ„ด

- MVC ,MVP, MVVM ๋””์ž์ธ ํŒจํ„ด

๐Ÿฆฆ7. ๋””์ž์ธ ํŒจํ„ด

๐Ÿš•7-1.MVC ๋””์ž์ธ ํŒจํ„ด

 - Model 
 	- ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๊ณผ ์‚ฌ์šฉ๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃจ๋Š” ์˜์—ญ์œผ๋กœ ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค์˜ entity๋ฅผ ๋‹ด๋‹นํ•˜๋Š” ํด๋ž˜์Šค๋ฅผ ํฌํ•จํ•œ sqlite,room,realm๋“ฑ์ด ๋ ์ˆ˜ ์žˆ๋‹ค.
 - View
    	- ์‚ฌ์šฉ์ž์—๊ฒŒ ํ‘œํ˜„๋˜๋Š” ์˜์—ญ 
    	- Activity,Fragment๊ฐ€ ๋ทฐ์˜ ์—ญํ• 
 - Controller 
        - Model , View์— ์˜์กดํ•œ๋‹ค
        - ๋ทฐ๋กœ๋ถ€ํ„ฐ ์ž…๋ ฅ์„ ๋ฐ›๊ฑฐ๋‚˜ ์ด๋ฒคํŠธ ๋ฐœ์ƒํ• ๋•Œ ๋ชจ๋ธ๊ณผ ๋ทฐ๋ฅผ ๋ณ€๊ฒฝ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. 
    	- Activity ์™€ Fragment๋Š” ๋ทฐ์˜ ์—ญํ• ์„ ํ•จ๊ณผ ๋™์‹œ์— ์ปจํŠธ๋กค๋Ÿฌ ์—ญํ• ์„ ํ•œ๋‹ค. 

 - MVC ๋””์ž์ธ ํŒจํ„ด์˜ ์žฅ๋‹จ์  
	- ๊ตฌ์กฐ๊ฐ€ ๋‹จ์ˆœํ•˜๊ณ  ์ง๊ด€์ ์ด๋‹ค
  	- ์•กํ‹ฐ๋น„ํ‹ฐ ํ”„๋ž˜๊ทธ๋จผํŠธ๊ฐ€ ๋ทฐ์˜ ์—ญํ• ๊ณผ ๋™์‹œ์— ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ ์ง„์ ์œผ๋กœ ํด๋ž˜์Šค์— ์ŠคํŒŒ๊ฒŒํ‹ฐ ์ฝ”๋“œ๊ฐ€ ๋˜์–ด ์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์–ด๋ ค์›Œ ์ง„๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค 
	- ์ปจํŠธ๋กค๋Ÿฌ๋Š” ๋ทฐ์™€ ๋ชจ๋ธ์— ์˜์กด์ ์ด๊ณ  ๋ทฐ๋Š” ๋ชจ๋ธ์— ์˜์กด์ ์ด๊ธฐ์— ์œ ๋‹› ํ…Œ์ŠคํŠธ๊ฐ€ ๊ฑฐ์˜ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค. 

๐Ÿš—7-2.MVP ๋””์ž์ธ ํŒจํ„ด

- ๊ธฐ์กด์˜ MVC ํŒจํ„ด์—์„œ Controller์˜ View์™€ Model๊ณผ์˜ ์˜์กด์„ฑ์„ ์—†์• ๊ธฐ ์œ„ํ•ด presenter ๋ผ๋Š” ๊ฐœ๋…์„ ๋„์ž…ํ•ด ์œ ๋‹›ํ…Œ์ŠคํŠธ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋„๋ก ํ–ˆ๋‹ค 
- Contractํด๋ž˜์Šค์— View์™€ Presenter๋ฅผ ์ •์˜ํ•ด ์‚ฌ์šฉ๋œ๋‹ค. 
- View์˜ ์—ญํ•  : View ์ธํ„ฐํŽ˜์ด์Šค์— ์ •์˜๋œ ๋ฉ”์„œ๋“œ๋ฅผ ์žฌ ์ •์˜ํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ํ™”๋ฉด์— ์ถœ๋ ฅ ํ•˜๋ฉฐ Presenter์— ์ƒ๋ช…์ฃผ๊ธฐ ๋˜๋Š” ํด๋ฆญ์ด๋ฒคํŠธ์— ๋Œ€ํ•œ ๋‚ด์šฉ์„ ํ†ต์ง€ํ•œ๋‹ค. 
- MVP ํŒจํ„ด์˜ ์žฅ๋‹จ์  
	1) ์žฅ์ -View์™€ Model๊ฐ„์˜ ์˜์กด์„ฑ์ด ์—†์œผ๋ฉฐ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๊ณผ ui๋ฅผ ๋ถ„๋ฆฌํ•ด ์œ ๋‹› ํ…Œ์ŠคํŠธ๊ฐ€ ์ˆ˜์›”ํ•ด ์ง„๋‹ค. 
	2) ๋‹จ์ 
    		-view ์™€ Presenter ๊ฐ„์˜ ์˜์กด์„ฑ์ด ๋†’์ด์ง€๊ณ  1:1 ๊ด€๊ณ„๋ฅผ ์œ ์ง€ํ•˜๊ธฐ์— 
    Presenter๋ฅผ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์–ด view๊ฐ€ ๋Š˜์–ด๋‚ ๋•Œ๋งˆ๋‹ค presenter๋„ ๊ฐ™์ด ๋Š˜์–ด๋‚˜ ํด๋ž˜์Šค๊ฐ€ ๋งŽ์•„์ง€๊ฒŒ ๋œ๋‹ค.

๐Ÿš™7-3. MVVM ๋””์ž์ธ ํŒจํ„ด

- ๊ธฐ์กด์˜ MVP ํŒจํ„ด์€ View์™€ Presenter ๊ฐ€ ๊ฐ•ํ•˜๊ฒŒ ๊ฒฐํ•ฉ๋˜์–ด์žˆ๋Š” ๋ฌธ์ œ์ ์„ ํ•ด๊ฒฐํ•˜๊ธฐ์œ„ํ•ด LiveDate, RxJava ์™€ ๊ฐ™์€Obserable ํƒ€์ž…์„ ์ด์šฉํ•ด Presenter ์™€ View ์‚ฌ์ด์—์„œ ๊ฐ•ํ•˜๊ฒŒ ์—ฐ๊ฒฐ๋˜์—ˆ๋˜ ์ ์„ ๋Š๋Š”๋ฐ ์ง‘์ค‘ํ•œ๋‹ค. 

- Presenter ๋Œ€์‹ ์— ViewModel์„ ์ด์šฉํ•˜๋ฉฐ ViewModel์€ View์— ํ‘œํ˜„ํ•  ๋ฐ์ดํ„ฐ๋ฅผ Obserable ํƒ€์ž…์œผ๋กœ ๊ด€๋ฆฌํ•˜๋ฉฐ View ๋“ค์ด ViewModel์— ๋ฐ์ดํ„ฐ๋ฅผ ๊ตฌ๋… ์š”์ฒญํ•˜์—ฌ ํ™”๋ฉด์— ๋‚˜ํƒ€๋‚ด๋Š”๊ฒƒ์ด ํ•ต์‹ฌ์ด๋‹ค. 

- View Viewmodel ๊ฐ„์— ๋Š์Šจํ•œ ์—ฐ๊ฒฐ์ด ๋˜๋„๋ก DataBinding  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ํ•„์ˆ˜์ ์œผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค.
profile
๐Ÿ’ป๋””์ง€ํ„ธ ๋…ธ๋งˆ๋“œ๋ฅผ ๐Ÿš€๊ฟˆ๊พธ๋Š” ๐Ÿ‡ฏ๐Ÿ‡ฒ์ž๋ฉ”์ฆˆ ๐Ÿฅ๊ฐœ๋ฐœ์ž ์ž…๋‹ˆ๋‹ค.

1๊ฐœ์˜ ๋Œ“๊ธ€

comment-user-thumbnail
2020๋…„ 7์›” 5์ผ

!!! ์ฒซ ๋Œ“๊ธ€

๋‹ต๊ธ€ ๋‹ฌ๊ธฐ