C++ STL 맵 기본 사용법과 예제
2021. 1. 24. 20:32
DevLog/C & C++
Map 기본 형태 map : 키와 값을 쌍 형태로 선언합니다. 반복자 (iteractor) begin() : 시작 반복자를 반환 end() : end iterator를 반환 추가 및 삭제 insert(make_pair(key, value)) : 맵에 원소를 pair 형태로 추가 erase(key) : 맵에서 key (키값)에 해당하는 원소 삭제 clear() : 맵의 원소 전부 삭제 조회 find(key) : key (키값)에 해당하는 iterator를 반환합니다. count(key) : key (키값)에 해당하는 원소 (value들)의 개수를 반환합니다. 기타 empty() : 맵이 비어 있으면 true 아니면 false를 반환 size() : 맵 원소들의 수를 반환 #include #include #..
C++ 오버로딩과 오버라이딩
2021. 1. 24. 20:22
DevLog/C & C++
오버로딩(Overloading) : 함수 중복 정의 오버로딩은 같은 이름의 함수에 매개변수를 다르게 사용하여 매개 변수에 따라 다른 함수가 실행되는 것. 오버라이딩(Overriding) : 함수 재정의 오버라이딩은 상속받았을때 부모클래스의 함수를 사용하지 않고 다른 기능을 실행할때 함수를 자식클래스에 같은 이름, 매개변수로 재정의 해서 사용하는것. 오버로딩 : 심화 설명 메소드 이름이 같아야 한다. 리턴형이 같아도 되고 달라도 된다. 파라미터 개수가 달라야한다. 파라미터 개수가 같을 경우, 자료형이 달라야 한다. 객체 지향 프로그래밍에서 오버로딩(Overloading)은 같은 이름의 메소드를 여러개 중복 선언하는 것을 말합니다. C와 같은 기존언어에서는 같은 이름의 함수를 만들 수 없었습니다. 이것이 직..
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 키워드를 사용하여 할당된 메모리를 자동으로..
추상클래스와 인터페이스의 차이가 뭘까?
2021. 1. 23. 14:38
DevLog
추상 클래스(Abstract Class) 클래스는 일반 클래스(Concrete Class)와 추상 클래스로 나뉘는데 추상 클래스는 클래스 구현부 내부에 추상 메서드가 하나 이상 포함되거나 abstract로 정의된 경우를 말한다. 이러한 정의는 피상적인 것 같다. 공통의 자료형이라고 할 수 있는 추상클래스가 갖고 있는 공통 서비스 함수이다. 다만, 공통 서비스인데 구현이 공통인 것이 아니라 그 서비스라고 하는 목록이 공통인 것을 말한다. 이렇게 정의를 하는게 정확하게 전달하는 의미라고 생각한다. 추상 클래스는 new 연산자를 사용하여 객체를 생성할 수 없다. 추상 클래스(부모)와 일반 클래스(자식)는 상속의 관계에 놓여있다. 추상 클래스는 새로운 일반 클래스를 위한 부모 클래스의 용도로만 사용된다. 일반 ..
UE4 인터페이스(Interface)
2021. 1. 23. 14:11
DevLog/Unreal Engine
UE4 인터페이스(Interface)란? 인터페이스 클래스는 (잠재적으로) 무관한 클래스 세트가 공통의 함수 세트를 구현할 수 있도록 하는 데 쓰입니다. 그대로라면 유사성이 없었을 크고 복잡한 클래스들에 어떤 게임 함수 기능을 공유시키고자 하는 경우 매우 좋습니다. 예를 들어 트리거 볼륨에 들어서면 함정이 발동되거나, 적에게 경보가 울리거나, 플레이어에게 점수를 주는 시스템을 가진 가게임이 있다 칩시다. 함정, 적, 점수에서 ReactToTirgger(트리거에 반응) 함수를 구현하면 될 것입니다. 하지만 함정은 AActor에서 파생될 수도, 적은 특수 APawn 또는 ACharacter 서브클래스일 수도, 점수는 UDataAsset 일 수도 있습니다. 이 모든 클래스에 공유 함수 기능이 필요하지만, UO..