본문 바로가기

Dev8

[Design Pattern] 싱글톤 패턴(Singleton pattern) 싱글톤 패턴(Singleton Pattern) 이란? 소프트웨어 디자인 패턴에서 싱글턴 패턴(Singleton pattern)을 따르는 클래스는, 생성자가 여러 차례 호출되더라도 실제로 생성되는 객체는 하나이고 최초 생성 이후에 호출된 생성자는 최초의 생성자가 생성한 객체를 리턴한다. 이와 같은 디자인 유형을 싱글턴 패턴이라고 한다. 주로 공통된 객체를 여러개 생성해서 사용하는 DBCP(DataBase Connection Pool)와 같은 상황에서 많이 사용된다. 즉, 프로그램에서 한 번만 객체가 생성되고 이후에는 최초 생성된 객체를 참조하는 형식의 디자인 패턴이다. 싱글톤 패턴을 사용하는 이유 및 문제점 사용하는 이유? 오직 하나의 인스턴스만 사용하므로 메모리적 측면에서 이득이 있다. 단 한 번만 ne.. 2020. 5. 1.
[C/C++] 10진법 -> N진법 변환 Theory X진법 수를 X로 나누면 한 자리씩 소수점으로 이동하게 된다. 아래 예제를 보면 알 수 있다. 10진법 123 / 10 = 12.3 12.3 / 10 = 1.23 2진법 1011 / 2 = 101.1 또한 어떤 수를 10진법으로 표기를 하든, 2진법으로 표기를 하든, 16진법으로 표기를 하든 결국 다 표현하는 방식만 다를 뿐, 같은 값을 가진다. 10진법 11이라는 숫자를 2의 배수의 합으로 표현을 해보자. $$ 11 = 1 \cdot 2^3 + 0 \cdot 2^2 + 1 \cdot 2^1 + 1 \cdot 2^0$$ 위와 같이 표현이 되는데, 이 때 11이라는 10진법 수를 2로 나눈 나머지는 구하면 $2^n$ 부분이 각 1씩 떨어지고 가장 작은 부분인 $ 2^0 $부분의 계수가 나오게 .. 2020. 1. 30.
[C++] 함수와 const 목차 함수의 매개변수에 const 함수의 반환값에 const 함수명 뒤에 const 1. 함수의 매개변수에 const class CMyClass { public: CMyClass(); ~CMyClass(); private: int m_iPosX; int m_iPosY; public: void SetPos(const int iPosX, const int iPosY) { //iPosX = -1; // 오류 발생 m_iPosX = iPosX; m_iPosY = iPosY; } }; 함수의 매개변수에 const를 붙이면 매개변수의 값을 변경할 수 없다. 즉, const 예약어가 가지는 기능을 매개변수에 적용시키는 것이다. 매개변수가 변경되면 안되는 경우에 사용된다. 2. 함수의 반환값에 const const i.. 2019. 12. 30.
[C/C++] free (stdlib.h에 선언되어 있음.) free(포인터); void memcmp(void* ptr); 할당한 메모리의 주소 반환 메모리를 해제한다 이전에 malloc 혹은 calloc, realloc 등으로 할당된 메모리를 해제해서, 나중에 다시 사용될 수 있게 합니다. 인자 ptr 기존에 malloc, callor, realloc 으로 할당된 메모리의 시작점을 가리키는 포인터 리턴값 없음 예시1 #include #include int main() { char* buffer; buffer = (char*)malloc(sizeof(char) * 10); if (buffer == NULL) return 0; for (int i = 0; i < 9; i++) *(buffer + i) = 'A' + rand() .. 2019. 11. 7.
[C/C++] malloc (stdlib.h에 선언되어 있음.) malloc(메모리 크기); void* memcmp(size_t _Size); 할당한 메모리의 주소 반환 함수 호출 시 할당하고자 하는 메모리의 크기를 바이트 단위로 전달받고, 해당 크기만큼 메모리를 할당한다. 그리고 할당한 메모리의 시작 주소값을 반환한다. 할당된 메모리는 초기화 되지 않았을 수도 있다. 할당한 메모리는 반드시 free로 해제해줘야 한다. 동적할당을 할 때 사용된다. 인자 Size 메모리 블록의 크기 (바이트 단위) 리턴값 메모리 할당에 성공하였을 경우, 할당한 메모리의 시작 주소값을 반환한다. 반환형이 void* 이기 때문에 사용하려는 타입으로 캐스팅을 해줘야 한다. 메모리 할당에 실패하였을 경우, NULL 포인터를 반환한다. 예시1 #includ.. 2019. 11. 7.
[C/C++] memcmp (string.h에 선언되어 있음.) memcmp(포인터1, 포인터2, 크기); int memcmp(void* ptr1, void* ptr2 size_t _Size); 결과에 따른 정수 값을 리턴 두 개의 메모리 블록을 비교한다. ptr1이 가리키는 처음 _Size 바이트의 데이터와 ptr2 가 가리키는 처음 _Size 바이트의 데이터를 비교하여 이들이 같다면 0 을 리턴하고 다르다면 0 이 아닌 값을 리턴한다. 이 때 리턴되는 값은 아래를 참고. 인자 ptr1 메모리 블럭을 가리키는 포인터이다. ptr2 메모리 블럭을 가리키는 포인터이다. _Size 비교할 바이트의 수를 나타낸다. 리턴값 두 개의 메모리 블록의 관계에 따라 아래와 같이 정수 값을 리턴한다. 만일 두 메모리 블록이 정확히 같다면 0 을 .. 2019. 11. 2.
[C/C++] memset (string.h에 선언되어 있음.) memset(포인터, 설정한 값, 크기); void *memset(void *_Dst, int _Val, size_t _Size); 값 설정이 끝난 포인터를 반환 memset 함수는 메모리의 내용을 원하는 크기만큼 특정값으로 설정할 수 있다. 인자 _Dst 설정한 포인터의 주소로, void* 형으로 변환되어서 전달된다. _Val 설정한 값으로, int 형 데이터를 인자로 받는다. _Size 설정할 크기, 포인터부터 몇 바이트인지를 나타낸다. 리턴값 _Dst 이 리턴된다. 예시1 #include #include #include int main() { char* ptr = (char*)malloc(sizeof(char) * 10); memset(ptr, 65, sizeo.. 2019. 11. 1.
[C/C++] memcpy (string.h에 선언되어 있음.) memcpy(목적지포인터, 원본포인터, 크기); void *memcpy(void *_Dst, void const *_Src, size_t _Size); 목적지 포인터를 반환 memcpy 함수는 메모리의 내용을 다른 곳으로 복사하는 함수이다. 인자 _Dst 데이터가 복사될 곳의 주소로, void* 형으로 변환 되어서 전달된다. _Src 복사할 데이터들의 주소로, void* 형으로 변환 되어서 전달된다. _Size 복사할 데이터의 바이트 수 이다. 리턴값 _Dst 이 리턴된다. 예시 #include #include int main() { int arr1[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; int arr2[10] = { 0, }; fo.. 2019. 11. 1.