전체 글 118

다익스트라 vs BFS

오늘은 다익스트라(dijkstra)와 BFS의 차이점을 공부하겠습니다. 다익스트라 vs BFS 둘다 그래프 탐색 알고리즘 입니다. 두개의 차이점은 다음과 같습니다. 정점 V 간선 E 비교 다익스트라 BFS 사용 이유 가중치가 있는 그래프 탐색 가중치가 없는 그래프 탐색 시간 복잡도 O(VlogE) O(VlogE) 탐색 방법 간선이 음수가 아닌 탐색 최단 거리 탐색(가중치 비용이 있음) 너비 탐색을 하여 최단 거리 탐색(가중치 비용이 없음) 위와 같은 그림일 경우 BFS로 2번까지의 최단거리를 구할경우 0->(1,2)->3으로 BFS는 탐색하므로 매우 부적합 다익스트라는 0->1->3->2가 가능

C++ RAII

오늘은 RAII에 대해서 공부하도록 하겠습니다. RAII란? RAII는 Resource acquisition is initalization의 약자입니다. 직역을 해보면 "자원 획득을 초기화한다." 입니다. 이 RAII는 C++설계 패턴중 하나입니다. 설계 패턴인데 무슨 설계이면 동적인 프로그래밍을 위해 new라는 키워드를 사용해 힙 메모리에 할당을 받습니다.(자원 획득) 하지만 이러한 할당받고 관리를 해주는 것은 프로그래머에 일입니다.(java, C#같이 가비지 컬렉터가 있는거 제외) 해당 메모리 공간을 잘활용하면 매우 좋은 효과를 보겠지만 예기지않은 exception을 만나거나 다양한 이유로 할당받은 메모리를 해제하지 못하면 memory leak(메모리 누수)가 발생됩니다. 그럼 이런 생각을 할수 있습..

REST, REST API, RESTFul API

오늘은 RESTFul API에 대해 공부하도록 하겠습니다. REST란? REST(Representational State Transfer)의 약자로 자원을 이름으로 구분하여 해당 자원의 상태를 주고 받는 모든 것을 의미합니다. 즉 REST란 1. HTTP URI(Uniform Resource Identifier)를 통해 자원 을 명시하며 2. HTTP Method(POST, GET, PUT, DELETE)를 통해 3. 해당 자원 (URI)에 대한 CRUD Operation을 적용하는 것을 의미합니다. CRUD는 대부분의 컴퓨터 소프트웨어가 가지는 기본적인 데이터 처리 기능인 Create, Read, Update, Delete를 묶어서 일컫는 말입니다. REST의 기본 구성 REST는 다음과 같은 3가지로..

업 캐스팅 다운 캐스팅

오늘은 업 캐스팅 다운 캐스팅에 대해 공부하도록 하겠습니다. 캐스팅 이란? 캐스팅이란 타입을 변환하는 것을 의미합니다. C++는 상속관계에 있는 부모와 자식 클래스 간에는 서로 간의 형변환이 가능합니다. 업캐스팅 업캐스팅이란 자식 클래스의 객체가 부모 클래스 타입으로 형변환 하는 것을 말합니다. 아래의 코드에서 Human* h = s 이다 이 부분이 업 캐스팅 부분입니다. h가 student객체를 가르키지만 h는 Human타입이기 때문에 Human 클래스의 맴버에만 접근이 가능합니다. #include using namespace std; class Human { private: int m_Age; string m_BloodType; string m_Gender; public: Human(int Age, ..

싱글톤 패턴(SingletonPattern)

오늘은 싱글톤 패턴에 대해 공부하겠습니다. 싱글톤 프로그램안에서 어떤 클래스의 인스턴스가 단 1개만 존재 하도록, 폐쇄적으로 클래스를 디자인 하는 것 이러한 이득은 1. 코드의 가독성 여러개의 클래스가 아닌 하나의 클래스를 독자적으로 사용함 2. 불필요한 객체생성 피함 프로그램 코드를 짜다보면 불필요한 객체들이 여러 생성됩니다. 3. 코드의 세밀함 싱글톤을 만들기로 맘을 먹었다면 최대한 여러곳에서 사용할 수 있도록 설계해야함 #include using namespace std; class Singleton { private: Singleton() {} ~Singleton() {} private: static Singleton* m_Singleton; public: static Singleton* GetI..

벡터 외적을 통한 적이 오른쪽 왼쪽 판별

오늘은 외적을 통해 적이 오른쪽에 있는지 왼쪽에 있는지 알아보도록 하겠습니다. 벡터의 외적을 이용하여 지정한 물체가 왼쪽 오른쪽에 있는지 알수있습니다. (외적을 하고 Up Vector와 내적) 1. 타겟의 위치에서 자신의 위치를 빼 타겟을 바라보는 벡터를 만듭니다. 2. 위에서 만든 벡터와 자신의 포워드 벡터를 외적합니다. 3. 외적한 값과 Up벡터를 내적합니다. 4. 내적한 결과가 음수면 왼쪽, 양수면 오른쪽입니다. (DirectX(왼손) OpenGL(오른손)) 5. 위에 4번은 오른손 좌표계를 기준으로 말하는 것 입니다.

(C++) 이동생성자(Move Constructor)

이동 생성자(Move Constructor)에 대해 공부하겠습니다. 이동생성자(Move Constructor) 이동 생성자는 객체가 살아있지만 안 쓴다고 보장할 수 있는 상황일 때 사용하게 되는 코드입니다. 기존 객체의 주소 및 Value값을 새로운 오브젝트에 소유권을 이전하게 하는 생성자로, 기존 객체의 값이 이전됩니다. 내부적인 구조로 봤을 때 Test b = static(a) 또는 Test b = move(a)는 새롭게 메모리를 복사할 필요 없이 이전에 잡은 메모리를 가르키기만 하면 되는데 굳이 새롭게 메모리를 잡고 그 메모리에 이전 데이터를 복사해서 저장함 그렇기 때문에 이동 생성자가 있고 이동 생성자를 통해 객체를 생성하면 이전에 Heap에 있던 메모리를 새로운 객체가 가리키게 되고 이전에 생성..

(C,C++) L-Value, R-Value

오늘은 L-Value, R-Value에 대해 공부하겠습니다. L-Value https://docs.microsoft.com/ko-kr/cpp/c-language/l-value-and-r-value-expressions?view=msvc-170 L-Value 및 R-Value 식 자세한 정보: L-Value 및 R-Value 식 docs.microsoft.com 마이크로소프트의 공식 문서를 보면 L-Value는 메모리 위치를 참조하는 식을 의미한다고 합니다. 왜 L이 되었는가 하면 메모리 주소를 참조한다는 뜻에서 Location의 앞글자, 또는 주로 코드에서 = 을 기준으로 왼쪽에 위치한다고 해서 Left Value라 해 L Value가 되었다는것 같습니다. 그리고 주로 L Value가 변수, 함수, 클래..

Stack OverFlow란?

오늘은 Stack OverFlow를 공부해보겠습니다. Stack OverFlow Stack OverFlow는 Stack 영역의 메모리가 지정된 범위를 넘어갈 떄 발생한다. Stack 메모리는 보통 지역 변수가 저장되는 영역이다. 함수에서 지역 변수를 선언하면 지역 변수는 Stack 메모리에 할당되고 함수를 빠져나오면 Stack메모리에서 해제된다. 하나의 프로그램이 실행될 때 수많은 함수를 호출하고 빠져 나오게 되는데 그 떄마다 함수에서 사용하는 지역 변수는 Stack 영역에 할당되고 해제되는 것을 반복하게 되며 그에 따라 사용하는 Stack 영역도 변하게 된다. 만약 한 함수에서 너무 큰 지역 변수를 선언 또는 함수를 무한 재귀호출을 할 경우 Stack OverFlow가 발생할수 있다. Stack Ove..