본문 바로가기

전체 글

2024 - 12 - 27 비선형 자료구조 (공부용) 비선형 자료구조는 데이터가 계층적이거나 복잡한 관계를 가지며, 선형 자료구조와 달리 데이터 요소가 서로 연결된 형태를 가집니다.   글 아래에  트리와 그래프에 대한 분석은 글쓴이가 공부용으로 생각한거라 틀린내용이 많을 수 있습니다.   1. 트리 (Tree)트리는 계층적인 관계를 나타내는 자료구조로, 노드와 간선으로 구성됩니다. 각 노드는 데이터와 자식 노드에 대한 포인터를 가집니다. 이진 트리 (Binary Tree):정의: 각 노드가 최대 두 개의 자식을 가질 수 있는 트리.특징: 노드의 자식 노드는 왼쪽 또는 오른쪽으로 구분됩니다.이진 탐색 트리 (Binary Search Tree, BST):정의: 이진 트리의 한 종류로, 왼쪽 서브트리의 모든 노드는 부모 노드보다 작고, 오른쪽 서브트리의 모든 .. 더보기
2024-12-27 선형 자료구조 선형 자료구조는데이터가 일렬로 나열된 형태로, 각 데이터 요소가 선형적으로 연결되어 있습니다. 자료구조를 이렇게 나눈 이유는 얼만큼 빠르게 요소에 접근하냐와   1. 배열 (Array)정의: 고정된 크기의 동일한 데이터 타입의 요소 모음으로, 메모리에 연속적으로 저장됩니다. 특징:인덱스를 통해 빠른 접근이 가능 (O(1)).크기가 고정되어 있어 동적 크기가 필요할 경우 재할당이 필요합니다. 차이점: 메모리 공간이 연속적이며, 크기가 고정되어 있어 유연성이 떨어집니다.   2. 연결 리스트 (Linked List)정의: 노드들이 포인터로 연결된 동적 자료구조로, 각 노드는 데이터와 다음 노드를 가리키는 포인터를 포함합니다.종류:단일 연결 리스트 (Singly Linked List): 각 노드가 다음 노드에.. 더보기
2024 - 12 - 27 자료구조 모음 자료구조는 데이터를 효율적으로 저장하고 관리하기 위한 다양한 방법  선형 자료구조 (Linear Data Structures) 배열 (Array): 고정된 크기의 동일한 데이터 타입의 요소 모음.연결 리스트 (Linked List): 노드들이 포인터로 연결된 동적 자료구조. 단일 연결 리스트 (Singly Linked List)이중 연결 리스트 (Doubly Linked List)원형 연결 리스트 (Circular Linked List)스택 (Stack): 후입선출(LIFO) 방식으로 데이터를 저장하는 구조.큐 (Queue): 선입선출(FIFO) 방식으로 데이터를 저장하는 구조. 기본 큐 (Basic Queue)우선순위 큐 (Priority Queue)원형 큐 (Circular Queue)   비선형 자.. 더보기
2024-12-26 디자인 패턴 디자인 패턴이란 개발시 반복적으로 등장하는 문제를 해결 하기 위한 일반화 된 솔루션 즉 자주 보이는 문제 처리 방법이라고생각합니다. 디자인 패턴은 크게 3개로 분리됩니다. 생성 패턴새로운 것을 만들어 내는 방법과 관련된 패턴구조 패턴여러 코드를 조립하고 연결하는 방법에 대한패턴행동 패턴서로 어떻게 상호 작용할지에 대한패턴  생성 패턴(싱글톤 패턴) 인스턴스를 여러 개 만들 필요없이 하나만 존재해야하는 경우에 사용  예) A라는 사람은 세상에 본인 하나뿐  #include using namespace std;class AHuman {private: static AHuman* instance; // 유일한 A 객체를 가리킬 정적 포인터 int positionX; // A X .. 더보기
2024 - 12 -24 객체지향적 설계 객체 지향 프로그래밍의 중요성 C++에서 객체 지향적으로 코드를 구현하는 것은 매우 중요합니다. 그 이유는 다음과 같습니다: 구현 시간 단축: 잘 설계된 코드는 재사용이 가능하여 개발 시간을 줄여줍니다. 유연성: 기능 변경이나 추가가 용이합니다. 코드의 구조가 잘 되어 있으면 수정이 쉽습니다. 오픈소스 및 라이브러리: 대부분의 라이브러리와 오픈소스 프로젝트가 객체 지향적으로 설계되어 있습니다.  설계 원리 이해객체 지향 프로그래밍을 깊이 이해하기 위해서는 설계 원리를 아는 것이 중요합니다. 그 중 하나가 응집도입니다.응집도응집도는 클래스 내의 모듈들이 얼마나 잘 어우러져 있는지를 나타내는 개념입니다. 응집도가 높을수록 클래스의 품질이 좋아지는데, 이는 관련된 기능들이 함께 모여 있기 때문입니다.하나의 클.. 더보기
2024- 12 - 24 STL 공부 STL 은 c++ 에서 자체적으로 제공하는 표준 라이브 러리개발 시 유용하게 사용되는 컨테이너, 알고리즘이 구현되어 있기 때문에 ,헤더 파일을 추가하고 사용 하기만 하면 됩니다. 컨테이너 데이터를 담는 자료 구조입니다.데이터를 담는 방식이나 제공하는 방식에 따라 여러가지 컨테이너가 있습니다. 모든 컨테이너는 템플릿으로 구현 되어 있어 타입에 상관없이 사용 가능합니다.메모리 관리를 내부적으로 합니다 사용시 메모리 관리를 고려하지 않아도 됩니다.컨테이너는 반복자를 가지고 있습니다. 컨테이너 내부 세부적인 구현사항을 알지못해도모든 컨테이너를 동일한 문법으로 접근할 수 있습니다. 벡터(vector) 벡터는 배열과 유사한 컨테이너 입니다.타입에 종속되지않는 템플릿 클래스로 구현됩니다.원소 개수에 따라 내부 배열의.. 더보기
2024-12-23 c++ 함수 오버로딩, 템플릿 함수 오버로딩c++에서는 동일한 이름의 함수를 만들 수 있습니다.그러기위해서는 매개변수타입과 개수가 달라야합니다.  #include using namespace std;//int 타입void test(int a){ cout   이런식으로 함수 매개변수에 따라 같은 함수명이여도 다르게 사용 가능합니다. 아래의 방식들은 컴파일 에러가 발생합니다.  반환 타입만 다른 경우int fail(){ return 1;}float fail(){ return 1.1f;}  디폴트 매개변수가 있는 함수void fail(int a = 1){ cout 매개변수의 타입이 포인터와 배열로 다를 경우void fail(int* arr){ cout 이것말고도 오류가 생기는 건 더욱 있겠지만 이게 대표적 입니다.  템플릿  템플릿 .. 더보기
2024-12-23 c++ 얕은 복사 , 깊은 복사 얕은 복사(shallow copy) 대입연산자를 활용해서  두 개의 포인터가 같은 위치를 공유하는 것을 의미#include using namespace std;int main() { int* A = new int(2); // 포인터 B에 A가 가리키는 메모리를 공유 int* B = A; cout 두 개의 포인터가 같은 위치를 공유하니 하나의 포인터에서 메모리를 해지시키면 다른 한 쪽에서 사용불가함. (청소 빗자루를 2명이 사용하는데 한명이 버리면 다른 한명은 사용 못하는 것처럼) dangling pointer가 발생할 수 있는 복사입니다.   깊은 복사(Depp Copy) 서로 다른 메모리 영역을 할당해서 위치를 공유 하는 것이 아닌 값을 복사하는 것을 말합니다.하나가 해지해.. 더보기