0418 ~ 0424
# 0418 ~ 0424
# 0418 - ํผ์ฌ๋ ํจํด(Facade Pattern)
# ํผ์ฌ๋ ํจํด์ด๋
์๋ธ์์คํ ์ ์ธํฐํ์ด์ค ์งํฉ์ ๋ํ ํ๋์ ์์ ์์ค ์ธํฐํ์ด์ค๋ฅผ ์ ์ํ๋ ํจํด
ํผ์ฌ๋ ํจํด(Facade Pattern)์ ๊ตฌ์กฐํจํด(Structural Pattern)์ ํ ์ข ๋ฅ๋ก, ์๋ธ์์คํ ๋ค์ ๊ณตํต์ ์ธ ๊ธฐ๋ฅ์ ์ ์ํ๋ ๋จ์ํ๋ ์์ ์์ค์ ์ธํฐํ์ด์ค๋ฅผ ์ ์ํ๋ ํจํด์ด๋ค. ์๋ธ์์คํ ๋ค ์ฌ์ด์ ์ข ์์ฑ์ ์ค์ผ ์ ์๋ค.
# ๊ตฌ์กฐ ํจํด(Structural Pattern)
๊ตฌ์กฐํจํด์ด๋ ์์ ํด๋์ค๋ค์ ์์๊ณผ ํฉ์ฑ์ ํตํด ๋ ํฐ ํด๋์ค๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํ๋ ํจํด์ผ๋ก, ๋ ๋ฆฝ์ ์ผ๋ก ๊ฐ๋ฐํ ํด๋์ค๋ค์ ๋ง์น ํ๋์ธ ๊ฒ ์ฒ๋ผ ์ฌ์ฉํ ์ ์๋ค.
- ์ ์์ ํจํด(Adapter)
- ๊ฐ๊ต ํจํด(Bridge)
- ๋ณตํฉ์ฒด ํจํด(Composite)
- ์ฅ์์ ํจํด(Decorator)
- ํผ์ฌ๋ ํจํด(Facade)
- ํ๋ผ์ด๊ธ ํจํด(Flyweight)
- ํ๋ก์ ํจํด(Proxy)
# ๊ตฌ์ฑ
- Facade : ์ฌ์ฉ์์ ์์ฒญ์ ์๋ธ์์คํ ๊ฐ์ฒด์ ์ ๋ฌํ๋ ๋จ์ํ๊ณ ์ผ๊ด๋ ํตํฉ ์ธํฐํ์ด์ค
- Subsystem Classes : Facade์ ๋ํด ์ ๋ณด๋ฅผ ๊ฐ์ง์ง ์๊ณ , ์๋ธ์์คํ ์ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ ํด๋์ค
# ํผ์ฌ๋ ํจํด ์์
์ฐ๋ฆฌ๊ฐ ์์นจ์ ์ผ์ด๋์ ์ฌ๋ฌด์ค์ ์ถ๊ทผํ๊ธฐ๊น์ง๋ฅผ ์ฌ๋ฌ ๊ณผ์ ์ผ๋ก ๋๋ ๋ณผ ์ ์๋ค. ์๋ฅผ ๋ค์ด ์ป๊ณ , ์์นจ์ ๋จน๊ณ , ๋์ค๊ตํต์ ํ์ ์ถ๊ทผ์ ํ๋๋ฐ, ํผ์ฌ๋ ํจํด์ ์ด์ฉํ์ฌ ๊ฐ๊ฐ์ ๋์๋ค์ ์๋ธํด๋์ค๋ก ๊ตฌํํ๊ณ , ์๋ธํด๋์ค๋ค์ ๊ณตํต ๊ธฐ๋ฅ์ ์ ์ํ๋ ์์ ์์ค์ ์ธํฐํ์ด์ค๋ฅผ ์ ์ํ ์ ์๋ค.
# Facade
public class GoOffice {
public void goToWork() {
Wash wash = new Wash();
Breakfast breakfast = new Breakfast();
Move move = new Move();
wash.brushTeeth();
wash.shower();
breakfast.eat();
breakfast.water();
move.bus();
}
}
# Subsystem Classes
public class Wash {
public void brushTeeth() {
System.out.println("Brush my teeth");
}
public void shower() {
System.out.println("Take a shower");
}
}
public class Breakfast {
public void eat() {
System.out.println("Have breakfast");
}
public void water() {
System.out.println("Drink water");
}
}
public class Move {
public void bus() {
System.out.println("Take the bus");
}
}
# ํน์ง
- ๋ฎ์ ๊ฒฐํฉ๋ : ํด๋ผ์ด์ธํธ๊ฐ ์๋ธ์์คํ ์ ์ฝ๋๋ฅผ ๋ชจ๋ฅด๋๋ผ๊ณ Facade ํด๋์ค๋ฅผ ํตํด ์ฌ์ฉ ๊ฐ๋ฅ
- ์๋ธ ํด๋์ค ์ง์ ์ ๊ทผ ๊ฐ๋ฅ : Facade ํด๋์ค๋ฅผ ํตํด ์๋ธํด๋์ค๋ฅผ ์ฌ์ฉํ ์ง, ์๋ธํด๋์ค๋ฅผ ์ง์ ์ฌ์ฉํ ์ง ์ ํ ๊ฐ๋ฅ
# 0422 - ์ ํ๋ฆฌ์ผ์ด์ ์ปจํ ์คํธ(Application Context)
# ApplicationContext๋?
Spring์์๋ ๋น์ ์์ฑ๊ณผ ๊ด๊ณ์ค์ ๊ฐ์ ์ ์ด๋ฅผ ๋ด๋นํ๋ IoC(Inversion of Control) ์ปจํ
์ด๋์ธ ๋น ํฉํ ๋ฆฌ(Bean Factory)๊ฐ ์กด์ฌํ๋ค. ํ์ง๋ง ์ค์ ๋ก๋ ๋น์ ์์ฑ๊ณผ ๊ด๊ณ์ค์ ์ธ์ ์ถ๊ฐ์ ์ธ ๊ธฐ๋ฅ์ด ํ์ํ๋ค. ์ด๋ฌํ ์ด์ ๋ก ๋น ํฉํ ๋ฆฌ๋ฅผ ์์๋ฐ์ ํ์ฅํ ์ ํ๋ฆฌ์ผ์ด์
์ปจํ
์คํธ๋ฅผ ์ฃผ๋ก ์ฌ์ฉํ๋ค.
์ ํ๋ฆฌ์ผ์ด์
์ปจํ
์คํธ๋ ๋ณ๋์ ์ค์ ์ ๋ณด๋ฅผ ์ฐธ๊ณ ํ๊ณ IoC๋ฅผ ์ ์ฉํ์ฌ ๋น์ ์์ฑ, ๊ด๊ณ์ค์ ๋ฑ์ ์ ์ด ์์
์ ์ด๊ดํ๋ค. ์ ํ๋ฆฌ์ผ์ด์
์ปจํ
์คํธ์๋ ์ง์ ์ค๋ธ์ ํธ๋ฅผ ์์ฑํ๊ณ ๊ด๊ณ๋ฅผ ๋งบ์ด์ฃผ๋ ์ฝ๋๊ฐ ์๊ณ , ๊ทธ๋ฐ ์์ฑ ์ ๋ณด์ ์ฐ๊ด๊ด๊ณ ์ ๋ณด์ ๋ํ ์ค์ ์ ์ฝ์ด ์ฒ๋ฆฌํ๋ค. ์๋ฅผ ๋ค์ด @Configuration๊ณผ ๊ฐ์ ์ด๋
ธํ
์ด์
์ด ๋ํ์ ์ธ IoC์ ์ค์ ์ ๋ณด์ด๋ค.
ApplicationContext๋ฅผ ์คํ๋ง ์ปจํ ์ด๋๋ผ๊ณ ํ๋ค. ApplicationContext๋ BeanFactory ์ธํฐํ์ด์ค์ ํ์ ์ธํฐํ์ด์ค์ด๋ค. ์ฆ, ApplicationContext๋ BeanFactory์ ๋ถ๊ฐ๊ธฐ๋ฅ์ ์ถ๊ฐํ ๊ฒ์ด๋ค. BeanFactory๋ ์คํ๋ง ์ปจํ ์ด๋์ ์ต์์ ์ธํฐํ์ด์ค์ด๋ค. ์คํ๋ง ๋น์ ๊ด๋ฆฌํ๊ณ ์กฐํํ๋ ์ญํ ์ ํ๋ค. ApplicationContext๋ BeanFactory + ๋ถ๊ฐ ๊ธฐ๋ฅ(๊ตญ์ ํ ๊ธฐ๋ฅ, ํ๊ฒฝ ๋ณ์ ๊ด๋ จ ์ฒ๋ฆฌ, ์ ํ๋ฆฌ์ผ์ด์ ์ด๋ฒคํธ, ๋ฆฌ์์ค ์กฐํ)์ ๊ฐ์ง๋ค. ์ ํํ๋ ์คํ๋ง ์ปจํ ์ด๋๋ฅผ ๋ถ๋ฅผ ๋, BeanFactory, ApplicationContext๋ฅผ ๊ตฌ๋ถํด์ ๋งํ์ง๋ง, BeanFactory๋ฅผ ์ง์ ์ ์ผ๋ก ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๋ ๊ฑฐ์ ์๋ค. ์๋ํ๋ฉด ApplicationContext๊ฐ BeanFactory์ ๋ชจ๋ ๊ธฐ๋ฅ์ ๊ฐ์ง๊ณ ์๊ธฐ ๋๋ฌธ์ด๋ค. ApplicationContext์ ๊ตฌํ์ฒด๊ฐ ์ฌ๋ฌ๊ฐ์ง ์๋๋ฐ, ๊ตฌํ์ฒด์ ๋ฐ๋ผ ์คํ๋ง ์ปจํ ์ด๋๋ฅผ XML์ ๊ธฐ๋ฐ์ผ๋ก ๋ง๋ค ์๋ ์๊ณ , ์๋ฐ ํด๋์ค๋ก ๋ง๋ค ์๋ ์๋ค. ์ด๊ฒ ๊ฐ๋ฅํ ์ด์ ๋ ๋น ๋ฑ๋ก์ BeanDefinition์ผ๋ก ์ถ์ํํด์ ์์ฑ ํ๊ธฐ ๋๋ฌธ์ด๋ค. XML๋ก ํ๋ , ์๋ฐ๋ก ํ๋ BeanDefinition์ด ์์ฑ๋๋ค. ์คํ๋ง ์ปจํ ์ด๋ ๋ด๋ถ์๋ ๋น ์ ์ฅ์๊ฐ ์กด์ฌํ๋ค. ๋น ์ ์ฅ์๋ key๋ก ๋น ์ด๋ฆ์ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ, value๋ก ์ค์ ๋น ๊ฐ์ฒด๋ฅผ ๊ฐ์ง๊ณ ์๋ค. ์คํ๋ง ์ปจํ ์ด๋๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋น์ ์ฑ๊ธํค์ผ๋ก ๊ด๋ฆฌํด์ค๋ค. ๋ฐ๋ผ์ ์ฑ๊ธํค ์ปจํ ์ด๋๋ผ๊ณ ๋ถ๋ฆฌ๊ธฐ๋ ํ๋ค. ์คํ๋ง ์ปจํ ์ด๋๊ฐ ๋น์ ์ฑ๊ธํค์ผ๋ก ๊ด๋ฆฌํด์ฃผ๋ฉด์ ๊ธฐ์กด ์ฑ๊ธํด ํจํด์ ๋ฌธ์ ์ (์ฑ๊ธํค ํจํด ๊ตฌํ์ ์ํ ์ฝ๋๊ฐ ์ถ๊ฐ๋์ด์ผํจ, ๊ตฌ์ฒด ํด๋์ค์ ์์กด, ์ ์ฐ์ฑ์ด ๋จ์ด์ง etc)์ ์์ด์ง๊ณ , ์ฑ๊ธํค์ ์ฅ์ (๋งค๋ฒ ์ธ์คํด์ค๋ฅผ ์์ฑํ ํ์์์ด ๋จ ํ๋๋ง ์์ฑํด์ ๋น์ฉ์ ์ค์ผ ์ ์๋ค.)๋ง ๊ฐ์ ธ๊ฐ ์ ์๋ค.
# ๋น(Bean) ์์ฒญ ์ ์ฒ๋ฆฌ ๊ณผ์
ํด๋ผ์ด์ธํธ์์ ํด๋น ๋น์ ์์ฒญํ๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์ปจํ ์คํธ๋ ๋ค์๊ณผ ๊ฐ์ ๊ณผ์ ์ ๊ฑฐ์ณ ๋น์ ๋ฐํํ๋ค.
- ApplicationContext๋ @Configuration์ด ๋ถ์ ํด๋์ค๋ค์ ์ค์ ์ ๋ณด๋ก ๋ฑ๋กํด๋๊ณ , @Bean์ด ๋ถ์ ๋ฉ์๋์ ์ด๋ฆ์ผ๋ก ๋น ๋ชฉ๋ก์ ์์ฑํ๋ค.
- ํด๋ผ์ด์ธํธ๊ฐ ํด๋น ๋น์ ์์ฒญํ๋ค.
- ApplicationContext๋ ์์ ์ ๋น ๋ชฉ๋ก์์ ์์ฒญํ ์ด๋ฆ์ด ์๋์ง ์ฐพ๋๋ค.
- ApplicationContext๋ ์ค์ ํด๋์ค๋ก๋ถํฐ ๋น ์์ฑ์ ์์ฒญํ๊ณ , ์์ฑ๋ ๋น์ ๋๋ ค์ค๋ค.
์ ํ๋ฆฌ์ผ์ด์ ์ปจํ์คํธ๋ @Configuration์ด ๋ถ์ ํด๋์ค๋ค์ ์ค์ ์ ๋ณด๋ก ๋ฑ๋กํด๋๊ณ , @Bean์ด ๋ถ์ ๋ฉ์๋์ ์ด๋ฆ์ผ๋ก ๋น ๋ชฉ๋ก์ ์์ฑํ๋ค. ๊ทธ๋ฆฌ๊ณ ํด๋ผ์ด์ธํธ๊ฐ ํด๋น ๋น์ ์์ฒญํ๋ค๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์ปจํ ์คํธ๋ ์์ ์ ๋น ๋ชฉ๋ก์์ ์์ฒญํ ์ด๋ฆ์ด ์๋์ง ์ฐพ๊ณ , ์๋ค๋ฉด ํด๋น ๋น ์์ฑ ๋ฉ์๋(@Bean)์ ํธ์ถํ์ฌ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ๋๋ ค์ค๋ค. (๊ตฌ์ฒด์ ์ผ๋ก๋ Spring ๋ด๋ถ์์ Reflection API๋ฅผ ์ด์ฉํด ๋น ์ ์์ ๋์ค๋ ํด๋์ค ์ด๋ฆ์ ์ด์ฉํ๊ฑฐ๋ ๋๋ ๋น ํฉํ ๋ฆฌ๋ฅผ ํตํด ๋น์ ์์ฑํ๋ค.)
# ์ ํ๋ฆฌ์ผ์ด์ ์ปจํ ์คํธ์ ์ฅ์
# - ํด๋ผ์ด์ธํธ๋ @Configuration์ด ๋ถ์ ๊ตฌ์ฒด์ ์ธ ํฉํ ๋ฆฌ ํด๋์ค๋ฅผ ์ ํ์๊ฐ ์๋ค.
์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ฐ์ ํ๋ฉด ํฉํ ๋ฆฌ ํด๋์ค๊ฐ ๊ณ์ํด์ ์ฆ๊ฐํ ๊ฒ์ด๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์ปจํ ์คํธ๊ฐ ์๋ค๋ฉด ํด๋ผ์ด์ธํธ๋ ์ํ๋ ๊ฐ์ฒด๋ฅผ ๊ฐ์ ธ์ค๋ ค๋ฉด ์ด๋ค ํฉํ ๋ฆฌ ํด๋์ค์ ์ ๊ทผํด์ผ ํ๋์ง ์์์ผ ํ๋ ๋ฒ๊ฑฐ๋ก์์ด ์๊ธด๋ค. ๋ฐ๋ฉด์ ์ ํ๋ฆฌ์ผ์ด์ ์ปจํ ์คํธ๋ฅผ ์ฌ์ฉํ๋ฉด ํฉํ ๋ฆฌ๊ฐ ์๋ฌด๋ฆฌ ๋ง์์ ธ๋ ์ด์ ์ง์ ์ ๊ทผํ ํ์๊ฐ ์์ด์ง๋ค. ์ฆ, ์ผ๊ด๋ ๋ฐฉ์์ผ๋ก ์ํ๋ ๋น์ ๊ฐ์ ธ์ฌ ์ ์๋ค.
# - ์ ํ๋ฆฌ์ผ์ด์ ์ปจํ ์คํธ๋ ์ข ํฉ IoC ์๋น์ค๋ฅผ ์ ๊ณตํด์ค๋ค.
์ ํ๋ฆฌ์ผ์ด์ ์ปจํ ์คํธ๋ ๊ฐ์ฒด์ ์์ฑ๊ณผ ๊ด๊ณ ์ค์ ์ด ๋ค๊ฐ ์๋๋ค. ๊ฐ์ฒด๊ฐ ๋ง๋ค์ด์ง๋ ๋ฐฉ์๊ณผ ์์ ๋ฐ ์ ๋ต ๋ฑ์ ๋ค๋ฅด๊ฒ ๊ฐ์ ธ๊ฐ ์ ์๊ณ , ๊ทธ ์ธ์์๋ ํ์ฒ๋ฆฌ๋ ์ ๋ณด์ ์กฐํฉ ์ธํฐ์ ํธ ๋ฑ๊ณผ ๊ฐ์ ๋ค์ํ ๊ธฐ๋ฅ์ด ์กด์ฌํ๋ค.
# - ์ ํ๋ฆฌ์ผ์ด์ ์ปจํ ์คํธ๋ฅผ ํตํด ๋ค์ํ ๋น ๊ฒ์ ๋ฐฉ๋ฒ์ ์ ๊ณตํ ์ ์๋ค.
์ ํ๋ฆฌ์ผ์ด์ ์ปจํ ์คํธ์์ ๋น ๋ชฉ๋ก์ ๊ด๋ฆฌํ์ฌ, ๋น์ ์ด๋ฆ์ด๋ ํ์ ๋๋ ์ด๋ ธํ ์ด์ ์ค์ ๋ฑ์ผ๋ก ๋น์ ์ฐพ์ ์ ์๋ค. ์ด๋ฌํ ๋น์ ์ง์ ์ฐพ๋ ๋ฐฉ์์ ์์กด์ฑ ๊ฒ์(dependency lookup)์ผ๋ก ๋ถ๋ฆฐ๋ค.
# ์๋ฐ ์ค์ ํด๋์ค๋ก ์คํ๋ง ์ปจํ ์ด๋ ์์ฑํ๊ธฐ
์ด๋ ธํ ์ด์ ๊ธฐ๋ฐ์ ์๋ฐ ํฌ๋์ค๋ก ์คํ๋ง ์ปจํ ์ด๋๋ฅผ ๋ง๋ ์์์ด๋ค.
@Configuration
public class AppConfig {
@Bean
public StationService stationService() {
return new StationServiceImpl(stationRepository());
}
@Bean
public StationRepository stationRepository() {
return new MemoryStationRepository();
}
@Bean
// ...
}
new AnnotationConfigApplicationContext()
๋ฅผ ํตํค ์๋ฐ ๊ธฐ๋ฐ ์คํ๋ง ์ปจํ
์ด๋๋ฅผ ๋ง๋ค์ด ์ค๋ค. ๊ทธ๋ผ ๋น์ด์๋ ๋น ์ ์ฅ์๊ฐ ์๊ธด๋ค. ์ด๋ ๋ง๋ค์ด ๋ ์๋ฐ ์ค์ ํฌ๋์ค๋ฅผ ํ๋ผ๋ฏธํฐ๋ก ๋๊ฒจ์ค์ ์์ฑํ๋ค. ๊ทธ๋ผ ์๋ฐ ์ค์ ํด๋์ค ๋ด๋ถ์ @Bean ์ด๋
ธํ
์ด์
์ด ๋ถ์ ๋ฉ์๋๋ค์ ์คํํ๋ฉด์ ๋น ์ ์ฅ์์ ์ค์ ๋น์ ๋ฑ๋กํ๋ค.
ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);
์ฌ์ฉํ ๋, ๋น ๋ฑ๋ก ๋ฉ์๋ ์ด๋ฆ์ ํตํด ๊ฐ์ฒด๋ฅผ ๊ฐ์ ธ์ฌ ์ ์๋ค.
StationService stationService = applicationContext.getBean("stationService", StationService.class);
# 0424 - ์คํ๋ง(Spring)์ ์ฑ๊ธํค(Singleton)
# ์คํ๋ง์์ ์ฑ๊ธํค์ ์ฌ์ฉํ๋ ์ด์
์ ํ๋ฆฌ์ผ์ด์
์ปจํ
์คํธ์ ์ํด ๋ฑ๋ก๋ ๋น์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฑ๊ธํค์ผ๋ก ๊ด๋ฆฌ๋๋ค. ์ฆ, ์คํ๋ง์ ์ฌ๋ฌ ๋ฒ์ ์์ฒญํ๋๋ผ๋ ๋งค๋ฒ ๋์ผํ ๊ฐ์ฒด๋ฅผ ๋๋ ค์ค๋ค. ์ ํ๋ฆฌ์ผ์ด์
์ปจํ
๊ธํธ๊ฐ ์ฑ๊ธํค์ผ๋ก ๋น์ ๊ด๋ฆฌํ๋ ์ด์ ๋ ๋๊ท๋ชจ ํธ๋ํฝ์ ์ฒ๋ฆฌํ ์ ์๋๋ก ํ๊ธฐ ์ํจ์ด๋ค.
์คํ๋ง์ ์ต์ด์ ์ค๊ณ๋ ๋ ๋ถํฐ ๋๊ท๋ชจ์ ์ํฐํ๋ผ์ด์ฆ ํ๊ฒฝ์์ ์์ฒญ์ ์ฒ๋ฆฌํ ์ ์๋๋ก ๊ณ ์๋์๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ์๋ฐ๋ผ ๊ณ์ธต์ ์ผ๋ก ์ฒ๋ฆฌ ๊ตฌ์กฐ(Controller, Service, Repository ๋ฑ)๊ฐ ๋๋์ด์ง๊ฒ ๋์๋ค.
๊ทธ๋ฐ๋ฐ ๋งค๋ฒ ํด๋ผ์ด์ธํธ์์ ์์ฒญ์ด ์ฌ ๋๋ฌด๋ค ๊ฐ ๋ก์ง์ ์ฒ๋ฆฌํ๋ ๋น์ ์๋ก ๋ง๋ค์ด์ ์ฌ์ฉํ๋ค๊ณ ์๊ฐํด๋ณด์. ์์ฒญ 1๋ฒ์ 5๊ฐ์ ๊ฐ์ฒด๊ฐ ๋ง๋ค์ด ์ง๋ค๊ณ ํ๊ณ , 1์ด์ 500๋ฒ ์์ฒญ์ด ์จ๋ค๊ณ ํ๋ฉด ์ด๋น 2500๊ฐ์ ์๋ก์ด ๊ฐ์ฒด๊ฐ ์์ฑ๋๋ค. ์๋ฌด๋ฆฌ GC์ ์ฑ๋ฅ์ด ์ข์์ก๋ค ํ๋๋ผ๋ ๋ถํ๊ฐ ๊ฑธ๋ฆฌ๋ฉด ๊ฐ๋น์ด ํ๋ค ๊ฒ์ด๋ค.
๊ทธ๋์ ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ณ ์ ๋น์ ์ฑ๊ธํค ์ค์ฝํ๋ก ๊ด๋ฆฌํ์ฌ 1๊ฐ์ ์์ฒญ์ด ์์ ๋ ์ฌ๋ฌ ์ฐ๋ ๋๊ฐ ๋น์ ๊ณต์ ํด ์ฒ๋ฆฌํ๋๋ก ํ์๋ค.
# ์คํ๋งใ ์์ ๊ด๋ฆฌํ๋ ์ฑ๊ธํค์ ์ฅ์
- private ์์ฑ์๋ฅผ ๊ฐ๊ณ ์์ด ์์์ด ๋ถ๊ฐ๋ฅํ๋ค.
- ํ ์คํธํ๊ธฐ ํ๋ค๋ค.
- ์๋ฒ ํ๊ฒฝ์์๋ ์ฑ๊ธํค์ด 1๊ฐ๋ง ์์ฑ๋จ์ ๋ณด์ฅํ์ง ๋ชปํ๋ค.
- ์ ์ญ ์ํ๋ฅผ ๋ง๋ค ์ ์๊ธฐ ๋๋ฌธ์ ๋ฐ๋์งํ์ง ๋ชปํ๋ค.
๊ทธ๋์ ์คํ๋ง์ ์ง์ ์ฑ๊ธํค ํํ์ ์ค๋ธ์ ํธ๋ฅผ ๋ง๋ค๊ณ ๊ด๋ฆฌํ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋๋ฐ, ๊ทธ๊ฒ์ด ๋ฐ๋ก ์ฑ๊ธํค ๋ ์ง์คํธ๋ฆฌ(Singleton Registry)์ด๋ค. ์คํ๋ง ์ปจํ ์ด๋๋ ์ฑ๊ธํค์ ์์ฑํ๊ณ , ๊ด๋ฆฌํ๊ณ ๊ณต๊ธํ๋ ์ปจํ ์ด๋๊ธฐ์ด๊ธฐ๋ ํ๋ค. ์ฑ๊ธ ํค ๋ ์ง์คํธ๋ฆฌ์ ์ฅ์ ์ ๋ค์๊ณผ ๊ฐ๋ค.
- static ๋ฉ์๋๋ private ์์ฑ์ ๋ฑ์ ์ฌ์ฉํ์ง ์์ ๊ฐ์ฒด์งํฅ์ ๊ฐ๋ฐ์ ํ ์ ์๋ค.
- ํ ์คํธ๋ฅผ ํ๊ธฐ ํธ๋ฆฌํ๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก ์ฑ๊ธํค์ด ๋ฉํฐ์ฐ๋ ๋ ํ๊ฒฝ์์ ์๋น์ค ํํ ๊ฐ์ฒด๋ก ์ฌ์ฉ๋๊ธฐ ์ํด์๋ ๋ด๋ถ์ ์ํ์ ๋ณด๋ฅผ ๊ฐ์ง ์๋ ๋ฌด์ํ(Stateless) ๋ฐฉ์์ผ๋ก ๋ง๋ค์ด์ ธ์ผ ํ๋ค. ๋ง์ฝ ์ฌ๋ฌ ์ฐ๋ ๋๋๋ค์ด ๋์์ ์ํ๋ฅผ ์ ๊ทผํ์ฌ ์์ ํ๋ค๋ฉด ์๋นํ ์ํํ๊ธฐ ๋๋ฌธ์ด๋ค.
์ง์ ์ฑ๊ธํค์ ๊ตฌํํ๋ค๋ฉด ์๋นํ ๋ง์ ๋จ์ ๋ค์ด ์๊ฒ ์ง๋ง, ์คํ๋ง ํ๋ ์์ํฌ์์ ์ง์ ์ฑ๊ธํค์ผ๋ก ๊ฐ์ฒด๋ฅผ ๊ด๋ฆฌํด์ฃผ๋ฏ๋ก,ใ
ก ์ฐ๋ฆฌ๋ ๋์ฑ ๊ฐ์ฒด์งํฅ์ ์ธ ๊ฐ๋ฐ์ ํ ์ ์๊ฒ ๋๋ค.