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

EEALL@ONCE

๐Ÿ”ฆ ๊ทธ๋ž˜์„œ ์‹ฑ๊ธ€ํ„ด์ด ๋ญ”๋ฐ? Singleton

์‹ฑ๊ธ€ํ„ด์€ ํด๋ž˜์Šค์— ์ธ์Šคํ„ด์Šค๊ฐ€ ํ•˜๋‚˜๋งŒ ์žˆ๋„๋ก ํ•˜๋ฉด์„œ ์ด ์ธ์Šคํ„ด์Šค์— ๋Œ€ํ•œ ์ „์—ญ ์ ‘๊ทผโ€‹(์•ก์„ธ์Šค) ์ง€์ ์„ ์ œ๊ณตํ•˜๋Š” ์ƒ์„ฑ ๋””์ž์ธ ํŒจํ„ด์ž…๋‹ˆ๋‹ค. ์ด ์ด๋ฏธ์ง€๋Š” ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์—์„œ ์‹ฑ๊ธ€ํ„ด ๋””์ž์ธ ํŒจํ„ด์˜ ๊ฐœ๋…์„ ์„ค๋ช…ํ•˜๊ธฐ ์œ„ํ•ด ๋งŒ๋“ค์–ด์กŒ์Šต๋‹ˆ๋‹ค. ์ค‘์•™์— '์‹ฑ๊ธ€ํ„ด' ๊ฐ์ฒด๊ฐ€ ์žˆ์œผ๋ฉฐ, ์ด๋Š” ๊ทธ ๊ณ ์œ ํ•จ์„ ์ƒ์ง•ํ•ฉ๋‹ˆ๋‹ค. ์ฃผ๋ณ€์—๋Š” ์‹ฑ๊ธ€ํ„ด์— ์ ‘๊ทผํ•˜๋ ค๋Š” ์—ฌ๋Ÿฌ ์ž‘์€ ๊ฐ์ฒด๋“ค์ด ์žˆ์œผ๋ฉฐ, ์ด๋“ค์€ ๋ชจ๋‘ ๊ฐ™์€ ์‹ฑ๊ธ€ํ„ด ์ธ์Šคํ„ด์Šค๋กœ ๋ฆฌ๋””๋ ‰์…˜๋ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์‹œ์Šคํ…œ ๋‚ด์—์„œ ์‹ฑ๊ธ€ํ„ด ์ธ์Šคํ„ด์Šค๊ฐ€ ํ•˜๋‚˜๋งŒ ์กด์žฌํ•œ๋‹ค๋Š” ์ ์ด ๊ฐ•์กฐ๋ฉ๋‹ˆ๋‹ค. ํ™”์‚ดํ‘œ๋Š” ๋‹ค๋ฅธ ๊ฐ์ฒด๋“ค๋กœ๋ถ€ํ„ฐ ์‹ฑ๊ธ€ํ„ด์œผ๋กœ์˜ ์ ‘๊ทผ ๋ฐฉํ–ฅ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ์ด ๊ทธ๋ฆผ์€ ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์—์„œ ์‹ฑ๊ธ€ํ„ด ๋””์ž์ธ ํŒจํ„ด์ด ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ์ž ์žฌ์  ๋ฌธ์ œ์ ๋“ค์„ ๋ฌ˜์‚ฌํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ค‘์•™์— ํฐ '์‹ฑ๊ธ€ํ„ด' ๊ฐ์ฒด๊ฐ€ ์žˆ์œผ๋ฉฐ, ์ฃผ๋ณ€์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฌธ์ œ๋“ค์ด ..

๐Ÿ”ฆ์˜ต์ €๋ฒ„ ํŒจํ„ด์ด ๋ญ์•ผ? - ๊ฐ์ฒด ๊ฐ„์— ์ผ๋Œ€๋‹ค ์ข…์†์„ฑ : ๊ทธ๊ฒŒ ๋ญ”๋ฐ?

์˜ต์ €๋ฒ„ ํŒจํ„ด์€ ๊ฐ์ฒด ๊ฐ„์— ์ผ๋Œ€๋‹ค ์ข…์†์„ฑ์„ ์ •์˜ํ•˜๋Š” ๋””์ž์ธ ํŒจํ„ด ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. ์ด ํŒจํ„ด์€ ํ•œ ๊ฐ์ฒด์˜ ์ƒํƒœ๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ, ๊ทธ ๊ฐ์ฒด์— ์ข…์†๋œ ๋‹ค์ˆ˜์˜ ๊ฐ์ฒด๋“ค์ด ์ž๋™์œผ๋กœ ์•Œ๋ฆผ์„ ๋ฐ›์•„ ์ƒํƒœ ๋ณ€ํ™”์— ๋Œ€์‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด ๋ชฉ์ ์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ์ฃผ์š” ์—ญํ• ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค: Subject(์ฃผ์ฒด): ์ƒํƒœ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋Š” ์ฃผ์ฒด ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ์˜ต์ €๋ฒ„๋“ค์„ ๋“ฑ๋กํ•˜๊ณ , ์ƒํƒœ ๋ณ€๊ฒฝ ์‹œ์— ์ด๋“ค์—๊ฒŒ ์•Œ๋ฆฌ๋Š” ์ฑ…์ž„์ด ์žˆ์Šต๋‹ˆ๋‹ค. Observer(์˜ต์ €๋ฒ„): ์ฃผ์ฒด์˜ ์ƒํƒœ ๋ณ€๊ฒฝ์„ ๊ฐ์‹œํ•˜๊ณ , ์ƒํƒœ๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ ์ˆ˜ํ–‰ํ•  ๋™์ž‘์„ ์ •์˜ํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค์ž…๋‹ˆ๋‹ค. ์ฃผ์ฒด์—์„œ ์•Œ๋ฆผ์„ ๋ฐ›์œผ๋ฉด ์—…๋ฐ์ดํŠธ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์ ์ ˆํ•œ ์กฐ์น˜๋ฅผ ์ทจํ•ฉ๋‹ˆ๋‹ค. public interface Observer { void update(String newState); } ๋‹ค์Œ์œผ๋กœ, ์ด..

๐Ÿ”ฆํŒฉํ† ๋ฆฌ ํŒจํ„ด(Factory Pattern)์ด ๋ญ”๋ฐ?

ํŒฉํ† ๋ฆฌ ํŒจํ„ด(Factory Pattern)์€ ๊ฐ์ฒด ์ƒ์„ฑ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋””์ž์ธ ํŒจํ„ด ์ค‘ ํ•˜๋‚˜๋กœ, ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ ๋ถ„๋ฆฌ์‹œํ‚ค๋Š” ๋ชฉ์ ์„ ๊ฐ–๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ฃผ๋กœ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ์‹ค์ œ ์ƒ์„ฑํ•  ํด๋ž˜์Šค์˜ ๊ฒฐ์ •์€ ํŒฉํ† ๋ฆฌ ํด๋ž˜์Šค๊ฐ€ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค. ๊ฐ„๋‹จํ•œ ์˜ˆ์‹œ๋กœ ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ฐ€๋ น, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์ƒํ™ฉ์„ ๊ฐ€์ •ํ•ด๋ด…์‹œ๋‹ค. ํŒฉํ† ๋ฆฌ ํŒจํ„ด์„ ์‚ฌ์šฉํ•˜๋ฉด ํด๋ผ์ด์–ธํŠธ๋Š” ์–ด๋–ค ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์—ฐ๊ฒฐํ• ์ง€์— ๋Œ€ํ•œ ๊ตฌ์ฒด์ ์ธ ํด๋ž˜์Šค๋ฅผ ์•Œ ํ•„์š” ์—†์ด, ๋‹จ์ง€ ํŒฉํ† ๋ฆฌ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ Java ์ฝ”๋“œ๋กœ ํ‘œํ˜„ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค: // ์ธํ„ฐํŽ˜์ด์Šค interface DatabaseConnection { void connect(); } // ๊ตฌ์ฒด์ ์ธ ํด๋ž˜์Šค๋“ค class MyS..

๐Ÿ”ฆ ์˜์กด์„ฑ ์ฃผ์ž…์ด ๋ญ”๋ฐ ๋„๋Œ€์ฒด ?

์˜์กด์„ฑ ์ฃผ์ž…(Dependency Injection)์€ ๊ฐ์ฒด ๊ฐ„์˜ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถ”๊ณ  ์œ ์—ฐ์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ค๊ธฐ ์œ„ํ•œ ๋””์ž์ธ ํŒจํ„ด ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. ์ฃผ๋กœ Spring ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š”๋ฐ, ์ด๋Š” ๊ฐ์ฒด ๊ฐ„์˜ ์˜์กด ๊ด€๊ณ„๋ฅผ ์™ธ๋ถ€์—์„œ ์ฃผ์ž…ํ•˜์—ฌ ๊ฐ์ฒด๊ฐ€ ์ง์ ‘ ์˜์กด ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š๋„๋ก ํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๊ฐ„๋‹จํ•œ ์˜ˆ์‹œ๋กœ Service์™€ Mapper ํด๋ž˜์Šค๋ฅผ ํ†ตํ•œ ์˜์กด์„ฑ ์ฃผ์ž…์„ ์„ค๋ช…ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, Spring ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ƒํ™ฉ์„ ๊ฐ€์ •ํ•ด๋ณผ๊ฒŒ์š”. 1. **์ผ๋ฐ˜์ ์ธ ๊ฒฝ์šฐ (์˜์กด์„ฑ ์ฃผ์ž…์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ):** // UserService ํด๋ž˜์Šค public class UserService { private UserMapper userMapper = new UserMapper(); public void ..

๐Ÿ”ฆ ๋””์ž์ธ ํŒจํ„ด :ํ•ด๊ฒฐ์ฑ… ํ…œํ”Œ๋ฆฟ

๋””์ž์ธ ํŒจํ„ด์€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ํŠน์ • ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ํ•ด๊ฒฐ์ฑ…์„ ๋‚˜ํƒ€๋‚ด๋Š” ํ…œํ”Œ๋ฆฟ์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ํŒจํ„ด์€ ๊ณตํ†ต์ ์ธ ์„ค๊ณ„ ๋ฌธ์ œ์— ๋Œ€ํ•œ ํšจ๊ณผ์ ์ธ ํ•ด๊ฒฐ์ฑ…์„ ์ œ๊ณตํ•˜๋ฉฐ, ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์—์„œ ์„ค๊ณ„์˜ ์ผ๊ด€์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ์ฆ๊ฐ€์‹œํ‚ค๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๋””์ž์ธ ํŒจํ„ด์ด ์žˆ์ง€๋งŒ, ์—ฌ๊ธฐ์„œ๋Š” ๋ช‡ ๊ฐ€์ง€ ๋Œ€ํ‘œ์ ์ธ ๋””์ž์ธ ํŒจํ„ด์„ ๊ฐ„๋‹จํžˆ ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค: 1. **์‹ฑ๊ธ€ํ†ค ํŒจํ„ด (Singleton Pattern):** - **๋ชฉ์ :** ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๊ฐ€ ์˜ค์ง ํ•˜๋‚˜๋งŒ ์ƒ์„ฑ๋˜๋„๋ก ํ•˜๊ณ , ์ด์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ์ „์—ญ์ ์ธ ์ง€์ ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. - **์˜ˆ์‹œ:** ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ, ๋กœ๊น… ๋“ฑ์—์„œ ์ธ์Šคํ„ด์Šค๋ฅผ ๊ณต์œ ํ•  ๋•Œ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 2. **ํŒฉํ† ๋ฆฌ ๋ฉ”์„œ๋“œ ํŒจํ„ด (Factory Method Pattern):** - **๋ชฉ์ :..

๐Ÿ”ฆ CS ์ง€์‹ ์Œ“๊ธฐ : ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ vs ํ”„๋ ˆ์ž„์›Œํฌ : **์ฃผ๋„์„ฑ**

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ํ”„๋ ˆ์ž„์›Œํฌ์˜ ์ฃผ์š” ์ฐจ์ด์ ์€ ์ œ์–ด์˜ ํ๋ฆ„์— ๋Œ€ํ•œ ์ฃผ๋„์„ฑ์ด ์–ด๋””์— ์žˆ๋Š”๊ฐ€์ž…๋‹ˆ๋‹ค. ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(Library): ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ๋…๋ฆฝ์ ์ธ ๋„๊ตฌ๋‚˜ ํ•จ์ˆ˜์˜ ์ง‘ํ•ฉ์ด๋ฉฐ, ๋‹น์‹ ์ด ํ•„์š”ํ•  ๋•Œ๋งˆ๋‹ค ๊ฐ€์ ธ๋‹ค ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฃผ๋„์„ฑ์€ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์žˆ์œผ๋ฉฐ, ๋‹น์‹ ์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ˜ธ์ถœํ•ด์„œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ํŠน์ • ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ›์•„์„œ ์‚ฌ์šฉํ•˜๋Š” ์‹์ž…๋‹ˆ๋‹ค. ํ”„๋ ˆ์ž„์›Œํฌ(Framework): ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ์–ด๋–ค ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ๋ฏธ๋ฆฌ ์ •์˜๋œ ๊ตฌ์กฐ์™€ ๊ทœ์น™์˜ ์ง‘ํ•ฉ์ž…๋‹ˆ๋‹ค. ์ฃผ๋„์„ฑ์€ ํ”„๋ ˆ์ž„์›Œํฌ์—๊ฒŒ ์žˆ์œผ๋ฉฐ, ๊ฐœ๋ฐœ์ž๋Š” ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๊ทœ์น™์„ ๋”ฐ๋ผ๊ฐ€์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•  ๋•Œ ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์ •์˜ํ•œ ๊ตฌ์กฐ์— ๋”ฐ๋ผ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ณ , ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์‚ฌ..

โ˜•์ธํ„ฐํŽ˜์ด์Šค์— `static` ๋ฉ”์„œ๋“œ์™€ `default` ๋ฉ”์„œ๋“œ : java 8 ์ดํ›„

Java 8์—์„œ ๋„์ž…๋œ ์ธํ„ฐํŽ˜์ด์Šค์˜ ๊ธฐ๋Šฅ ๊ฐ•ํ™”๋กœ, `static` ๋ฉ”์„œ๋“œ์™€ `default` ๋ฉ”์„œ๋“œ๋Š” ๊ธฐ์กด์˜ ์ธํ„ฐํŽ˜์ด์Šค์— ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. 1. `static` ๋ฉ”์„œ๋“œ: `static` ๋ฉ”์„œ๋“œ๋Š” ์ธํ„ฐํŽ˜์ด์Šค ์ž์ฒด์˜ ๋ฉ”์„œ๋“œ๋กœ์„œ, ์ธํ„ฐํŽ˜์ด์Šค์˜ ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ ์—†์ด๋„ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฃผ๋กœ ํ—ฌํผ ๋ฉ”์„œ๋“œ๋‚˜ ๊ณตํ†ต ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ์‹œ ์ฝ”๋“œ์—์„œ `announcement` ๋ฉ”์„œ๋“œ๊ฐ€ `static`์œผ๋กœ ์„ ์–ธ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ```java public interface FoodSafety { static void announcement(){ System.out.println("์‹ํ’ˆ์•ˆ์ „ ๊ด€๋ จ ๊ณต์ง€"); } // ๋‚˜๋จธ์ง€ ์ฝ”๋“œ ์ƒ๋žต... } ``` ํ˜ธ์ถœ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค: ```j..