본문 바로가기

전체 글70

[디자인 패턴]싱클톤 패턴(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.
[C++]friend 키워드 friend 키워드 friend 키워드는 그 뜻이 '친구'라는 뜻과 마찬가지로 class와 class 간에 친구(friend) 관계를 형성할 수 있도록 합니다. A class와 B class 있고, 둘 다 private 멤버를 가지고 있다면 이 private 멤버는 외부에서 직접 접근할 수 없습니다. 그러나 A class에서 B class를 friend 키워드를 통해 친구로 지정하면 B class는 A class의 private 멤버에 직접 접근이 가능해집니다. 하지만 A class는 B class의 private멤버에 직접 접근이 불가능합니다. A class가 B class의 private 멤버에 직접 접근하려면 B class에서 A class를 친구로 지정해야 합니다. 조금 헷갈리실 수 있는데, 쉽게.. 2018. 2. 21.
[자료구조]이진 탐색(Binary Search) 이진 탐색 오름차순으로 정렬된 리스트에서 특정한 값의 위치를 찾는 알고리즘입니다. 처음 중간의 값을 임의의 값으로 선택하여, 그 값과 찾고자 하는 값을 비교하는 방식입니다. 선택한 중앙값을 기준으로 찾고자 하는 값보다 크다면 기준의 왼쪽 범위에서, 찾고자 하는 값보다 작다면 기준의 오른쪽 범위에서 다시 중앙값을 선택하여 반복합니다. 이진 탐색 과정을 그림으로 보자면 다음과 같습니다. 위 그림에서 보면 길이가 10인 리스트에 { 0,2,4,6,8,10,12,14,16,18 } 값이 정렬되어 저장되어 있고, 여기서 12를 찾는 과정입니다. 처음에 중앙값, (length / 2)인 5를 기준으로 합니다. 리스트의 5번 index의 값을 기준으로 하는 겁니다. 리스트의 5번 index의 값은 10으로 찾고자 하.. 2018. 2. 14.