Notice
Recent Posts
Link
Today
Total
10-06 00:17
๊ด€๋ฆฌ ๋ฉ”๋‰ด

dingdong coding

Spring Singleton ๋ณธ๋ฌธ

๐ŸSpring/Basic

Spring Singleton

๐Ÿถ ๊ฐœ๋ฐœ๊ฐœ๋ฐœ ๐Ÿพ 2022. 6. 22. 13:01

Spring์—์„œ ์‚ฌ์šฉ๋˜๋Š” Singleton ํŒจํ„ด์˜ ํŠน์ง•์„ ์•Œ์•„๋ณด๊ธฐ ์ „ Spring Container์˜ Application Context์— ๋Œ€ํ•ด ๋ณด๊ณ  ์˜ค๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

Singleton Pattern ๋ฌธ์ œ์  

๋จผ์ € ์‹ฑ๊ธ€ํ†ค ํŒจํ„ด์„ ๊ตฌํ˜„ํ•œ ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉฐ Spring Container ์—†์ด ์‹ฑ๊ธ€ํ†ค ํŒจํ„ด์„ ์ ์šฉ์‹œ์ผฐ์„ ๋•Œ ๋ฌธ์ œ์ ์— ๋Œ€ํ•ด ์‚ดํŽด๋ด…์‹œ๋‹ค.

public class Singleton {
    private static final Singleton instance = new Singleton();

    public static Singleton getInstance(){
        return instance;
    }
    private Singleton(){

    }
    public void logic(){
        System.out.println("์‹ฑ๊ธ€ํ†ค ๊ฐ์ฒด ํ˜ธ์ถœ");
    }
}

 

1 )  ์‹ฑ๊ธ€ํ†ค ํŒจํ„ด์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•œ ์ฝ”๋“œ ์ž์ฒด๊ฐ€ ๋งŽ์ด ํ•„์š”ํ•˜๋‹ค.

:  ํ•ด๋‹น ๊ตฌํ˜„์ฝ”๋“œ ์™ธ์—๋„ ์ •์  ํŒฉํ† ๋ฆฌ ๋ฉ”์„œ๋“œ์—์„œ ๊ฐ์ฒด ์ƒ์„ฑ์„ ํ™•์ธํ•˜๊ณ  ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ฒฝ์šฐ์— ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋”ฉ ํ™˜๊ฒฝ์—์„œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋™์‹œ์„ฑ ๋ฌธ์ œ ํ•ด๊ฒฐ์„ ์œ„ํ•ด syncronized ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. 

 

2 )  ์˜์กด๊ด€๊ณ„ ์ƒ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๊ตฌ์ฒด ํด๋ž˜์Šค์— ์˜์กดํ•œ๋‹ค.

:  new ํ‚ค์›Œ๋“œ๋ฅผ ์ง์ ‘ ์‚ฌ์šฉํ•˜์—ฌ ํด๋ž˜์Šค ์•ˆ์—์„œ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ DIP๋ฅผ ์œ„๋ฐ˜ํ•˜๊ณ  OCP ์›์น™์„ ์œ„๋ฐ˜ํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Šต๋‹ˆ๋‹ค. 

 

3 )  ํ…Œ์ŠคํŠธ๊ฐ€ ์–ด๋ ต๋‹ค.

:  ์‹ฑ๊ธ€ํ†ค ์ธ์Šคํ„ด์Šค๋Š” ์ž์›์„ ๊ณต์œ ํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฒฉ๋ฆฌ๋œ ๊ณต๊ฐ„์—์„œ ํ…Œ์ŠคํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ํ•˜๋ ค๋ฉด ๋งค๋ฒˆ ์ธ์Šคํ„ด์Šค์˜ ์ƒํƒœ๋ฅผ ์ดˆ๊ธฐํ™”ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ „์—ญ์—์„œ ์ƒํƒœ๋ฅผ ๊ณต์œ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ…Œ์ŠคํŠธ๊ฐ€ ์˜จ์ „ํžˆ ์ˆ˜ํ–‰๋˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.

 

4 ) private ์ƒ์„ฑ์ž๋ฅผ ๊ฐ–๊ณ  ์žˆ์–ด ์ƒ์†์ด ๋ถˆ๊ฐ€ํ•˜๋‹ค.

 

์ด์ฒ˜๋Ÿผ ์‹ฑ๊ธ€ํ†ค ํŒจํ„ด์„ ๋‹จ๋…์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด ๊ฐ์ฒด์ง€ํ–ฅ์— ์œ„๋ฐฐ๋˜๋Š” ์‚ฌ๋ก€๊ฐ€ ๋งŽ์ด ๋ฐœ์ƒํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๋•Œ๋ฌธ์— ์ด๋Ÿฌํ•œ ๋‹จ์ ์„ ๋ณด์•ˆํ•  ์ˆ˜ ์žˆ๋Š” Spring Container๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. 

Singleton Container

 ์Šคํ”„๋ง์€ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์— ์Šคํ”„๋ง ๋นˆ์„ ๋“ฑ๋กํ•  ๋•Œ, ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ฐ์ฒด ์ธ์Šคํ„ด์Šค(๋นˆ)๋ฅผ ์‹ฑ๊ธ€ํ†ค์œผ๋กœ ๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค. 

 ์ฆ‰, ์Šคํ”„๋ง์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ณ„๋‹ค๋ฅธ ์„ค์ •์„ ํ•˜์ง€ ์•Š์œผ๋ฉด ๋‚ด๋ถ€์—์„œ ์ƒ์„ฑํ•˜๋Š” ๋นˆ ๊ฐ์ฒด๋ฅผ ๋ชจ๋‘ ์‹ฑ๊ธ€ํ†ค์œผ๋กœ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

** Singleton registry ** ๋ผ๋Š” ๊ฒƒ์„ ์ด์šฉํ•˜์—ฌ ์‹ฑ๊ธ€ํ†ค์„ ๊ตฌํ˜„

 ๋•Œ๋ฌธ์— Spring์—์„œ๋Š” ์‹ฑ๊ธ€ํ„ด ํŒจํ„ด์„ ๋”ฐ๋กœ ์ ์šฉํ•˜์ง€ ์•Š์•„๋„ ๋ฉ๋‹ˆ๋‹ค. 

 

๋˜ํ•œ ๊ธฐ์กด ์‹ฑ๊ธ€ํ†ค ํŽ˜ํ„ด์˜ ๋ฌธ์ œ์ (DIP, OCP, ํ…Œ์ŠคํŠธ, private ์ƒ์„ฑ์ž ๋“ฑ.. )์„ ํ•ด๊ฒฐํ•˜๋ฉฐ ์—ฌ๋Ÿฌ ๋ฒˆ ๊ฐ์ฒด๋ฅผ ์š”์ฒญํ•˜๋”๋ผ๋„ ๊ฐ์ฒด ์ธ์Šคํ„ด์Šค๋ฅผ ์‹ฑ๊ธ€ํ†ค์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋งค๋ฒˆ ๋™์ผํ•œ ๊ฐ์ฒด๋ฅผ ๋Œ๋ ค์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

• Singleton registry 

: ์Šคํ”„๋ง์ด ์ง์ ‘ ์‹ฑ๊ธ€ํ„ด ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ. 

: ํ‰๋ฒ”ํ•œ public ์ƒ์„ฑ์ž๋ฅผ ๊ฐ€์ง„ ์ž๋ฐ” ํด๋ž˜์Šค๋ฅผ ์‹ฑ๊ธ€ํ„ด์œผ๋กœ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“ค์–ด์ค€๋‹ค.

: ํด๋ž˜์Šค์˜ ์ œ์–ด๊ถŒ์„ IoC ๋ฐฉ์‹์˜ ์ปจํ…Œ์ด๋„ˆ์— ๋„˜๊ธฐ๋ฉด ํ•ด๋‹น ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๊ฐ์ฒด ์ƒ์„ฑ์— ๋Œ€ํ•œ ๋ชจ๋“  ๊ถŒํ•œ์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ

: IoC ์ปจํ…Œ์ด๋„ˆ์˜ ์ œ์–ด ์—ญํ• ์„ ํ†ตํ•ด์„œ ๋นˆ์„ ์‹ฑ๊ธ€ํ†ค์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๊ฒƒ 

์ฃผ์˜์ 

๊ธฐ๋ณธ์ ์œผ๋กœ ์—ฌ๋Ÿฌ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํ•˜๋‚˜์˜ ๊ฐ™์€ ์ธ์Šคํ„ด์Šค ๊ฐ์ฒด๋ฅผ ๊ณต์œ ํ•˜๋Š” ์‹ฑ๊ธ€ํ†ค์ด ๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ ์„œ๋น„์Šค ํ˜•ํƒœ์˜ ๊ฐ์ฒด๋กœ ์‚ฌ์šฉ๋˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋‚ด๋ถ€์— ์ƒํƒœ์ •๋ณด๋ฅผ ๊ฐ–๊ณ  ์žˆ์ง€ ์•Š๋Š” ๋ฌด์ƒํƒœ(stateless)  ๋ฐฉ์‹์œผ๋กœ ๋งŒ๋“ค์–ด์ ธ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

** ๊ณต์œ ๋˜์ง€ ์•Š๋Š” ์ง€์—ญ๋ณ€์ˆ˜, ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ** 

 

๋งŒ์•ฝ ์ƒํƒœ๊ฐ€ ์œ ์ง€(stateful) ๋˜๋„๋ก ์„ค๊ณ„ํ•˜๋ฉด ์—ฌ๋Ÿฌ ์“ฐ๋ ˆ๋“œ๋“ค์ด ๋™์‹œ์— ์ƒํƒœ๋ฅผ ์ ‘๊ทผํ•˜์—ฌ ์ˆ˜์ •ํ•œ๋‹ค๋ฉด ์ค‘๊ฐ„์— ์ƒํƒœ ๊ฐ’์ด ๋ฐ”๋€” ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋น„์Šค์  ์ธก๋ฉด์—์„œ ์ƒ๋‹นํžˆ ์œ„ํ—˜ํ•ฉ๋‹ˆ๋‹ค. 

 

ํ•™์Šต์— ๋งŽ์€ ๋„์›€์ด ๋œ ๋งํฌ๋ฅผ  ์ฐธ์กฐํ–ˆ์Šต๋‹ˆ๋‹ค. ๐Ÿ™‚

 

์ฐธ์กฐ ๋ฐ ์ถœ์ฒ˜

์‹ฑ๊ธ€ํ†ค(Singleton) ํŒจํ„ด์ด๋ž€?

๊นŠ์ด ์žˆ๋Š” Singleton

[Spring] ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ปจํ…์ŠคํŠธ(Application Context)์™€ ์Šคํ”„๋ง์˜ ์‹ฑ๊ธ€ํ†ค(Singleton)

'๐ŸSpring > Basic' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

Bean Scope - ProtoType Scope  (0) 2022.06.23
Bean Life Cycle  (0) 2022.06.23
JDBC vs JDBC Template vs JPA  (0) 2022.06.18
Spring Framework, Spring Boot  (0) 2022.06.18
Spring Bean, Spring Container  (0) 2022.06.17
Comments