본문 바로가기

main70

[C++]함수 포인터 와 Class 함수 포인터 함수 포인터는 함수의 시작 주소 값을 가리키는 포인터 변수입니다. 함수 포인터 변수 형식 반환형 (*함수 포인터 변수 이름)(인수 목록); 의 형태를 가집니다. 코드로 보자면 다음과 같습니다. int func(int nData1, int nData2); int main() { int (*pFunc) (int, int) = nullptr; pFunc = &func; printf("%d \n", (*pFunc)(2,5)); return 0; } 위 코드를 보시면 반환형이 int형이고 인자로 int형 변수 2개를 받는 func() 함수가 있습니다. 그리고 이 함수를 가리킬 수 있는 함수 포인터 변수 int (*pFunc)(int , int)를 선언하고 nullptr로 초기화하였습니다. (포인터 변.. 2018. 2. 28.
[디자인 패턴]싱클톤 패턴(Singleton pattern) 싱글톤 패턴(Singleton pattern) 싱글톤 패턴은 프로그램이 시작될 때 최초 한 번만 메모리를 할당하고 그 메모리에 인스턴스를 만들어 사용하는 디자인 패턴입니다. 즉, 싱글턴 패턴은 클래스의 인스턴스 생성을 단 한 번으로 제한하여 사용하는 방식입니다. 싱글턴 패턴은 프로그램 내에서 공통적으로 쓰이는 자원을 관리, 저장하는 역할을 할 때 사용하거나, Connection pool, Thread Pool과 같은 공통된 객체를 여러 개 생성해서 사용해야 하는 경우에 많이 사용됩니다. (메모리, 리소스 등을 관리해야 하는 class를 싱클톤 패턴으로 만들어서 사용) 싱글톤 패턴은 class에 자기 자신을 static 멤버로 잡고, getInstance()라는 static 함수를 사용하여 자기 자신의 객.. 2018. 2. 28.
[C++]static 정적 변수와 Class static 정적 변수 static 정적 변수는 전역 변수의 성질과 namespace기능을 가진 변수입니다. static 정적 변수는 2가지 성질을 가집니다. 1.static 정적 변수는 프로그램이 시작될 때 메모리를 잡습니다. 즉, 프로그램이 시작될 때 정적 변수가 생성되고 초기화되며 프로그램이 종료할 때까지 존재합니다. (전역 변수의 성질) 2. static 정적 변수는 선언된 지역(scope)에서만 사용이 가능합니다. (지역 변수의 성질) void func(); int main() { func(); func(); func(); return 0; } void func() { static int nData = 0; nData++; printf("%d \n", nData); } func()라는 함수가 있.. 2018. 2. 27.
[자료구조]이진 탐색 트리(Binary Search Tree) 이진 검색 트리 이진 검색 트리란 이진 탐색과 연결리스트를 결하한 자료구조입니다. 이진 탐색의 효율적인 탐색 능력을 유지하면서 빈번한 자료 삽입과 삭제가 가능합니다. 이진 탐색의 경우 탐색에 소요되는 시간 복잡도는 O(logn)으로 빠르지만 자료 삽입, 삭제가 불가능하고, 연결리스트의 경우 자료 삽입, 삭제에 필요한 시간 복잡도는 O(1)로 효율적이지만 자료 탐색에 필요한 시간복잡도는 O(n)이 됩니다. 이 둘을 결합하여 효율적으로 자료 탐색 및 자료 삽입, 삭제를 가능하게 하는 것이 이진 검색 트리입니다. 이진 검색 트리의 속성 ▶ 각 노드에 값(데이터)과 키가 존재하며, 키 값은 모두 달라야 한다. ▶ 노드의 왼쪽 서브트리에는 그 노드의 키 값보다 작은 값들을 지닌 노드들로 이루어져 있다. ▶ 노드의.. 2018. 2. 27.
[자료구조]연결 리스트(Linked List) 연결 리스트(Linked List) 연결 리스트는 각 노드가 데이터와 포인터를 가지고 한 줄로 연결되어 있는 방식으로 데이터를 저장하는 자료 구조이다. 이름에서 말하듯이 데이터를 담고 있는 노드들이 연결되어 있는데, 노드의 포인터가 다음이나 이전의 노드와의 연결을 담당하게 된다. 연결 리스트는 늘어선 노드의 중간지점에서도 자료의 추가와 삭제가 O(1)의 시간에 가능하다는 장점을 갖는다. 그러나 배열이나 트리 구조와는 달리 특정 위치의 데이터를 검색해 내는 데에는 O(n)의 시간이 걸리는 단점도 갖고 있다. 따라서 연결 리스트는 연결 리스트의 전체 데이터를 순차 적으로 모두 접근하여 데이터에 따라 처리하는 용도로 사용된다. 연결 리스트 삽입 연결 리스트에서 삽입 과정은 위 그림과 같습니다. 삽입할 노드를 .. 2018. 2. 22.