์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- di
- menutab
- Factory Method Pattern
- datepicker
- URN
- ๊ฐ์ฒด์งํฅํ๋ก๊ทธ๋๋ฐ
- 2024-08-21
- ํ๋ IT&E
- tcp
- ์ด๋ ธํ ์ด์
- url
- fontstyle
- udp
- IOC
- 2024-08-20
- FACTORY
- Android Studio
- OOP
- ์ฝ๋์
- OpenAPI
- Dialog
- AndroidStudio
- swagger
- ๊ธฐ์ด100์
- uri
- reflection
- ์ฑ์ฉํ์ ํ
- http method
- Python
- Kotlin
dingdong coding
Spring Singleton ๋ณธ๋ฌธ
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) ํจํด์ด๋?
[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 |