ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • TIL(24์ผ์ฐจ)(2021.11.14)
    TIL(Today I Learned) 2021. 11. 14. 16:49

    SOLID ๐Ÿ“Œ

    • SRP : ๋‹จ์ผ ์ฑ…์ž„ ์›์น™
      • Single Responsibility Principle
      • ํ•˜๋‚˜์˜ ํด๋ž˜์Šค์—๋Š” ํ•˜๋‚˜์˜ ์ฑ…์ž„๋งŒ ๊ฐ€์ง„๋‹ค(์ฑ…์ž„์˜ ํฌ๊ธฐ๋Š” ํด ์ˆ˜๋„, ์ž‘์„ ์ˆ˜๋„ ์žˆ๋‹ค.)
      • ์ค‘์š”ํ•œ๊ฒƒ์€ ๋ณ€๊ฒฝ์˜ ํŒŒ๊ธ‰๋ ฅ์ด๋‹ค. ๋ณ€๊ฒฝ์˜ ํŒŒ๊ธ‰์ด ์ ์„ ์ˆ˜๋ก ๋‹จ์ผ ์ฑ…์ž„ ์›์น™์„ ์ž˜๋”ฐ๋ฅธ๊ฒƒ์ด๋‹ค.
    • OCP : ๊ฐœ๋ฐฉ-ํ์‡„ ์›์น™
      • Open/Closed Principle
      • ๊ฐ€์žฅ ์ค‘์š”ํ•œ ์›์น™
      • ์†Œํ”„ํŠธ์›จ์–ด ์š”์†Œ๋Š” ํ™•์žฅ์—๋Š” ์—ด๋ ค ์žˆ์œผ๋‚˜, ๋ณ€๊ฒฝ์—๋Š” ๋‹ซํ˜€ ์žˆ์–ด์•ผ ํ•œ๋‹ค.
      • ์ฆ‰, ์ฝ”๋“œ ํ™•์žฅ์€ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ๋ณ€๊ฒฝ์€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ์—ญ์„ค์ ์ธ ์˜๋ฏธ.
      • ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค๋“ค์˜ ๋ณ€๊ฒฝ์€ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, ์ธํ„ฐํŽ˜์ด์Šค ์ž์ฒด์˜ ๋ณ€๊ฒฝ์€ ์•ˆ๋œ๋‹ค๋Š” ์˜๋ฏธ.
      • ๋‹คํ˜•์„ฑ์˜ '์—ญํ• '๊ณผ '๊ตฌํ˜„'์˜ ๋ถ„๋ฆฌ
      • ํ•˜์ง€๋งŒ! ๊ตฌํ˜„ ์ž์ฒด๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š”๊ฒƒ๋„ OCP๋ฅผ ์œ„๋ฐ˜ํ•˜๋Š” ํ–‰์œ„
      • ๊ทธ๋Ÿฌ๋ฏ€๋กœ Ioc์™€ DI ๋“ฑ์„ ์„ค์ •ํ•ด์ค˜์„œ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•œ๋‹ค.
    • LSP : ๋ฆฌ์Šค์ฝ”ํ”„ ์น˜ํ™˜ ์›์น™
      • Liskov Substitution Principle
      • ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ๊ฐ€์ง„ ํŠน์„ฑ์„ ๊ตฌํ˜„ํ–ˆ์„ ๋•Œ, ๊ทธ ๊ตฌํ˜„์ฒด์˜ ๊ธฐ๋Šฅ์ด ์ธํ„ฐํŽ˜์ด์Šค ํŠน์ง•๊ณผ ๋“ค์–ด๋งž์•„์•ผํ•œ๋‹ค.
      • ์ฆ‰, ์ž๋™์ฐจ ์ธํ„ฐํŽ˜์ด์Šค์˜ ๊ตฌํ˜„์—์„œ ์•ก์…€์„ ๊ตฌํ˜„ํ•  ๋•Œ, ์•ก์…€์„ ๋ฐž์„ ๋•Œ ์•ž์œผ๋กœ ๊ฐ€๋Š”๊ฒƒ์ด ์•„๋‹Œ ํ›„์ง„์ด ๋˜๋Š”๊ฒƒ์„ ๋ฐฉ์ง€ํ•ด์•ผํ•œ๋‹ค.
    • ISP : ์ธํ„ฐํŽ˜์ด์Šค ๋ถ„๋ฆฌ ์›์น™
      • Interface Segregation Principle
      • ํŠน์ • ํด๋ผ์ด์–ธํŠธ๋ฅผ ์œ„ํ•œ ์ธํ„ฐํŽ˜์ด์Šค ์—ฌ๋Ÿฌ ๊ฐœ๊ฐ€ ๋ฒ”์šฉ ์ธํ„ฐํŽ˜์ด์Šค ํ•˜๋‚˜๋ณด๋‹ค ๋‚ซ๋‹ค.
      • ์˜ˆ๋กœ ์ž์ „๊ฑฐ ์ธํ„ฐํŽ˜์ด์Šค -> ์‚ฐ์•…์šฉ ์ž์ „๊ฑฐ, ๋กœ๋“œํ˜• ์ž์ „๊ฑฐ, ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ์ž์ „๊ฑฐ๋กœ ๋ถ„๋ฆฌ
      • ๋ถ„๋ฆฌํ•˜๋ฉด ๊ฐ๊ฐ์˜ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ๋ณ€๊ฒฝ๋˜์–ด๋„ ์„œ๋กœ ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋Š”๋‹ค.
      • ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ๋ช…ํ™•ํ•ด์ง€๊ณ , ๋Œ€์ฒด ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์•„์ง„๋‹ค.
    • DIP ์˜์กด๊ด€๊ณ„ ์—ญ์ „ ์›์น™
      • Dependency Inversion Principle
      • ํ”„๋กœ๊ทธ๋ž˜๋จธ๋Š” "์ถ”์ƒํ™”์— ์˜์กดํ•ด์•ผ์ง€, ๊ตฌ์ฒดํ™”์— ์˜์กดํ•˜๋ฉด ์•ˆ๋œ๋‹ค."
      • ์ฆ‰, ํด๋ผ์ด์–ธํŠธ๋Š” ์ธํ„ฐํŽ˜์ด์Šค์— ์˜์กดํ•ด์•ผ์ง€ ๊ตฌํ˜„์ฒด์— ์˜์กดํ•ด์„  ์•ˆ๋œ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค.
      public class MemberServic {
         private MemberRepository memberRepository = new MemoryMemberRepository();
      }
      • ์œ„ ์ฝ”๋“œ์—์„  ์ธํ„ฐํŽ˜์ด์Šค ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๊ตฌํ˜„์ฒด์—๋„ ์˜์กดํ•˜๊ณ  ์žˆ๋‹ค. ๋•Œ๋ฌธ์— DIP๋ฅผ ์œ„๋ฐ˜ํ•œ๋‹ค.

    ๊ฒฐ๋ก  ๐ŸŽฏ

    • ๊ฐ์ฒด ์ง€ํ–ฅ์˜ ํ•ต์‹ฌ์€ ๋‹คํ˜•์„ฑ
    • ๋‹คํ˜•์„ฑ ๋งŒ์œผ๋กœ๋Š” ์‰ฝ๊ฒŒ ๋ถ€ํ’ˆ์„ ๊ฐˆ์•„ ๋ผ์šฐ๋“ฏ์ด ๊ฐœ๋ฐœํ•  ์ˆ˜ ์—†๋‹ค.
    • ๋‹คํ˜•์„ฑ ๋งŒ์œผ๋กœ๋Š” ๊ตฌํ˜„ ๊ฐ์ฒด๋ฅผ ๋ณ€๊ฒฝํ•  ๋•Œ, ํด๋ผ์ด์–ธํŠธ ์ฝ”๋“œ๋„ ํ•จ๊ป˜ ๋ณ€๊ฒฝ๋œ๋‹ค.
    • ๋‹คํ˜•์„ฑ ๋งŒ์œผ๋กœ๋Š” OCP, DIP๋ฅผ ์ง€ํ‚ฌ ์ˆ˜ ์—†๋‹ค.

    ์ข‹์€ ๊ฐ์ฒด์ง€ํ–ฅ ์„ค๊ณ„ ๐Ÿ“Œ

    • ๋ชจ๋“  ์„ค๊ณ„์— ์—ญํ• ๊ณผ ๊ตฌํ˜„์„ ๋ถ„๋ฆฌํ•œ๋‹ค.
    • ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์„ค๊ณ„ํ•ด๋‘๊ณ  ๊ตฌํ˜„์ฒด๋Š” ์–ธ์ œ๋“ ์ง€ ์œ ์—ฐํ•˜๊ฒŒ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“œ๋Š”๊ฒƒ์ด ๊ฐ์ฒด์ง€ํ–ฅ ์„ค๊ณ„์ด๋‹ค.
    • ์ด์ƒ์ ์œผ๋กœ๋Š” ๋ชจ๋“  ์„ค๊ณ„์— ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋ถ€์—ฌํ•˜์ž.

    but!

    • ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋„์ž…ํ•˜๋ฉด ์ถ”์ƒํ™”๋ผ๋Š” ๋น„์šฉ์ด ๋ฐœ์ƒ!
    • ์ถ”์ƒํ™”๋œ ํด๋ž˜์Šค๋Š” ๊ตฌํ˜„์ฒด๋ฅผ ์ฐพ๋Š”๋ฐ ์‹œ๊ฐ„์ด ๋ฐœ์ƒ
    • ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ์„ฑ์ด ๋‚ฎ์€๊ฒƒ์€ ๊ตฌํ˜„์ฒด๋กœ ๋ฐ”๋กœ ๊ตฌํ˜„ํ•˜๊ณ , ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์€ ๊ฒƒ์€ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๊ตฌํ˜„ํ•˜๋Š”๊ฒƒ์ด ์ข‹์Œ.

    ์•ž์œผ๋กœ์˜ ๋ฐฉํ–ฅ์„ฑ ๐Ÿ“Œ

    • ์ˆœ์ˆ˜ ์ž๋ฐ”๋กœ ๋น„์ฆˆ๋‹ˆ์Šค ์š”๊ตฌ์‚ฌํ•ญ์— ๋Œ€ํ•œ ์—ญํ• ๊ณผ ๊ตฌํ˜„์„ ์„ค๊ณ„ํ•ด๋ณด๊ณ 
    • DIP, OCP๋ฅผ ์ถฉ์กฑํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์งœ๋ณธ๋‹ค.

    enum ๐Ÿ“Œ

    • ๊ด€๋ จ์ด ์žˆ๋Š” ์ƒ์ˆ˜๋“ค์˜ ์ง‘ํ•ฉ.
    • ์ƒ์ˆ˜๋ฅผ ์ •์˜ํ•  ๋•Œ ๋งŽ์ด ์‚ฌ์šฉ

    ์‚ฌ์šฉ์ด์œ  : ์ฝ”๋“œ๊ฐ€ ๋‹จ์ˆœํ•ด์ง€๋ฉฐ ๊ฐ€๋…์„ฑ์ด ์ข‹๋‹ค.
    ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ๊ณผ ์ƒ์†์„ ๋ฐฉ์ง€ํ•œ๋‹ค.
    ๊ตฌํ˜„์˜ ์˜๋„๊ฐ€ ์—ด๊ฑฐ์ž„์„ ๋ถ„๋ช…ํ•˜๊ฒŒ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋‹ค.

    ConcurrentHashMap<>() ๐Ÿ“Œ

    • ๋™์‹œ ์ ‘์†์ด ๋งŽ์„ ์‹œ hashMap ๋Œ€์‹  ์‚ฌ์šฉ
    • ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ ๋ฐฉ์‹์œผ๋กœ ์ฒ˜๋ฆฌ

     

    // MemberServiceImpl
        private final MemberRepository memberRepository = new MemoryMemberRepository();
    

    -> MemberRepository interface๋งŒ ์ฐธ์กฐํ•˜๋ฉด Null ๊ฐ’์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ˜ํ™˜ x
    -> MemoryMemberRepository ๊ตฌํ˜„์ฒด๋ฅผ ์ถ”๊ฐ€ํ•ด์ค˜์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์„ ์–ธ.

    'TIL(Today I Learned)' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

    TIL(2021.11.16)(26์ผ์ฐจ)  (0) 2021.11.16
    TIL 25์ผ์ฐจ (2021.11.15)  (0) 2021.11.15
    TIL(23์ผ์ฐจ)(2021.11.13)  (0) 2021.11.13
    TIL(22์ผ์ฐจ)(2021.11.12)  (0) 2021.11.12
    TIL 21์ผ์ฐจ(11.11)  (0) 2021.11.11
Designed by Tistory.