C++ 가비지 컬렉션, 참조 카운트
2021. 1. 24. 14:38
DevLog/C & C++
자동 메모리 관리 std::shared_ptr를 배우기 전에, 자동 메모리 관리에 관해 알아야합니다. 주로 쓰는 두가지 기법이 있었습니다. 첫번째는 가비지 컬렉션이고, 두번째는 참조 카운팅이 있습니다. 가비지 컬렉션은 Java와 C#에서 활용되고 있으며, 참조 카운팅은 Swift와 오브젝트 C에서 지원됩니다. 가비지 컬렉션 보통 트레이싱 가비지 컬렉션을 의미합니다. 메모리 누수를 막으려는 시도에서 나오게 되었습니다. 주기적으로 컬렉션을 실행합니다. 충분한 여유 메모리가 없을 때 컬렉션이 실행됩니다. 스케쥴에 따라 또는 수동으로도 실행가능합니다. 매 주기마다 GC는 루트를 확인합니다. 즉, 전역 변수, 스택, 레지스터들을 확인합니다. 힙에 있는 개체에 루트를 통해 접근할 수 있는지 판단합니다. 접근할 수 ..
C++ 스마트포인터
2021. 1. 23. 15:19
DevLog/C & C++
스마트 포인터(Smart pointer) C++ 프로그램에서 new 키워드를 사용하여 동적으로 할당받은 메모리는, 반드시 delete 키워드를 사용하여 해제해야 합니다. C++에서는 메모리 누수(memory leak)로부터 프로그램의 안전성을 보장하기 위해 스마트 포인터를 제공하고 있습니다. 스마트 포인터(smart pointer)란 포인터처럼 동작하는 클래스 템플릿으로, 사용이 끝난 메모리를 자동으로 해제해 줍니다. 스마트 포인터의 동작 보통 new 키워드를 이용해 기본 포인터(raw pointer)가 실제 메모리를 가리키도록 초기화한 후에, 기본 포인터를 스마트 포인터에 대입하여 사용합니다. 이렇게 정의된 스마트 포인터의 수명이 다하면, 소멸자는 delete 키워드를 사용하여 할당된 메모리를 자동으로..
C++ 다형성과 가상함수
2021. 1. 22. 22:39
DevLog/C & C++
다형성(Polymorphism)이란? 다형성(Polymorphism)은 OOP(Object Oriented Programming)의 개념을 설명할 때 추상화(Abstaction)과 더불어 가장 중요하게 등장하는 용어이다. 다형성은 여러 개의 서로 다른 객체가 동일한 기능을 서로 다른 방법으로 처리 할 수 있는 기능을 의미한다. 예를 들어 칼, 대포, 총 등의 무기들은 공통적으로 '공격'이라는 동일한 기능을 다르게 수행할 수 있다. 따라서 무기 객체에서 attack() 함수를 실질적으로 구현할 필요없이 추상 클래스(Abstract Class)로 구현하면 효과적으로 설계를 할 수 있다. 오버라이딩 문제 자식 클래스에서 멤버 함수를 재정의하여 사용하는 것은 일반적으로 잘 동작하나 포인터 변수로 객체에 접근할 ..
비선형 자료구조 정리 (그래프)
2021. 1. 22. 18:11
DevLog/자료구조
그래프(Graph) 란? 그래프란 비선형(non-linear) 자료구조이며, 노드(Node)와 엣지(Edge)로 구성되어있다. 노드(Node) : 노드는 꼭짓점(vertex)로 표현됩니다. 엣지(Edge) : 엣지는 두 노드를 연결하는 선(line)으로 표현됩니다. 위 그래프를 V(vertex) = {0, 1, 2, 3, 4}, E(edges) = {01, 12, 23, 34, 04, 14, 13}으로 표현할 수 있습니다. 그래프는 많은 일상 생활의 문제점을 해결하기 위해 사용됩니다. (네트워크의 표현 등) 그래프의 표현 그래프를 인접 행렬(Adjacency Matrix) 또는 인접 리스트(Adjacency List)로 표현 할 수 있습니다. 인접 행렬 인접행렬은 2차원 배열(v x v)로 표현될 수 있..
선형 자료구조 정리 (연결리스트)
2021. 1. 20. 21:10
DevLog/자료구조
연결리스트(Linked List) 란? 1. 연결리스트는 동적으로 크기를 조절(동적할당)하므로 배열을 사용하는것 보다 메모리를 효율적으로 사용 할 수 있다. 2. 일반적으로 배열이나 배열 큐, 스택을 사용할때, 배열 중간에 데이터를 삽입하기 위해서는 처음이나 끝에서 차례차례 이동시켜야하기 때문에 불필요한 연산을 많이 하게된다. 이 때 이러한 Sequential 표현에서 데이터 이동의 문제점을 해결할 수 있는 방법이 바로 연결리스트이다. 단순 연결 리스트에서는 데이터를 가지고 있는 공간인 Node와 그 다음 주소를 저장하는 공간인 next Node로 구성되어있고, Node의 마지막 데이터 공간의 nest Node에는 Null 값이 들어간다. Node = 데이터 값을 가지고 있는 공간 next Node = ..
선형 자료구조 정리 (스택)
2021. 1. 20. 20:23
DevLog/자료구조
스택(Stack) 이란? 1. 가장 늦게 들어간게 먼저 나가는 방식. 2. 가장 늦게 들어간 자료가 가장 먼저 나가는 구조를 후입선출(LIFO, Last In First Out)이라고도 부른다. 3. 스택은 한쪽 끝에서만 자료를 넣고 뺄 수 있다. 4. 스택의 가장 위를 top이라고 하고, 삽입과 삭제가 top에서 일어난다. 스택은 그래프의 자료구조의 탐색방법중 DFS(Depth First Search) 깊이우선 탐색에 사용됩니다. 스택은 자료가 들어가는곳과 나가는곳이 동일하기 때문에 하나의 포인터(top)로 자료 관리가 가능하다. 구현 코드 (C++) #include #define MAXVALUE 2 using namespace std; template class Stack { public: int t..