๋ชฉ๋ก์ „์ฒด ๊ธ€ (162)

EEALL@ONCE

๐ŸŒฑ์„œ๋น„์Šค ๋ถ€๋ถ„ ๋กœ์ง ๋ฐ”๊พธ๊ธฐ ( OCP, DIP ์ ์šฉ ๋ฒ„์ „)

1. ์ด์ „ ๊ธ€ ๋ฌธ์ œ์  ํด๋ผ์ด์–ธํŠธ ์ฝ”๋“œ์ธ OrderServiceImpl์ด ์ธํ„ฐํŽ˜์ด์Šค๋“ค ๋ฟ๋งŒ์ด ์•„๋‹ˆ๋ผ, ๊ตฌ์ฒด ํด๋ž˜์Šค ( FixDiscountPolicy,RateDiscountPolicy)์—๋„ ์˜์กดํ–ˆ๋‹ค. ์‰ฝ๊ฒŒ ๋งํ•˜์ž๋ฉด, ํ•ด๋‹น ์ฝ”๋“œ์— ๊ตฌ์ฒด ํด๋ž˜์Šค ์ฝ”๋“œ๊ฐ€ ๋“ค์–ด๊ฐ„๋‹ค๋Š” ๊ฒƒ!! 2. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ธํ„ฐํŽ˜์ด์Šค์—๋งŒ ์˜์กดํ•˜๋„๋ก ๋งŒ๋“ค์ž. public class OrderServiceImpl implements OrderService{ ์•ˆ์— private DiscountPolicy discountPolicy; ์ธํ„ฐํŽ˜์ด์Šค๋งŒ ์„ ์–ธํ•ด์ค€๋‹ค. ๊ทผ๋ฐ ๊ทธ๋Ÿผ ๊ตฌํ˜„์ฒด๊ฐ€ ์—†๋Š”๋ฐ ์–ด๋–ป๊ฒŒ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์„๊นŒ? 3.์—ญํ•  ๋ถ„๋ฆฌ ํ›„ ์ฃผ์ž… ์ธํ„ฐํŽ˜์ด์Šค๋Š” ์ธ๋ฌผ์ด๊ณ  ๊ตฌํ˜„์ฒด๋Š” ๋ฐฐ์šฐ๋ผ๊ณ  ๊ฐ€์ •ํ•˜์ž. ๊ทธ๋ฆฌ๊ณ  ์—ฌ๊ธฐ์„œ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์—ฐ๊ทน ์ž‘๊ฐ€๋ผ๊ณ  ํ•œ๋‹ค๋ฉด, ์—ฐ๊ทน ์ž‘๊ฐ€๋Š” ..

Spring๐ŸŒฑ 2023. 7. 11. 23:24
๐ŸŒฑ์„œ๋น„์Šค ๋ถ€๋ถ„ ๋กœ์ง ๋ฐ”๊พธ๊ธฐ ( OCP, DIP ๋ฌด์‹œ ๋ฒ„์ „)

1. ์• ์ž์ผ ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ ์„ ์–ธ (๊ณ„ํš์„ ๋”ฐ๋ฅด๊ธฐ๋ณด๋‹ค ๋ณ€ํ™”์— ๋Œ€์‘ ์ˆœ์‘ํ•˜๊ธฐ๋ฅผ!) ๊ฐœ๋ฐœ์„ ํ•˜๋‹ค๋ณด๋ฉด, ์• ์ž์ผ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•  ์ˆ˜ ๋ฐ–์— ์—†๋‹ค. ์‚ฌ์‹ค ๊ธฐํš์ž๋„ ์ž์‹ ์ด ๋ญ˜ ํ•˜๊ณ  ์‹ถ์€์ง€ ์ •ํ™•ํ•˜๊ฒŒ ๋ชจ๋ฅผ ๋•Œ๊ฐ€ ๋งŽ๋‹ค! ๊ทธ๋•Œ๋งˆ๋‹ค, ๊ฐœ๋ฐœ์ž๋Š” ๋งŒ๋“ค์–ด์„œ ๋ณด์—ฌ์ฃผ๊ณ  ๊ธฐํš์ž์—๊ฒŒ ์—ญ์œผ๋กœ ๋ฐฉ๋ฒ•์„ ์žฌ์‹œํ•œ๋‹ค๋˜๊ฐ€, ์•„๋‹˜ ๊ธฐํš์ž๊ฐ€ ์ค‘๊ฐ„์— ์ž์‹ ์ด ๊นจ๋‹ซ์ง€ ๋ชปํ•œ ๋ถ€๋ถ„์„ ์ถ”๊ฐ€ํ•˜๊ณ  ์‹ถ์„ ๋•Œ, ๋ณ€ํ™”๊ฒŒ ์ˆœ์‘ํ•ด์„œ ๋˜ ๊ทธ๋ ‡๊ฒŒ ๋งŒ๋“ค์–ด์ค˜์•ผํ•œ๋‹ค. ์™œ๋ƒ๋ฉด... ๊ธฐํš์ด๋ž€ ๊ทธ๋Ÿฐ๊ฑฐ๊ณ ... ๊ฐœ๋ฐœ์ž๋ž€ ๊ทธ๊ฑธ ์‹คํ–‰์‹œํ‚ค๋Š” ์—ญํ• ์ด๋‹ˆ๊นŒ... ์–ด์ฉ” ์ˆ˜ ์—†๋‹ค. 2. ๋‹ค์‹œ ๋ฐ”๋€ ํ• ์ธ ์ •์ฑ… ์ด์•ผ๊ธฐ๋กœ ๋Œ์•„๊ฐ€์ž ๊ณ ์ • ๊ธˆ์•ก ํ• ์ธ์—์„œ ๊ณ ์ • ํผ์„ผํŠธ ํ• ์ธ์œผ๋กœ ๋ฐ”๊พผ๋‹ค. ๐Ÿฅ‘ RateDiscountPolicy(%ํ• ์ธ์œจ) package hello.core.discount; import hello.core.me..

Spring๐ŸŒฑ 2023. 7. 3. 23:01
๐ŸŒฑ๋งˆ์Œ์„ ์ •ํ•˜์ง€ ์•Š์€ ์‚ฌ์žฅ๊ณผ Spring์„ ์‚ฌ์šฉํ•ด์„œ ์œ ์—ฐํ•˜๊ฒŒ ์ฝ”๋“œ๋ฅผ ์ง„ํ–‰ํ•˜๋Š” ๊ฐœ๋ฐœ์ž

1. ์ƒํ™ฉ ํ• ์ธ ์ •์ฑ… ๋งˆ์Œ์„ ์•ˆ ์ •ํ•œ ์‚ฌ์žฅ๊ณผ ๋จธ๋ฆฌ๊ฐ€ ์•„ํ”ˆ ๊ฐœ๋ฐœ์ž ํ˜„ ์ƒํ™ฉ์€ vip์—๊ฒŒ ๊ณ ์ • ํ• ์ธ or ํšŒ์› ๋“ฑ๊ธ‰์— ๋”ฐ๋ผ ํ• ์ธ ๋“ฑ์„ ๊ณ ๋ฏผ์ค‘์ด๋‹ค. 2. ์ฃผ๋ฌธ ๋„๋ฉ”์ธ ํ˜‘๋ ฅ,์—ญํ• ,์ฑ…์ž„ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ฃผ๋ฌธ์„ ํ•˜๋ฉด, ์„œ๋น„์Šค๋Š” ํšŒ์› ์กฐํšŒ๋ฅผ ํ•˜๊ณ  ๊ทธ์— ๋”ฐ๋ฅธ ํ• ์ธ์„ ์ ์šฉํ•˜๊ณ  ํ• ์ธ ๊ฒฐ๊ณผ๋ฅผ ํฌํ•จํ•œ ์ฃผ๋ฌธ ๊ฒฐ๊ณผ๋ฅผ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋Œ๋ ค์ค€๋‹ค. 3. ๊ณ ์ • ํ• ์ธ ์ฝ”๋“œ ์„ค๊ณ„ member ํŒจํ‚ค์ง€๋Š” ํšŒ์› ์ •๋ณด ๋กœ์ง์ด / discount ํŽ˜ํ‚ค์ง€์—๋Š” ํ• ์ธ ๋กœ์ง์ด / order ํŽ˜ํ‚ค์ง€์—๋Š” ์ฃผ๋ฌธ ๋กœ์ง์ด ๋‹ด๊ฒจ์žˆ๋‹ค. ์ˆœ์„œ๋Š” ๊ฐ ํŒจํ‚ค์ง€๋งˆ๋‹ค DTO/Repository /Service/Main์ˆœ์„œ๋กœ ์ฝ”๋“œ๋ฅผ ๋ณด์—ฌ์ฃผ๊ฒ ๋‹ค. ๐Ÿฅ‘ member ํŒจํ‚ค์ง€ ๐Ÿ”ป member ๊ฐ์ฒด (DTO) package hello.core.member; public class Member {..

Spring๐ŸŒฑ 2023. 6. 23. 17:40
๐ŸŒฑ์ข‹์€ ๊ฐ์ฒด ์ง€ํ–ฅ ์„ค๊ณ„์˜ 5๊ฐ€์ง€ ์›์น™ (SOLID)

• SRP: ๋‹จ์ผ ์ฑ…์ž„ ์›์น™(single responsibility principle) ๋‹จ์ผ ์ฑ…์ž„ ์›์น™์€ ํ•œ ํด๋ž˜์Šค๋Š” ํ•˜๋‚˜์˜ ์ฑ…์ž„์„ ๊ฐ€์ ธ์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ๋‹ค. ์กฐ๊ธˆ ๋ชจํ˜ธํ•œ ๊ฐœ๋…์ด๋‹ค. ํฐ ์ฑ…์ž„ ์ž‘์€ ์ฑ…์ž„, ํ•˜๋‚˜์˜ ์ฑ…์ž„์ด๋ผ๊ณ  ํ•ด๋„ ๊ทธ ๊ทœ๋ชจ๊ฐ€ ๋‹ค๋ฅด๋‹ค. ๊ทธ๋ž˜์„œ ๊ธฐ์ค€์€ "๋ณ€๊ฒฝ"์ด๋‹ค. ๋งŒ์•ฝ ๋ณ€๊ฒฝ์ด ํ•„์š”ํ•œ ์‹œ์ ์—์„œ ๋„ˆ๋ฌด ๋งŽ์€ ๋ณ€๊ฒฝ์ด ํ•„์š”ํ•˜๋‹ค๋ฉด, ๋‹จ์ผ ์ฑ…์ž„ ์›์น™์ด ์ž˜ ์ง€์ผœ์ง€์ง€ ์•Š์€ ๊ฒƒ์ด๋‹ค. • OCP: ๊ฐœ๋ฐฉ-ํ์‡„ ์›์น™ (Open/closed principle) ์†Œํ”„ํŠธ์›จ์–ด ์š”์†Œ๋Š” ํ™•์žฅ์—๋Š” ์—ด๋ ค์žˆ์œผ๋‚˜ ๋ณ€๊ฒฝ์—๋Š” ๋‹ซํ˜€ ์žˆ์–ด์•ผ ํ•œ๋‹ค๋Š” ์›์น™ ์‚ฌ์‹ค ์ธํ„ฐํŽ˜์ด์Šค๋งŒ ์ƒ๊ฐํ•ด๋„ ๋ญ”๊ฐ€ ๊ทธ๋Ÿด์‹ธํ•œ ์ด์•ผ๊ธฐ์ด์ง€๋งŒ, ์‚ฌ์‹ค ๊ตฌํ˜„์„ ๋ฐ”๊พธ๋ฉด, ํด๋ผ์ด์–ธํŠธ์ชฝ์—์„œ๋„ ๊ตฌํ˜„ ํด๋ž˜์Šค๋ฅผ ์ง์ ‘ ์„ ํƒํ•ด์•ผํ•ด์„œ, ์ฝ”๋“œ ์ˆ˜์ •์ด ๋ถˆ๊ฐ€ํ”ผํ•˜๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์ด ๊ฒฝ์šฐ๋„ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๊ธฐ์กด A..

Spring๐ŸŒฑ 2023. 6. 23. 10:28
๐ŸŒฑ์Šคํ”„๋ง ํ•ต์‹ฌ ์ปจ์…‰

1. ์Šคํ”„๋ง์ด๋ž€? -์ž๋ฐ”(๊ฐ์ฒด ์ง€ํ–ฅ) ์–ธ์–ด ๊ธฐ๋ฐ˜์˜ ํ”„๋ ˆ์ž„์›Œํฌ -์Šคํ”„๋ง์€ ์ข‹์€ ๊ฐ์ฒด ์ง€ํ–ฅ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์ฃผ๋Š” ํ”„๋ ˆ์ž„์›Œํฌ ๊ทธ๋ ‡๋‹ค๋ฉด... 2. ์ข‹์€ ๊ฐ์ฒด ์ง€ํ–ฅ ์–ธ์–ด๋ž€? ๊ฐ์ฒด ์ง€ํ–ฅ ํŠน์ง• 1. ์ถ”์ƒํ™ฉ 2. ์บก์Šํ™” 3. ์ƒ์† 4. ๋‹คํ˜•์„ฑ ๊ทธ ์ค‘์—์„œ๋„ ๋‹คํ˜•์„ฑ์ด ์ค‘์š”ํ•œ๋ฐ.. ๋‹คํ˜•์„ฑ์ด๋ž€? 3. ๋‹คํ˜•์„ฑ ์—ญํ• ๊ณผ ๊ตฌํ˜„์„ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฒƒ ํด๋ผ์ด์–ธํŠธ๋Š” ๋Œ€์ƒ์˜ ์—ญํ• ๋งŒ ์•Œ๋ฉด ๋œ๋‹ค. ํด๋ผ์ด์–ธํŠธ๋Š” ๊ตฌํ˜„ ๋Œ€์ƒ์˜ ๋‚ด๋ถ€ ๊ตฌ์กฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜์–ด๋„ ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š๋Š”๋‹ค. ํด๋ผ์ด์–ธํŠธ๋Š” ๊ตฌํ˜„ ๋Œ€์ƒ ์ž์ฒด๋ฅผ ๋ณ€๊ฒฝํ•ด๋„ ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š๋Š”๋‹ค. ์—ญํ•  = ์ธํ„ฐํŽ˜์ด์Šค / ๊ตฌํ˜„ = ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค,๊ตฌํ˜„ ๊ฐ์ฒด ๋”ฐ๋ผ์„œ, ๐Ÿ”ป๊ฐ์ฒด ์„ค๊ณ„์‹œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋จผ์ € ๋ถ€์—ฌํ•˜๊ณ , ๊ทธ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ตฌํ˜„ ๊ฐ์ฒด ๋งŒ๋“ค๊ธฐ ์—ญํ• ์ด ๊ตฌํ˜„๋ณด๋‹ค ์ค‘์š”ํ•˜๋‹ค!! ์ž๋ฐ” ์–ธ์–ด์˜ ๋‹คํ˜•์„ฑ์—์„œ..

Spring๐ŸŒฑ 2023. 6. 23. 09:35