๊ฐœ๋ฐœ/BACKEND

์™œ Impl๋Š” ์‚ฌ์šฉํ•˜์ง€ ๋ง๋ผ๋Š” ๊ฑธ๊นŒ?

H_JU_0527 2024. 7. 10. 12:13

??? : ์ผ๋‹จ ๋™์ž‘ํ•˜๊ฒŒ ๋งŒ๋“ค์–ด๋ด

๐Ÿค” Impl ? 

Impl ์‚ฌ์šฉ ์˜ˆ์‹œ

  • ๋ณ€๋™์‚ฌํ•ญ์— ์‰ฝ๊ฒŒ ์ ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค/๊ตฌํ˜„์ฒด ๋ฐฉ์‹์—์„œ ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ๊ตฌํ˜„์ฒด ์ด๋ฆ„์ด๋‹ค.
  • Service๋ฅผ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๊ตฌํ˜„ํ•˜๊ณ , ํ•ด๋‹น Service์˜ ์‹ค์ œ ๊ตฌํ˜„์ฒด๋ฅผ `ServiceImpl`๋ผ๋Š” ๋ช…์นญ์œผ๋กœ ์ฃผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค.

์‹ค์ œ๋กœ ์œ„ ์‚ฌ์ง„์ฒ˜๋Ÿผ, ๋‚˜๋Š” ํ”„๋กœ์ ํŠธ ๋Œ€๋ถ€๋ถ„์˜ Service๋ฅผ ์œ„์™€ ๊ฐ™์ด ๊ตฌํ˜„ํ•˜๊ณ  ์žˆ์—ˆ๋‹ค.

 

๐ŸŽฏ Impl๋ฅผ ์‚ฌ์šฉํ–ˆ๋˜ ์ด์œ 

์Šคํ”„๋ง์„ ์ฒ˜์Œ ๋ฐฐ์šธ๋•Œ๋ถ€ํ„ฐ Service๋‹จ์˜ ๋ฏธ๋ž˜์— ๋ฐœ์ƒํ•  ํ™•์žฅ์„ ์œ„ํ•ด ์ž‘์„ฑํ•œ๋‹ค๊ณ  ๋ฐฐ์› ๊ณ , ์‹ค์ œ๋กœ DB๋กœ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜ ํŠน์ • ์กฐ๊ฑด์— ๋”ฐ๋ผ ๊ฐ๊ธฐ ๋‹ค๋ฅธ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ์—์„œ ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉ๋˜๋Š” ๊ฒƒ์„ ๋ณด์•˜๋‹ค.

 

๊ทธ๋ž˜์„œ ํ”„๋กœ์ ํŠธ ๊ธฐํš์—์„œ ํ™•์žฅ์— ๊ด€ํ•˜์—ฌ ์ •ํ•ด์ง„ ๊ฒƒ์ด ์—†์—ˆ์ง€๋งŒ, ๋ฏธ๋ž˜์— ์žˆ์„ ํ™•์žฅ์„ ์œ„ํ•ด ๋ฏธ๋ฆฌ ์ธํ„ฐํŽ˜์ด์Šค/๊ตฌํ˜„์ฒด ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„ํ–ˆ๋‹ค. 

 

๐Ÿ˜จ Impl์„ ์‚ฌ์šฉํ•˜์ง€ ๋ง๋ผ๋Š”๋ฐ ?

์–ด๋Š ๋‚ , ํŒ€์›๋“ค๊ณผ ํ•จ๊ป˜ ์ฝ”๋“œ๋ฅผ ๋ณด๋˜ ์ค‘ ์ด๋Ÿฐ ํ”ผ๋“œ๋ฐฑ๊ณผ ๊ด€๋ จ ์˜์ƒ์„ ๋ฐ›์•˜๋‹ค.

๊ด€๋ จ ์˜์ƒ ( ์ œ๋ฏธ๋‹ˆ์˜ ๊ฐœ๋ฐœ์‹ค๋ฌด )

 

์˜์ƒ์„ ํ†ตํ•ด ์ดํ•ดํ•œ ๊ฒƒ์„ ์ •๋ฆฌํ•ด ๋ณด๋ฉด,

  1. ์ธํ„ฐํŽ˜์ด์Šค๋„ ์ž์›์ด๋ฏ€๋กœ, ์•„๊ปด์„œ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.
  2. ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ๊ฐ€์ ธ๋‹ค์ฃผ๋Š” ์ด์ ์ด ๋‹น์—ฐํžˆ ๋งŽ์ง€๋งŒ, ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ๋งŽ์œผ๋ฉด ๋งŽ์„์ˆ˜๋ก ์ง๊ด€๋ ฅ์ด ๋–จ์–ด์ง„๋‹ค.
  3. ๋‚จ๋ฐœํ•˜๋Š” ๊ฒƒ์€ ์ข‹์ง€ ์•Š๋‹ค๊ณ  ์ƒ๊ฐํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์ •๋ง ์จ์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ์—๋งŒ ์“ฐ๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

ํ•ด๋‹น ์˜์ƒ์„ ๋ณด๋ฉด์„œ ๋“  ๋‚˜์˜ ์ƒ๊ฐ์€ 

  1. ํ™•์žฅ์„ฑ์ด ๋ช…ํ™•ํ•˜์ง€ ์•Š์€ ์ƒํƒœ์—์„œ ๋ฌด์ž‘์ • Impl๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ์ข‹์ง€ ์•Š๊ตฌ๋‚˜.
  2. ํ•˜์ง€๋งŒ ๊ฐœ๋ฐœ์ดˆ๊ธฐ์— ํ™•์žฅ์„ฑ์ด ์ •ํ•ด์ง€๋Š” serivce๊ฐ€ ์–ผ๋งˆ๋‚˜ ์žˆ์„๊นŒ?

 

์‚ฌ์‹ค ์œ„ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด์„œ๋„ "๋ฌด์ž‘์ • Impl๋กœ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ด ๋งž๋Š”๊ฐ€?"๋ผ๋Š” ์˜๊ตฌ์‹ฌ์ด ๋“ค์—ˆ์ง€๋งŒ,

ํ™•์žฅ์„ฑ์„ ๋ฐฐ์ œํ•˜๊ณ  ์ž‘์„ฑํ•˜๊ธฐ์—๋Š” ๋งˆ์Œ์— ๊ฑธ๋ ธ๋‹ค.

๐Ÿ™‹‍โ™‚๏ธ ํ˜„์—…์ž๋ถ„๋“ค์˜ ์ƒ๊ฐ

 

๊ทธ๋ž˜์„œ ํ•ด๋‹น ๊ณ ๋ฏผ์„ ํ˜„์—…์ž๋ถ„์—๊ฒŒ ์—ฌ์ญค๋ณด์•˜๊ณ , ์ •๋ฆฌํ•ด ๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  1. ๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œ(Legacy Code)๋กœ ์ธํ•ด ์–ด์ฉ” ์ˆ˜ ์—†์ด ๋”ฐ๋ผ์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์กด์žฌํ•œ๋‹ค.
  2. ํ•˜์ง€๋งŒ ๊ฐœ๋ฐœ ์ดˆ๊ธฐ๋ผ๋ฉด, ๋ฌด์ž‘์ • Impl๋ฅผ ๊ตฌํ˜„ํ•˜์ง„ ์•Š์„ ๊ฒƒ ๊ฐ™๋‹ค.
  3. ์ดˆ๊ธฐ์— ํ™•์žฅ์„ฑ์ด ์ •ํ•ด์ง€๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋“œ๋ฌผ๋ฉฐ, ๊ทธ๋Ÿฐ ๊ฒฝ์šฐ๋ฅผ ์ œ์™€ํ•˜๋ฉด ์šฐ์„  ๊ตฌํ˜„์—๋งŒ ์ง‘์ค‘ํ•  ๊ฒƒ ๊ฐ™๋‹ค.
  4. ํ•˜์ง€๋งŒ Impl๋กœ ๊ตฌํ˜„์„ ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ์€ ์ž˜๋ชป๋œ ๋ฐฉ์‹์ด ์•„๋‹ˆ๋‹ˆ, ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ๋ฐ ์Šคํƒ€์ผ์— ๋”ฐ๋ผ ๋‹ค๋ฅผ ๊ฒƒ ๊ฐ™๋‹ค.
๐Ÿ’ก ์ฐธ๊ณ ์‚ฌํ•ญ 
JPA์™€ QueryDSL์„ ์‚ฌ์šฉํ•ด์„œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ™•์ •ํ•ด์•ผ ํ•  ๋•Œ๋Š” Impl๋ฅผ ์จ์•ผ ์Šคํ”„๋ง์ด ์ธ์‹์„ ํ•  ์ˆ˜๊ฐ€ ์žˆ๋‹ค.

 

๐Ÿ’‍โ™‚๏ธ ์‚ฌ์‹ค ํ•ต์‹ฌ์€...

์‚ฌ์‹ค ํ•ต์‹ฌ์€ "Service / Impl ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ๋ง๋ผ"๊ฐ€ ์•„๋‹ˆ๋ผ "Impl๋ผ๋Š” ์ด๋ฆ„์„ ์‚ฌ์šฉํ•˜์ง€ ๋ง๋ผ"์˜€๋‹ค.

 

์˜์ƒ ๋’คํŽธ์—๋„ ๋‚˜์˜ค๊ณ , ํ˜„์—…์ž๋ถ„๋“ค๋„ ์•„๋ž˜์™€ ๊ฐ™์€ ์˜๊ฒฌ์— ๋ชจ๋‘ ๋™์˜ํ•˜์…จ๋‹ค.

 

  1. Impl๋Š” ๋‹จ์ˆœ "๊ตฌํ˜„์ฒด"๋ผ๋Š” ์˜๋ฏธ๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋‹จ์ˆœํ•˜๊ณ  ๋ชจํ˜ธํ•˜๋‹ค.
  2. Service๋ผ๋Š” ๋ช…์นญ์— ๋„ˆ๋ฌด ์–ฝ๋งค์ด์ง€ ์•Š์•„๋„ ๋œ๋‹ค.
  3. ๋” ์ž์„ธํ•˜๊ฒŒ ๋ช…์นญ์„ ์ •ํ•˜์ž. (ex. UserRegister, UserManager...)

 

๐Ÿ“š ์ •๋ฆฌ

ํ™•์žฅ ์ธก๋ฉด์—์„œ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ๊ฐ€์ ธ๋‹ค์ฃผ๋Š” ์ด์ ์€ ๋งŽ๋‹ค.

 

๊ทธ๋Ÿฌ๋‚˜ ํ™•์žฅ์„ฑ์ด ์ •ํ•ด์ง€์ง€ ์•Š์€ ์ƒํƒœ์—์„œ ๋ฌด์ž‘์ • `Impl`๋กœ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์€ ์ง๊ด€๋ จ์„ ๋–จ์–ดํŠธ๋ฆฌ๋Š” ๊ฒƒ ๊ฐ™๋‹ค.

 

๊ทธ๋ž˜์„œ ์›ฌ๋งŒํ•˜๋ฉด

 

`Interface UserSerivce` ๊ตฌํ˜„ ์ดํ›„ `class UserServiceImpl`๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ,

`class UserServiceImpl`๊ตฌํ˜„ ์ดํ›„ ์ถ”ํ›„์— ํ™•์žฅ์„ฑ์ด ํ™•์ •๋˜๋ฉด `Interface UserSerivce`๋ฅผ ๊ตฌํ˜„ํ•˜์—ฌ ์ธํ„ฐํŽ˜์ด์Šค์˜ ์ด์ ์„ ๋ณด์ž.

 

๊ทธ๋ฆฌ๊ณ  `Impl`๋ณด๋‹ค๋Š” ๋” ์ž์„ธํ•˜๊ณ  ๋“ฏ์„ ํ™•์‹คํžˆ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋Š” ๋ช…์นญ์„ ์‚ฌ์šฉํ•˜์ž.