๐Ÿง‘๐Ÿปโ€๐Ÿ’ป๊ฐ์ฒด์ง€ํ–ฅ 5์›์น™(SOLID)

DEVJUNยท2021๋…„ 12์›” 19์ผ
0
post-custom-banner

SRP: ๋‹จ์ผ ์ฑ…์ž„ ์›์น™(singleresponsibilityprinciple)

ํ•˜๋‚˜์˜ ํด๋ž˜์Šค๋Š” ํ•˜๋‚˜์˜ ์ฑ…์ž„๋งŒ์„ ๊ฐ€์ ธ์•ผ ํ•œ๋‹ค!!

โš ๏ธ ์ค‘์š”ํ•œ ๊ธฐ์ค€์€ ๋ณ€๊ฒฝ์ด๋‹ค . ๋ณ€๊ฒฝ์ด ์žˆ์„ ๋•Œ ํŒŒ๊ธ‰ ํšจ๊ณผ๊ฐ€ ์ ์œผ๋ฉด ๋‹จ์ผ ์ฑ…์ž„ ์›์น™์„ ์ž˜ ๋”ฐ๋ฅธ ๊ฒƒ์ด๋‹ค.

ํด๋ž˜์Šค๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ์ด์œ  ๋˜ํ•œ ํ•œ๊ฐ€์ง€ ๋ฟ ์ด์–ด์•ผ ํ•œ๋‹ค!




OCP: ๊ฐœ๋ฐฉ-ํ์‡„ ์›์น™ (Open/closed principle)

์†Œํ”„ํŠธ์›จ์–ด ์š”์†Œ๋Š” ํ™•์žฅ์—๋Š” ์—ด๋ ค ์žˆ์œผ๋‚˜ ๋ณ€๊ฒฝ์—๋Š” ๋‹ซํ˜€ ์žˆ์–ด์•ผ ํ•œ๋‹ค!!

MemberService๋ผ๋Š” ํด๋ผ์ด์–ธํŠธ ์ฝ”๋“œ์—์„œ ์ธํ„ฐํŽ˜์ด์Šค์ธ memberRepository์— ์˜์กด์„ ํ•˜๊ณ  ์žˆ์ง€๋งŒ ๋™์‹œ์— ๊ฒฝ์šฐ์— ๋”ฐ๋ผ MemoryMemberRepository, JdbcMemberRepostiory ๊ตฌํ˜„ ํด๋ž˜์Šค์—๋„ ์˜์กดํ•˜๊ณ  ์žˆ๋‹ค. ๊ฒฐ๊ตญ์—” ๊ฒฝ์šฐ์— ๋”ฐ๋ผ ํด๋ผ์ด์–ธํŠธ ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•ด์•ผ ๋˜๋Š” ๊ฒƒ์ด๊ณ  ๋‹คํ˜•์„ฑ์„ ์‚ฌ์šฉํ–ˆ์Œ์—๋„ OCP ์›์น™์„ ์ง€ํ‚ฌ์ˆ˜ ์—†๋Š” ์…ˆ์ด๋‹ค.



LSP: ๋ฆฌ์Šค์ฝ”ํ”„ ์น˜ํ™˜ ์›์น™ (Liskov substitution principle)

ํ”„๋กœ๊ทธ๋žจ ๊ฐ์ฒด๋Š” ํ”„๋กœ๊ทธ๋žจ์˜ ์ •ํ™•์„ฑ์„ ๊นจ๋œจ๋ฆฌ์ง€ ์•Š์œผ๋ฉด์„œ ํ•˜์œ„ ํƒ€์ž…์˜ ์ธ์Šคํ„ด์Šค๋กœ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค!!

๋‹คํ˜•์„ฑ์„ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•œ ์›์น™์œผ๋กœ ์„œ๋ธŒ ํƒ€์ž…์€ ์–ธ์ œ๋‚˜ ์ž์‹ ์˜ ๊ธฐ๋ฐ˜(์ƒ์œ„) ํƒ€์ž…์œผ๋กœ ๊ต์ฒดํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.

์ฆ‰ ๋ถ€๋ชจ ํด๋ž˜์Šค๊ฐ€ ๋“ค์–ด๊ฐˆ ์ž๋ฆฌ์— ์ž์‹ํด๋ž˜์Šค๋กœ ๋Œ€์ฒดํ•ด๋„ ์ž˜ ๋™์ž‘ํ•ด์•ผ ํ•œ๋‹ค



ISP: ์ธํ„ฐํŽ˜์ด์Šค ๋ถ„๋ฆฌ ์›์น™ (Interface segregation principle)

๐ŸŽ ์ž๋™์ฐจ ์ธํ„ฐํŽ˜์ด์Šค -> ์šด์ „ ์ธํ„ฐํŽ˜์ด์Šค, ์ •๋น„ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๋ถ„๋ฆฌ
๐Ÿ‘จ๐Ÿปโ€๐Ÿ”ง ์‚ฌ์šฉ์ž ํด๋ผ์ด์–ธํŠธ -> ์šด์ „์ž ํด๋ผ์ด์–ธํŠธ, ์ •๋น„์‚ฌ ํด๋ผ์ด์–ธํŠธ๋กœ ๋ถ„๋ฆฌ

๐Ÿ‘๐Ÿป ๋ถ„๋ฆฌํ•  ๊ฒฝ์šฐ ์ •๋น„ ์ธํ„ฐํŽ˜์ด์Šค ์ž์ฒด๊ฐ€ ๋ณ€ํ•ด๋„ ์šด์ „์ž ํด๋ผ์ด์–ธํŠธ์—๋Š” ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋Š”๋‹ค.

ํด๋ผ์ด์–ธํŠธ๋Š” ์ž์‹ ์ด ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ฉ”์„œ๋“œ์— ์˜์กด๊ด€๊ณ„๋ฅผ ๋งบ์œผ๋ฉด ์•ˆ๋œ๋‹ค.
๋ณดํ†ต ์†Œํ”„ํŠธ์›จ์–ด ์„ค๊ณ„ ์‹œ SRP์™€ ISP ์ค‘ ํ•˜๋‚˜๋ฅผ ์„ ํƒํ•œ๋‹ค.



DIP: ์˜์กด๊ด€๊ณ„ ์—ญ์ „ ์›์น™ (Dependency inversion principle)

ํ”„๋กœ๊ทธ๋ž˜๋จธ๋Š” "์ถ”์ƒํ™”(์ธํ„ฐํŽ˜์ด์Šค)์— ์˜์กดํ•ด์•ผ์ง€, ๊ตฌ์ฒดํ™”(๊ตฌํ˜„ํด๋ž˜์Šค)์— ์˜์กดํ•˜๋ฉด ์•ˆ๋œ๋‹ค." ๋’ค์—์„œ ์ •๋ฆฌํ•  ์˜์กด์„ฑ ์ฃผ์ž…์€ ์ด ์›์น™์„ ๋”ฐ๋ฅด๋Š” ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜์ด๋‹ค.

์•ž์—์„œ ์—ญํ• ๊ณผ ๊ตฌํ˜„์ด๋ผ๋Š” ์ด์•ผ๊ธฐ๋ฅผ ํ–ˆ๋‹ค. ๐Ÿ˜ฎโ€๐Ÿ’จ๊ตฌํ˜„์— ์˜์กดํ•  ๊ฒฝ์šฐ ๋ณ€๊ฒฝ์ด ์ •๋ง ์–ด๋ ค์›Œ์ง€๊ธฐ ๋•Œ๋ฌธ์— ์—ญํ• (์ธํ„ฐํŽ˜์ด์Šค or ์ถ”์ƒํด๋ž˜์Šค)์— ์˜์กดํ•ด์•ผํ•œ๋‹ค.

์ถœ์ฒ˜

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%95%B5%EC%8B%AC-%EC%9B%90%EB%A6%AC-%EA%B8%B0%EB%B3%B8%ED%8E%B8/dashboard

profile
๐Ÿง‘๐Ÿปโ€๐Ÿ’ปiOS
post-custom-banner

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