코테를 풀다보니 문법적으로 부족한게 정말 너무 많다. 요즘 부끄러워서 미친다.문법공부도 당연히 처음부터 하고 있지만, 나는 오답하면서 틀리는걸 채우는 방법이 더 익숙하므로(효율은 박살남)문제풀다가 모르는거 나오면 여기에 죄다 정리할 예정이다. 내 문법 빵꾸가 다 채워지는 그날까지..아스키코드활용법대문자 → 소문자 or 소문자 → 대문자 or 알파벳 → 숫자 등등대문자와 소문자는 각각 "32" 차이, 알파벳과 숫자는 "64" 차이가 난다.문자열 처리1. 문자열 string vs char [ ]string을 사용할 시 헤더 추가 필수 (class이기 때문)string은 인덱스를 통해 한개의 문자에 접근할 수 있지만, 그렇게 접근한 문자는 string이 아니라 char형이다.때문에 stoi(stringAr..
c++에서는 기존의 데이터형을 다른 데이터형태로 변환하는 "캐스팅" 이라는 과정이 있다. 캐스팅자세한 정보: 캐스팅learn.microsoft.com이러한 캐스팅을 해주는 타입(형)변환 연산자(캐스팅 연산자)가 있는데dynamic_caststatic_castconst_castreinterpret_cast가 있다.C++ 캐스트 연산자 형태static_cast(변경할 대상);static_castc언어의 형변환 문제점을 줄인 방식이다.컴파일 타임에 타입 검사를 제공하고, 강제변환이 아닌 논리적으로 가능한 타입에 대해서만 캐스팅을 진행한다.→ 따라서 컴파일에러로 잡아낼 수 있다.dynamic_cast상속관계에서 다운 캐스팅을 할 때 안전하게 캐스팅을 할 수 있다.+ 다운캐스팅?: 부모클래스 객체가 자식클래스 타..
스마트 포인터는 c++11부터 지원하는 기능으로, 메모리관리를 위한 기능이다. c++는 new를 사용해서 포인터로 실제 메모리를 가리키도록 하는데, new를 사용할 경우 다 사용한 후에 메모리를 해제해줘야 한다.(delete, nullptr) 그래서 스마트 포인터를 사용해서 자동으로 메모리 해제를 해서 메모리 관리의 효율성을 높힐 수 있다. Part1 12. 언리얼 엔진 메모리 관리UObject 선언 기본 원칙 언리얼 오브젝트 포인터 : UPROPERTY 선언 메모리 : 가지비컬렉터가 자동으로 관리하도록 위임 언리얼 엔진 자동 메모리 관리 C++ 메모리 관리 문제점 : 저수준으로 메모리 주ssin-estella.tistory.com이전 언리얼엔진의 가비지컬렉션과 비교하여 언리얼오브젝트가 아닌 c++오브젝..
15552번: 빠른 A+B첫 줄에 테스트케이스의 개수 T가 주어진다. T는 최대 1,000,000이다. 다음 T줄에는 각각 두 정수 A와 B가 주어진다. A와 B는 1 이상, 1,000 이하이다.www.acmicpc.net문제자체는 A+B를 출력하지만 하면 되는 단순한 문제이지만, 빠른 입출력이라니? 했다. cin, cout기본적으로 C++에서는 cin과 cout으로 입출력을 한다. 근데 문제에서는라고 친절하게 알려준다. cin.tie(NULL)이거 보자마자 든 생각 : C++은 nullptr아닌가? (맞다 nullptr가능) 기본적으로 입력과 출력은 연결되어있다. 즉, cin과 cout 스트림이 서로 연결되어있는데 이게 빠른 입출력이 필요한 상황에서 문제가 된다. 왜냐하면, cin과 cout처럼 엮여있..
언리얼 오브젝트 "패키지" = 다양한 오브젝트를 감싼 오브젝트 언리얼 오브젝트 패키지 저번 직렬화 를 통해서 '단일'언리얼 데이터를 저장했었다. 다양한 오브젝트를 저장하기 위해서, 그리고 다양한 데이터(복잡한 계층 구조)를 효과적으로 찾고 관리하기 위해 언리얼 오브젝트 패키지(UPackage)단위로 언리얼 오브젝트를 관리한다. (패키지는 이 외에도 최종 콘텐츠 프로그램, DLC와 같이 확장 콘텐츠에 사용되는 pkg파일등 다양하게 사용되는 단어이다.) 언리얼 오브젝트 패키지 & 애셋 언리얼오브젝트 패키지는 다수의 언리얼 오브젝트를 포함한다. = 모든 언리얼 오브젝트는 패키지에 소속되어 있다. 패키지 바로 하단에 위치한게 Asset 애셋 일반적으로 하나의 패키지에는 하나의 애셋만 저장하는 것을 원칙으로 한다..
직렬화 Serialization 오브젝트나 연결된 오브젝트의 묶음을 바이트 스트림으로 변경하는 과정. 복잡한 데이터를 일렬로 세워버린다.(복잡 → 간단) Object → Byte Stream : 직렬화 (Serialization), Byte Stream → Object : 역직렬화 (Deserialization) 즉, 직렬화로 복잡한 데이터를 간단하게 만들면, 데이터를 전송하거나 맞바꿀 때 1줄로 되어있는 간단한 바이트 스트림으로 변환하고 복구할 수 있다. 직렬화 장점 프로그램의 상태 저장, 복원 가능 (게임 세이브) 객체 정보를 클립보드에 복사해서 다른 프로그램으로 전송가능 네트워크를 통해 프로그램의 상태를 복원할 수 있음 (멀티게임에서 자주 사용) 직렬화된 데이터는 압축과 암호화를 통해서 데이터를 안..
UObject 선언 기본 원칙 언리얼 오브젝트 포인터 : UPROPERTY 선언 메모리 : 가지비컬렉터가 자동으로 관리하도록 위임 언리얼 엔진 자동 메모리 관리 C++ 메모리 관리 문제점 : 저수준으로 메모리 주소에 직접 접근하는 포인터 사용 포인터에 대한 new(할당), delete(해지)를 직접 해줘야함(안하면 이제..오류 투성이 됨) 근데 문제는 이걸 잘 못하면? 상당한 문제가 발생(프로그램 자체를 종료) 메모리 누수 : new하고 delete를 안해서 heap에 그대로 남아있음, 메모리 낭비 (도서관에 책빌리고 반납안함) 댕글링 포인터 (허상포인터) : 이미 delete된 주소를 가리키는 경우 (책반납했는데 책 찾고 있음) 와일드 포인터 : 포인터를 초기화되지 않아서 이상한 주소를 가리킴 C++에..
언리얼 구조체 UStruct : 관련 프로퍼티(변수)를 체계화, 조작할 수 있는 데이터 구조체 https://docs.unrealengine.com/5.3/ko/structs-in-unreal-engine/ 구조체 게임플레이 클래스용 구조체 생성 및 구현에 대한 레퍼런스입니다. docs.unrealengine.com 데이터 저장, 전송에 특화된 가벼운! 객체 하지만 UObject와는 전혀 다르다. 따라서, 프로젝트에서 복잡한 기능은 UObject로 만드는게 맞다. 대부분 GENERATED_BODY 매크로를 선언하게 되는데, 리플렉션, 직렬화 같은 유용 기능을 지원 GENERATED_BODY를 선언한 구조체는 UScriptStruct 클래스로 구현 (UStruct라고 안부르고, UScriptStruct) ..
언리얼 컨테이너 라이브러리 UCL 언리얼 엔진이 제공하는 자료구조 라이브러리(언리얼C++이니까~) 다양한 라이브러리가 있는데, 그중 TArray, TSet, TMap을 가장 유용하게 사용한다. (접두사 T는 Template의 T) C++ STL 언리얼 C++ UCL 1. 범용적 2. 호환성 3. 많은 기능이 있으서 컴파일이 오래 걸림 1. 언리얼 엔진에 특화 2. UObject를 안정적으로 지원 3. 가볍과 게임 제작에 최적화 TArray STL의 vector 처럼 가변 배열(동적배열) 자료구조 장점 데이터가 순차적으로 모여있어 메모리 효과적, 캐시 효율↑ (특히 컴퓨터 사양이 좋아져서 캐시 지역성으로 인한 성능 향상이 중요해졌다.) 임의 데이터 접근빠름(인덱스를 통해서, O(1)), 데이터 순회 가능 ..