** ์ฑ๊ธํด ํจํด์ด๋? **
๐ ์ ์ / ํน์ง
1. ์ฑ๊ธํด(singleton)์ด๋ ๋์์ธ ํจํด ์ค ๊ฐ์ฅ ๊ฐ๋จํ ํจํด์ผ๋ก '์ด๋ค ๊ฐ์ฒด ํ๋'๋ฅผ ์๋ฏธํ๋ค. ์ฑ๊ธํด ํจํด์ ํ๋ก๊ทธ๋จ์ ํด๋์ค์ ์ธ์คํด์ค๊ฐ ๋ฑ ํ๋๋ง ์กด์ฌํ๋๋ก ํ๋ ๋์์ธ ํจํด์ด๋ค.
2. ์ธ๋ถ ์์คํ ๊ณผ ์ํธ์์ฉํ๋ ์ ํธ๋ฆฌํฐ ํด๋์ค ๋๋ ์ ์ญ ์ํ๋ฅผ ๊ด๋ฆฌํ๋ ํด๋์ค ๊ตฌํ์ ์ ํฉํ๋ค.
- ex. ๋ฐ์ดํฐ ๋ฒ ์ด์ค ๋ก๋, ํ์ผ ์์คํ ๋ก๋, ๊ณต์ฉ gui๋ฑ(๊ฒ์์์ ํ์ ์ฐฝ or ํดํ์ฐฝ ..), ๋ก๊ฑฐ(logger)
๐ธ ์ฌ๊ธฐ์ ์ ๊น !! ๐ธ
* ์ธ์คํด์ค์ ๊ฐ์ฒด์ ์ฐจ์ด๋ ๋ฌด์์ผ๊น?
๊ฐ๋จํ ๋งํด ๊ฐ์ฒด๋ ์ ์ธ์ด๊ณ ์ธ์คํด์ค๋ ์ค์ฒดํ์ด๋ค. ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์์ ํด๋น ํด๋์ค์ ๊ตฌ์กฐ๋ก ์ปดํจํฐ ์ ์ฅ๊ณต๊ฐ์ ์ค์ ๋ก ๋ ๋ฆฝ๋ ๋ฐ์ดํฐ ๊ณต๊ฐ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ฐ์ง๊ฒ ๋๋ฉด ๊ทธ๊ฒ์ ์ธ์คํด์คํ๋ผ๊ณ ๋งํ๋ค.
๋ ์์ธํ ์ค๋ช ์ ์๋ ๋ธ๋ก๊ทธ๋ฅผ ์ฐธ๊ณ ํ๊ธธ ๋ฐ๋๋ค.
๊ฐ์ฒด์ ์ธ์คํด์ค์ ์ฐจ์ด::::kkennib (tistory.com)
๐์ฅ์
๋จ ํ ๋ฒ์ ์ธ์คํด์ค ์์ฑ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๊ฐ ํธํ๊ณ ๊ฐ์ฒด ์ ๊ทผ ์๊ฐ์ด ์ค์ด๋ ๋ค.
** ์ฑ๊ธํด ํจํด์ ๋ฌธ์ ์ ์? **
1. ์ฑ๊ธํด์ด ์ฌ๋ฌ ๊ฐ๋ผ๋ฉด ํ๋ก๊ทธ๋จ์ ๊ตฌ๋ํ ๋ ์ํ๋ ์์๋ก ์ด๊ธฐํ๋ฅผ ๋ณด์ฅํ๊ธฐ ํ๋ค๋ค.
→ ํ ๋ชจ๋์์ ์ ์ญ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ ๋ ๊ทธ ์ ์ญ ๊ฐ์ฒด๊ฐ ์ฐธ์กฐํ๋ ๋ ๋ค๋ฅธ ์ ์ญ ๊ฐ์ฒด๊ฐ ์์ง ์ด๊ธฐํ๊ฐ ์๋ ์ํ ์ผ ์๋ ์๋ค.
2. ์์กด ๊ด๊ณ๋ฅผ ๊ฐ๋ฆฌ๊ธฐ ๋๋ฌธ์ ๊ฒฐํฉ๋๊ฐ ๋์์ง๊ณ (ํ์ดํธ ์ปคํ๋ง tight coupling) ๋จ์ ํ ์คํธ๊ฐ ๋ณต์กํ๋ค.
→ static ์ ์ญ๋ณ์๋ก ๊ด๋ฆฌํ๋ค๊ณ ํด์ ์ธ์คํด์ค์ ์ถ๊ฐ ์์ฑ์ ๋ง์ ์๊ฐ ์๋ค.
๐๋์ฑ
1. static ์นด์ดํฐ ๋ณ์๋ฅผ ๋๊ณ ๊ฐ์ด ์ฆ๊ฐ ๋ ๋ ์ต์ ์ ์ ๋ฐ์ ์ํจ๋ค.
2. ๋ช ์์ ์ผ๋ก ์์ฑํ๋ ๊ฒ์ ๋ง๋ ๋ฐฉ๋ฒ์ผ๋ก ์์ฑ์๋ฅผ private์ผ๋ก ์ ์ธํ๊ณ ์ธ์คํด์ค๋ฅผ ๋ฆฌํด๋ฐ๊ธฐ ์ํ ๋ฉค๋ฒํจ์๋ฅผ ๋ง๋ ๋ค.
** ๋ค์ํ ์ฑ๊ธํด ๊ตฌํ ๋ฐฉ๋ฒ๋ค **
1. ์ ๊ทผ ์ ์ด ๋ฉ์ปค๋์ฆ๊ณผ static์ ์ด์ฉํ์ฌ ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ํ๋๋ง ์์ฑํ๊ณ ์ ๊ทผํ๊ฒ ๋ง๋๋ ๋ฐฉ๋ฒ
- static์ ์ฌ์ฉํ๋ ์ด์ ? ์ฑ๊ธํด ํด๋์ค์ ํด๋ผ์ด์ธํธ๋ ์ธ์ ๋ ์ง static ๋ฉ์๋์ธ instance( ) or getInstance( )๋ฅผ ํธ์ถํด์ ์ฑ๊ธํด ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ์ป์ด์์ผํ๊ธฐ ๋๋ฌธ์ด๋ค.
- instance( ) or getInstance( ) ๋ฉ์๋ ์์ ์ฑ๊ธํด์ ๋ก์ปฌ static ์ธ์คํด์ค๋ฅผ ๋๋ค. C++๋ ๋ก์ปฌ์ ๋ static ์ธ์คํด์ค๊ฐ ์ค๋ ๋์ ์์ ํ๊ฒ ์ด๊ธฐํ๋๋๋ก ๋ณด์ฅํด์ค๋ค. (๋จ, ์ด๊ธฐํํ ๋๋ง ์ค๋ ๋์ ์์ ํ๋ค๋ ์ ์ ์ฃผ์ํด์ผํ๋ค. ์ฑ๊ธํด์ ๋ฉ์๋๋ฅผ ์ฌ๋ฌ ์ค๋ ๋๊ฐ ํธ์ถํ ๋๋ ๊ฐ ๋ฉ์๋๋ฅผ ์ค๋ ๋์ ์์ ํ๊ฒ ๊ตฌํํด์ผ ํ๋ค. )
class Dataclass
{
protected:
// ๊ธฐ๋ณธ ์์ฑ์ ์ ์ด. ์์ฑ์๊ฐ protected์ด๊ธฐ ๋๋ฌธ์ ๋ฐ์์๋ ์์ฑํ ์๊ฐ ์๋ค.
Dataclass()
{
// ...
}
public:
static Dataclass& getInstance()
{
static Dataclass dataclass;
return dataclass;
// -- ํ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ผ๋ก ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ฉด ์ ์ฒด ๊ฐ์ฒด๊ฐ ์๋ ํฌ์ธํฐ๋ง static์ผ๋ก ์กด์ฌ --
// static Dataclass* dataclass = new Dataclass();
// return *dataclass;
}
Dataclass(Dataclass const&) = delete; /*๋ณต์ฌ ์์ฑ์ ์ ์ด*/
Dataclass(Dataclass &&) = delete; /*์ด๋ ์์ฑ์ ์ ์ด*/
Dataclass& operator=(Dataclass const&) = delete; /*๋ณต์ฌ ๋์
์ฐ์ฐ์ ์ ์ด*/
Dataclass& operator=(Dataclass&&) = delete; /*์ด๋ ๋์
์ฐ์ฐ์ ์ ์ด*/
~Dataclass();
// --> boost::noncopyable ํด๋์ค : ์ด๋์์ฑ์/์ฐ์ฐ์๋ฅผ ์ ์ธํ๊ณ ๋ชจ๋ ์จ๊ธธ์ ์๋ค.
};
2. ์ฑ๊ธํด ํจํด 2๋ฒ ์งธ ๋ฌธ์ ์ ์ธ (์ธ์คํด์ค์ ์ถ๊ฐ ์์ฑ์ ๋ง์ ์๊ฐ ์๋ค.) ํด๊ฒฐ ํ๋ ์ฑ๊ธํด
class DataClass
{
public:
DataClass()
{
static int instance_count{ 0 };
if (++instance_count > 1)
{
throw std::exception("Cannot make > 1 dataClass");
}
}
~DataClass();
};
DataClass& Get_DataClass()
{
static DataClass dataclass;
return dataclass;
}
public์ ๊ธฐ๋ณธ ์์ฑ์๋ฅผ ๋ง๋ค์ด ์ธ์ ๋ ์ง ์ธ์คํด์ค๋ฅผ ๋ง๋๋ ค๊ณ ์๋ ํ ์ ์์ผ๋ instance์ ๊ฐ์๋ฅผ ์ธ๊ณ ์๋ ๋ฉค๋ฒ๋ณ์๋ก ์ ํ์ ๋์ด ์ธ์ ์ ์ ๋์ง๋ ๋ฐฉ๋ฒ์ด๋ค. ํ์ง๋ง, 1๋ฒ์ ๋ฐฉ๋ฒ์ ์ถ์ฒํ๋ค.
**์ถ๊ฐ**
* ์ด๊ฑด ์ ์๋ ๊น?
๋๊ตฐ๊ฐ๋ ๋ฐ๋ณด ๊ฐ์ ์๋ฌธ ์ผ ์ ์๊ฒ ์ง๋ง ๋จ ํ ๋ฒ์ ์ธ์คํด์ค๋ฅผ ์์ฑํ๋๋ฐ ์ const๋ฅผ ๋ถ์ด์ง ์์๊น? ๋ผ๋ ์๋ฌธ์ ๊ฐ์ง ์ ์ด ์๋ค.
์ผ๋จ ์ด๋ฐ ์์ผ๋ก ์ธ์คํด์ค๋ฅผ ๋ง๋ ๋ค๋ฉด, ๋ฆฌํด๊ฐ์ ๋ชจ์์ static const๊ฐ ๋ ๊ฒ์ด๋ค.
์ผ๋จ ๋จผ์ ์ฌ๊ธฐ์ ์์์ผ ํ ์ ์ง์์ const์ ์์น๋ณ ์๋ฏธ์ด๋ค. const๋ constant์ ์ฝ์๋ก ๊ทธ ๋์์ ๋ณ๊ฒฝํ์ง ์๋๋ค๋ "์์"๋ฅผ ์๋ฏธํ๊ณ "์ฝ๊ธฐ ์ ์ฉ"์ ์๋ฏธํ๋ค.
- const Dataclass* dataclass --> Dataclass* dataclass์ ์์ํ ํ๊ฒ ๋ค. * dataclass์ด ๊ฐ๋ฆฌํค๋ ๊ฐ์ด ์์๊ฐ ๋์ด ๊ฐ์ ๋ณ๊ฒฝํ ์๊ฐ ์๋ค.
- Dataclass* const dataclass --> ํฌ์ธํฐ๊ฐ ์์๊ฐ ๋๋ฏ๋ก ์ฃผ์ ๊ฐ ๋ณ๊ฒฝ์ด ๋ถ๊ฐ๋ฅํ๋ค.
์ฆ, dataclass์ ์๋ ๋ฐ์ดํฐ๋ฅผ ์์ ํ ์ ์๊ฒ ๋๋ค. ๋ฐํ๊ฐ์ด const์ด๊ธฐ ๋๋ฌธ์ ๊ฐ ์์ฒด๋ก ์ฌ์ฉํ ๋ ์ฌ์ฉํ๋๊ฒ ๋ง๋ค.
static const, ์ ์ญ ์์๋ ์ปดํ์ผ๋ฌ์ ์ต์ ํ์ ์ํด ๋ณ์์ ๋ํ ๊ณต๊ฐ์ ์์ฝํด ๋์ง ์๋๋ค. ๋ฆฌํฐ๋ด๊ณผ ๋ค๋ฆ์๋ ์์๋ก ๊ฐ์ฃผํ๋ค.
๊ทธ๋ผ ์ฌ๊ธฐ์ ๋ ์๋ฌธ์ด ์๊ธด๋ค. ์ .. static Dataclass* const ๋ผ๊ณ ํ์ง ์๋์ง... ์๋ ์ฌ๋์ ์ ํํ ์ค๋ช
๋ถํ๋๋ฆฝ๋๋ค
** ์ถ์ฒ **
1. ๋ชจ๋ c++ ๋์์ธ ํจํด / ๋๋ฏธํธ๋ฆฌ ๋ค์คํฐ๋ฃฉ ์ง์ / ์ถํ์ฌ : ๊น๋ฒ
2. ์ ๋ฌธ๊ฐ๋ฅผ ์ํ c++ (๊ฐ์ 4ํ) : C++17 / ๋งํฌ ๊ทธ๋ ๊ณ ๋ฆฌ ์ง์ / ์ถํ์ฌ : ํ๋น ๋ฏธ๋์ด
'๐จ๐ปโ๐ป programming > โฝ ๋์์ธ ํจํด' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋์์ธ ํจํด] ์์ฑ ํจํด - 1. ํฉํฐ๋ฆฌ Factory (0) | 2023.08.09 |
---|
์ ํ๋ ๊ฒ ๋ณด๋ค ๋ซ๊ฒ ์ง
ํฌ์คํ ์ด ์ข์๋ค๋ฉด "์ข์์โค๏ธ" ๋๋ "๊ตฌ๋ ๐๐ป" ํด์ฃผ์ธ์!