전체 글158 5. STL : 재귀함수에 대해서 재귀함수재귀는 대표적인 ‘분할 정복’ 알고리즘 이다.K번쨰 블록이 반드시 쓰러진다는 사실을 증명하시오수학적 귀납법(Mathematical Induction) - 한 조건으로 확정된 상황을 바탕으로 진행.첫번째 블록은 반드시 쓰러진다.첫번쨰 블록이 쓰러지면 두번째 블록도 반드시 쓰러진다.(k-1)번째 블록이 쓰러지면 k번째 블록도 반드시 쓰러진다.재귀적 알고리즘(Recursive Algorithm) - 메모리 스택을 씀.수학적 귀납법의 순서를 역순으로 증명.분할 정복 :큰 문제를 작은 문제로 환원 / 작은 문제 역시 큰문제와 유사.아주 작은 문제는 반드시 해결됨( = base case)반드시 베이스 케이스에 도달해야 함.팩토리얼, 문자열 뒤집기, 카운트 다운, 피보나치수열, 하노이 탑, 이진 탐색, 게임 .. 2024. 12. 7. 4. STL : Call by value, Ref, Address & 배열과 포인터에 관련해서. 배열과 포인터포인터 : 메모리에 저장된 다른 값의 메모리 주소를 저장하는 변수배열 : 이름은 주소(사실은 주소임)포인터 변수 선언 : Type *var_name;(int *ptr; → 인티저 값을 가르키는 포인터 변수.)포인터 사용 : 다른 변수의 주소를 참조하여 사용가능. 동적 메모리 할당가능. → 함수도 주소이므로 사용가능.- 주소할당.int a = 100;int p = &a; - 동적메모리 할당.int *p = null;p = new int ; // 동적 메모리 할당. *p = 500; //p가 가르키는 해당 공간에 500이라는 값을 저장해라.delete p; // 메모리 해제(안하면 누수 ^^7)Call by value & Call by address & Call by Refvalue : 인수가 .. 2024. 12. 7. 3. STL : 클래스 상속에 관하여. 1. 클래스 상속(객체지향 방법론)객체와 메세지클래스 : 붕어빵 틀객체 : 붕어빵 실물 (메시지를 보내거나 받는 대리인(클래스에 의해서 만들어진 실물))메세지(함수) → 윈도우 프로그래밍에서는 주로 이벤트이다.즉, 객체가 처리해야할 일을 전달하는 것.(그냥 함수임)정보은닉 : 실제 처리되는 과정과 내용이 숨겨져 있다.정리)클래스 : 프로그래머가 정의한 자료형객체 : 클래스 타입으로 선언하여 메모리에 할당 된 것.인터페이스 파일(헤더)객체를 추상화한 파일외부 사용자를 위한 파일클래스, 메시지(가상함수)가 정의된 파일 - 참고로 변수는 없음.외부사용자는 세부구현 내용을 몰라도 이 파일만 읽고 불러서 사용 가능.구현 파일(소스 파일)인터페이스 파일에 정의된 메시지(함수)를 구현한 파일내부 구현자가 작성한 파일.. 2024. 12. 7. 2. STL : 추상화에 관해서. 1. 추상화세부적인 것들을 다 빼고서 일반화를 시키는 것(부품을 뺴고 큰것들만 남기기)장점 : 재사용이 쉬워짐.언리얼에서 AActor → Chracter클래스로 상속 받는 거처럼 생각하면 됨.객체 단위로 프로그램을 짜게 만드는 요인.1-1 추상자료형기능의 세부구현 내용은 나타내지 않음.기능이 어떤 형태인지만 나타냄.세부구현 내용은 몰라도 사용가능.단, 개발자는 세부 구현 내용은 알고 있어야 함.C++에서는 header 파일에 클래스나 함수등을 선언해서 추상 자료형을 나타냄.실제 세부기능은 cpp파일에서 구현됨.1-2 추상자료형과 C++사용과 구현을 분리.추상 자료형은 헤더세부기능은 cpp사용자에게는 구현방법이 숨겨져 있어서 보이지 않음.추상 자료형 선언 = 클래스 or 구조체 선언추상 자료형 작업 = 객.. 2024. 12. 7. 1. 자료구조 전 기초 상식(?) 객체지향 프로그래밍 OOP클래스는 Define하기 위해 만드는 객체이다.엔진들은 모두 모듈화(상속이 되어있다.)프로그래밍 동작 순서하드 → 메모리(용량 큼) 속도 조금 느림 → 레지스터(용량 작음) 속도 빠름 → CPU선언파일(h), 구현파일(cpp)차이점헤더파일은 이름같은거 정의 할때 선언(public, protected, private으로 공개 범위 적용)구현파일은 헤더파일을 가지고 오거나 해당 변수를 이용하여 기능을 구현.변수(*메모리에 공간을 할당하는 것은 운영체제가 해줌.) 빌트인 타입, 유저인 타입(*클래스도 마찬가지임)즉, 메모리 공간하면, 구조를 생각 후 → 객체를 생각해줘야 한다.유저 디파인 타입 : 구조체 타입을 사용하여 만들어야 함(예시 : 캐릭터가 가질 수 있는 속성들을 보관.)변수.. 2024. 12. 7. 군대에서 코딩 공부하는 법, replit Online IDE *해당 글은 광고가 아닙니다. 또한 매우 주관적이며, 제가 사용했을 때 편했던 것을 위주로 글을 작성했습니다. 필자인 저는 현재 군 복무중에 있습니다.대략 1년전 2022년 12월 19일에 입대를 해서 현재11월 1일에는 상병 3호봉을 달고서 앞으로 전역까지 대략 7개월 남짓 남은 상태입니다. 나름대로 전산병(기술 행정병)으로 근무를 하면서 분대장까지 달고,아래 후임까지 달게 된 요즘, 이제 슬슬 사회로 돌아가기 전에기존에 했던 개발 실력들을 다시 키워야겠다는 생각이 들기 시작하니... 프로그래밍을 사지방에서 하려고 하는데군대에서는 컴파일이 가능한 컴퓨터가 따로 정해져있고 이를 어겨일반 인트라넷이나 사지방 인터넷망 PC에 컴파일러를 설치하는 행위는 엄연하게 징계사유입니다.(물론 사지방 같은 경우는 아예 .. 2024. 12. 5. 3. 언리얼 엔진 싱글케스트 델리게이트 기초 사실 나는 델리게이트에 대해서 잘 모른다.C#을 해본거도 아니고, 언리얼에서 함수 다룰때도 완전 초보식으로 다루기도 했고.... 그래서 이 김에 한번 언리얼 싱글케스트 델리게이트를 공부한 내용들을 정리해보려고 한다.(약간 틀릴 수도 있다.) 일단, 포인터는 런타임에 지정이 가능하다.그리고 가리키는 메모리 주소를 바꿀수 있다는 점도 유용하다. 표준타입 외에 함수에 대해서도 포인터를 생성이 가능하지만,여러가지 이유로 안전하지 않다고 한다. 그래서 이것 때문에 언리얼 엔진에서는 델리게이트를 쓴다고... 일단 델리게이트는 훨씬 안전한 함수 포인터라고 한다. 어떤 함수가 할당되는지 그 함수가 호출되는 순간까지 알지 못하는 상태에서미꾸라지마냥 유연하게 함수를 호출 할 수 있다고 한다. 이런 유연함이 델리게이트를 선.. 2024. 12. 5. 2. 언리얼 엔진의 메모리 관리에 대해서 *해당 글은 공부용으로, C++를 사용한 언리얼 엔진 4개발 2/e의 내용이 다수 포함 되었습니다. 이번에 언리얼 엔진의 메모리 관리에 대해서 한번 알아보겠다. 일단 기본적으로 언리얼은 C++을 사용중인다. 때문에 C에서 사용하던 malloc과 free보다는 new와 delete를 사용하는게 원칙이다.(사실 원칙이라기 보다는 권장이다.) new 연산자는 메모리 할당후 오브젝트가 생성된 직후에 생성자를 호출한다.하지만 malloc에서는 이것이 되지 않는다. (물론 다른 기능들 자체는 malloc과 거의 동일.) 그리고 무조건 new 연산자를 사용하여 동적할당을 했다면, free()가 아닌 delete로 동적할당을 해제해야한다. 아무튼 new는 사용할 연속적인 메모리 공간을 할당하고,생성자를 new연산자의 .. 2024. 12. 5. 1. 언리얼 엔진 핫 리로딩에 관하여 언리얼 엔진에는 핫 리로딩이라는 기능이 있다. 주로 언리얼 엔진 C++ 프로젝트를 생성했을 때 IDE, 즉 비주얼 스튜디오,또는 Rider와 언리얼 엔진 4,5가 동시에 열린 모습을 봤을 것인데, 이번에는 스크립트를 수정하며코드를 컴파일 해서 변화를 한번 살펴보려고 한다. 나 같은 경우에는 언리얼 엔진 5.4.3 버전을 사용하고 있고, 깃허브 소스코드를 통해 Fork를 하여 개인 레포지토리에서 클론하여 설치하고 사용중이다.깃허브 소스코드 설치 방법은 추후 다시 다루겠다. 일단 클래스를 생성을 먼저 해야하므로 언리얼 엔진 에디터에서 C++ 클래스를 생성해준다. 나는 현재 개발중인 프로젝트에서 따로 컴포넌트를 통해 분리할 플레이어 이동 기능을 구현하기 위해서,ActorComponent 클래스를 사용하여 .. 2024. 12. 5. 6. C++ string 타입에 대해서 1. String 타입string은 문자열의 모음이라고 할수 있다.#include using std::string;가변길이 문자열이며, 해당 string타입을 사용하려면이렇게 string 헤더를 사용하여야 한다.(참고로 string은 std::string에 정의 되어 있다.)string s1; // string의 기본 초기화. s1은 빈문자열이다.string s2 = s1; //s2는 s1의 복사본이다.string s3 = "hiya"; //s3는 문자열의 복사본이다.string s4(10,'c'); //s4는 cccccccccc(c가 10개)라는 뜻.위에 코드 마다 주석에 달린 내용으로 사용법을 대략 알수 있겠지만,보다시피 초기화를 하는 방법이 두 가지이다.1-1. string의 직접초기화.. 2024. 12. 5. 5. C++ auto & decltype에 대해서. 1. auto 타입 지정자auto는 컴파일러에서 초기값으로 타입을 추론하고 타입을 결정짓는 타입이다.즉, 쉽게 이야기 하자면 해당 객체의 타입을 컴파일러가 알아서 결정해줌.-> 때문에 무조건 auto 같은 경우에는 선언 시에 초기값이 있어야 한다.auto item = val1 + val2; //item은 val1 + val2을 이용해 타입을 추론해 초기화.만약 item 변수를 함수가 호출해서 사용할 때 호출값이 double형(소수점)이면, auto는 double로,int형(정수)라면 int형으로 초기화 시킨다.다만 여기에는 약간의 제약이 있는데...auto i = 0, *p = &i; //i는 int, p는 int에 대한 포인터로 추론될 예정이다.auto s2 = 0, pi = 3.14; //err.. 2024. 12. 5. 4. C++ Typedef(타입 별칭)에 대해서 1. 타입 별칭이란?다른 타입과 동의어인 이름 -> 복잡한 정의를 더 간단하게 바꿔줌.자료형을 다른 이름으로 재정의 한다고 생각하면 된다.* 전통적인 typedef 별칭 선언typedef double wages; // wages는 double과 동일어.typedef wages base, *p // base는 double, p는 double*이다. 위에 코드 예시를 보면 첫번쨰 줄에서는 동의어를 선언,아래는 위에 만든 동의어를 이용해서 다시한번 동의어를 만들며포인터를 만드는 방식으로 응용을 한 것이다. 즉, typedef로 동의어를 선언할 때 typedef가 맨 앞에,그 뒤에 타입(int, double, char등등..) 마지막으로 동의어 이름을 지정하면 된다. 어떻게 보면 typedef 키워드는 선언.. 2024. 12. 5. 이전 1 2 3 4 5 ··· 14 다음 more