๋ฐ˜์‘ํ˜•

๐ŸŽฐ Design Pattern 12

Singleton pattern | ์‹ฑ๊ธ€ํ†คํŒจํ„ด

๋ชฉ์ฐจ ์–ด๋–ค ์ƒํ™ฉ์—์„œ ์“ฐ์ผ๊นŒ? ์‹œ์Šคํ…œ ๋Ÿฐํƒ€์ž„, ํ™˜๊ฒฝ์…‹ํŒ…์ •๋ณด ๋“ฑ์˜ ๊ฐ์ฒด๊ฐ€ ์—ฌ๋Ÿฌ๊ฐœ ์ƒ์„ฑ๋˜๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ?? ์—ฌ๊ธฐ์ €๊ธฐ์„œ ๊ฐ๊ธฐ ๋‹ค๋ฅธ ์…‹ํŒ…์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์„ ์ˆ˜ ์žˆ๊ฒŒ๋˜๊ณ , ๋™์ผํ•œ ์„ค์ •๊ฐ’์ด๋ผ๋ฉด ์ค‘๋ณต๋œ ๋งŒํผ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ฐจ์ง€ํ•˜๊ณ  ์žˆ๊ฒŒ๋œ๋‹ค. ์…‹ํŒ…์ •๋ณด์˜ ์ธ์Šคํ„ด์Šค๋Š” ์˜ค์ง ํ•˜๋‚˜๋งŒ ์กด์žฌํ•ด์•ผํ•œ๋‹ค. ์ด๋Ÿด๋•Œ ์‚ฌ์šฉ๋˜๋Š” ๊ฒƒ์ด ์‹ฑ๊ธ€ํ†ค ํŒจํ„ด์ด๋‹ค. ์‹ฑ๊ธ€ํ†ค ํŒจํ„ด์ด๋ž€? ์ธ์Šคํ„ด์Šค๋ฅผ ์˜ค์ง ํ•˜๋‚˜๋งŒ ์ œ๊ณตํ•˜๋Š” ํด๋ž˜์Šค๋ฅผ ๋งํ•œ๋‹ค ํ•˜๋‚˜์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์—ฌ๋Ÿฌ ๊ณณ์—์„œ ๊ณต์œ ํ•˜์—ฌ ์‚ฌ์šฉํ•œ๋‹ค. (๊ณต์œ ํ•˜๋Š” ๋งŒํผ ๋™์‹œ์„ฑ ๋ฌธ์ œ๋„ ๊ณ ๋ คํ•ด์•ผํ•œ๋‹ค!) ์žฅ์  - new๊ฐ€ ์•„๋‹Œ staticํ•œ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๊ณ ์ •๋œ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์„ ๊ฐ€์ง€๊ฒŒ๋œ๋‹ค. ๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„๋ฅผ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค - ์‹ฑ๊ธ€ํ†ค ์ธ์Šคํ„ด์Šค๋Š” ์ „์—ญ์œผ๋กœ ๋งŒ๋“ค์–ด์ง€๊ธฐ ๋•Œ๋ฌธ์—, ์—ฌ๋Ÿฌ ๊ณณ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋‹ค. - ์ธ์Šคํ„ด์Šค์˜ 2๋ฒˆ์งธ ์ ‘๊ทผ๋ถ€ํ„ฐ..

[๊ฐ์ฒด ์ƒ์„ฑ ํŒจํ„ด] ์ ์ธต์  ์ƒ์„ฑ์ž ํŒจํ„ด → ์ž๋ฐ”๋นˆ ํŒจํ„ด → Builder ํŒจํ„ด, lombok @Builder ์‚ฌ์šฉ๋ฐฉ๋ฒ• ๋ฐ ์ฃผ์˜์ 

๋ชฉ์ฐจ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์—๋Š” 3๊ฐ€์ง€ ํŒจํ„ด์ด ์žˆ๋‹ค. ์ ์ธต์  ์ƒ์„ฑ์ž ํŒจํ„ด : ํŒŒ๋ผ๋ฏธํ„ฐ ๋ณ„๋กœ ์ƒ์„ฑ์ž๋ฅผ ๋งŒ๋“ ๋‹ค public class Member { private Long id; private String name; private int age; private Team team; public Member(Long id) { this.id = id; } public Member(Long id, String name) { this.id = id; this.name = name; } public Member(Long id, String name, int age) { this.id = id; this.name = name; this.age = age; } public Member(Long id, String nam..

๋ฐ˜์‘ํ˜•