전체 글

1. .NET Framework의 이해win32 프로그램 (exe 파일 등) 👉 운영체제 : 운영체제에 바로 종속됨.Net 프로그램 👉 CLR(Common Language Runtime) 👉 운영체제 : CLR이 운영체제와 대응을 해주기 때문에 운영체제에 상관없다. 2. C# 언어 컴파일 과정C# 코딩 👉 컴파일 👉 .NET Framework 👉 실행프로그래머가 신경써줘야 하는 부분(VS) 3. C# 언어/프로그래밍- C++에서 파생된 객체 지향 언어- 형식 안정성- 메모리 관리가 쉽다 : 가비지 컬렉터(garbage collector)- 다양한 라이브러리 지원 ✨ static void Main- 가장 중요한 메서드- 최초의 진입점- 메인 메서드가 반드시 존재- Main 함수의 형태는 다양하다.
1. KMP 알고리즘패턴을 문장 안에서 좌에서 우로 비교하는 것. 브루트-포스 알고리즘과 다르게 패턴의 위치를 좀더 효율적으로 이동시킨다. 패턴과 문장의 불일치가 발생했을 때 중복연산을 최대한 피하면서 패턴을 우측으로 이동시킨다. 이를 위해서는 문장의 불일치 발생 시, 얼마만큼 건너 뚜니 후에 비교연산을 할 것인가를 판단하여야 한다. 2. 실패함수(파이 배열)KMP 알고리즘에서 탐색 문자열의 접두사와 접미사의 일치 부분을 계산하여 배열의 형태로 저장하는 함수i는 접미사 가리키는 인덱스, len은 접두사 가리키는 인덱스7번째 : 6번째에 len=2, i=5일 때, A가 이미 일치했던 사실을 알기 때문에 이를 이용하기 위해 len은 lps[len-1]로 이동하는 것. 이는 KMP 알고리즘 원리와 동일하다.노..
1. 라빈-카프 알고리즘라빈-카프 알고리즘은 문자열에 해싱 기법을 사용하여 해시 값으로 비교하는 알고리즘 해시 값이 다르다면 두 문자열이 다르다는 것을 보장한다. 하지만 문자열이 달라도 해시 값이 같을 수 있다.👉 우리는 이것을 Spurious Hit이라 한다.Spurious Hit 때문에 해시 값이 같을 경우 추가로 문자열이 같은지 비교하는 작업이 필요하다. 이 특징을 이용하여 라빈-카프 알고리즘은 패턴의 해시값을 텍스트의 부분 문자열의 해시값과 일치하는지 비교하는 작업을 한다. 따라서 라빈-카프 알고리즘은 다음 문자열에 대한 해시 값을 계산해야 한다.길이가 m인 패턴 자체길이가 m인 텍스트의 모든 부분 문자열 2. 해시 함수사용 예시🟩 rolling hash각 위치에서 해시 함수를 처음부터 다시 ..
1. 완전탐색 알고리즘즉, 가능한 모든 경우의 수를 모두 탐색하면서 요구조건에 충족되는 결과만을 가져온다.이 알고리즘의 강력한 점은 예외 없이 100% 확률로 정답만을 출력한다. BUT 그만큼 높은 시간 복잡도를 갖는다.너비 우선 탐색(BFS)와 관련이 깊다. 🌟 완전 탐색 알고리즘과의 차이점완전 탐색 알고리즘 : 모든 경우의 수를 전부 탐색하는 알고리즘, 그 결과를 찾는 것보다 탐색한다는 과정에 중점브루트포스 알고리즘 : 문제를 해결하기 위해, 모든 경우를 탐색하고 답을 도출하는 알고리즘, 결과를 찾는 것에 중점 2. 문제 해결 방법주어진 문제를 선형 구조로 구조화한다.구조화된 문제 공간을 적절한 방법으로 해를 구성할 때까지 탐색한다.구성된 해를 정리한다. 3. 사용 조건 및 예제문제에서 달성하고자 ..
1. 단축키 정리카메라 전후 이동, 좌우 회전좌클릭 + 드래그마우스 임의의 버튼 + WASD 카메라 상하 이동마우스 임의의 버튼 + Q/E 카메라 회전우클릭 + 드래그오브젝트가 선택된 상태에서 Alt + 좌클릭 + 드래그 상하좌우 이동가운데 버튼오브젝트가 선택된 상태에서 Alt + 가운데 버튼 + 드래그alt를 누르지 않음 : world 축 기준으로 이동 = 하늘을 바라봄alt를 누름 : 카메라를 기준으로 이동 콘텐츠 브라우저 열기ctrl + space bar 카메라 포커스 정렬오브젝트가 선택된 상태에서 F 카메라 확대 축소오브젝트가 선택된 상태에서 Alt + 우클릭 + 드래그 트랜스폼 툴이동 W회전 E스케일 R 아래로 정렬오브젝트가 선택된 상태에서 End 2. 모델링 수정 수정하기 전에 에셋을 백업해두..
1. 언리얼 엔진의 자동 메모리 관리🌟 C++ 언어 메모리 관리의 문제점C++은 저수준으로 메모리 주소에 직접 접근하는 포인터를 사용해 오브젝트를 관리한다.그러다보니 프로그래머가 직접 할당(new)와 해지(delete) 짝 맞추기를 해야한다.이를 잘 지키지 못하는 경우 다양한 문제가 발생할 수 있음잘못된 포인터 사용 예시메모리 누수 : new를 했는데 delete 짝을 맞추지 못함. 힙에 메모리가 그대로 남아있는 경우허상 포인터 : 다른 곳에서 이미 해제해 무효화된 오브젝트의 주소를 가리키는 포인터와일드 포인터 : 값이 초기화되지 않아 엉뚱한 주소를 가리키는 포인터잘못된 포인터 값은 다양한 문제를 일으키며, 한 번의 실수는 프로그램을 종료시킴게임 규모가 커지고 구조가 복잡해질수록 프로그래머가 실수할 확..
✨ 변수명 수정수정하고 싶은 변수명에 마우스를 대고 ctrl + r + r ✨ 자동 정렬ctrl + a 👉 k 👉 f
🍧 1. 언리얼 구조체데이터 저장/전송에 특화된 가벼운 객체대부분 GENERATED_BODY 매크로를 선언해준다.리플렉션, 직렬화와 같은 유용한 기능을 지원함GENERATED_BODY를 선언한 구조체는 UScriptStruct 클래스로 구현됨이 경우 제한적으로 리플렉션을 지원함 👉 속성 UPROPERTY만 선언할 수 있고 함수 UFUNCTION은 선언할 수 없음언리얼 엔진의 구조체 이름은 F로 시작함대부분 힙 메모리 할당(포인터 연산)없이 스택 내 데이터로 사용됨NewObjectAPI를 사용할 수 없음 🌟 리플렉션 관련 계층 구조언리얼에서는 구조체와 클래스가 구조, 사용법이 다르다. 🌟 MyGameInstance(h, cpp)// Fill out your copyright notice in the..
🟩 언리얼 컨테이너 라이브러리언리얼 엔진이 자체 제작해 제공하는 자료구조 라이브러리줄여서 UCL(Unreal Container Library)라고도 함언리얼 오브젝트를 안정적으로 지원하며 다수 오브젝트 처리에 유용하게 사용됨언리얼 C++은 다양한 자료구조 라이브러리를 직접 만들어 제공하고 있음실제 게임 제작에 유용하게 사용되는 라이브러리로 세 가지를 추천함 👉 TArray, TMap, TSet (T=템플릿) 🟩 C++ STL과 언리얼 컨테이너 라이브러리의 차이점C++ STL은 범용적으로 설계되어 있다.C++ STL은 표준이기 때문에 호환성이 높다.C++ STL은 많은 기능이 엮여 있어 컴파일 시간이 오래 걸림언리얼 컨테이너 라이브러리는 언리얼 엔진에 특화되어 있음언리얼 컨테이너 라이브러리는 언리얼 ..
🌟 강한 결합클래스들이 서로 의존성을 가지는 경우Card가 없는 경우 Person이 만들어질 수 없는 경우 👉 이 때 Person은 Card에 대한 의존성을 가진다고 한다.핸드폰에서도 인증할 수 있는 새로운 카드가 도입된다면?🌟 느슨한 결합실물에 의존하지 말고 추상적 설계에 의존하라 (DIP 원칙)왜 Person은 Card가 필요한가? 출입을 확인해야 하기 때문출입에 관련된 추상적인 설계에 의존하자.ICheck를 상속받은 새로운 카드 인터페이스를 선언해 해결이러한 느슨한 결합 구조는 유지 보수를 손쉽게 해줌🟩 느슨한 결합의 간편한 구현 - 델리게이트함수를 오브젝트처럼 관리하면 어떨까? 🌟 함수를 다루는 방법함수 포인터를 활용한 콜백 함수 구현가능은 하나 이를 정의하고 사용하는 과정이 꽤나 복잡함..
🟩 컴포지션객체 지향 설계에서 상속이 가진 Is-A 관계만 의존해서는 설계와 유지보수가 어려움컴포지션은 객체 지향 설계에서 Has-A 관계를 구현하는 설계 방법컴포지션의 활용 : 복합적인 기능을 거대한 클래스를 효과적으로 설계하는데 유용하게 사용할 수 있음🌟 SOLID (좋은 객체지향 설계 패턴을 제작하기 위한 모던 객체 설계 기법)단일 책임 원칙 Single Responsibility Principle : 하나의 객체는 하나의 의무만 가지도록 설계한다.개방 페쇄 원칙 Open-Closed Principle : 기존에 구현된 코드를 변경하지 않으면서 새로운 기능을 추가할 수 있도록 설계한다.리스코프 치환 원칙 Liskov Substitution Principle : 자식 객체를 부모 객체로 변경해도 ..
🟩 인터페이스객체가 반드시 구현해야 할 행동을 지정하는데 활용되는 타입다형성의 구현, 의존성이 분리된 설계에 유용하게 활용 🌟 특징1. 인터페이스를 생성하면 두 개의 클래스가 생성됨U로 시작하는 타입 클래스 : 클래스 타입 정보 제공I로 시작하는 인터페이스 클래스 : 실질적인 설계 및 구현2. 객체를 설계할 때 I 인터페이스를 사용U 타입 클래스 정보는 런타임에서 인터페이스 구현 여부를 파악하는 용도로 사용됨실제로 U 타입 클래스에서 작업할 일은 없음인터페이스에 관련된 구성 및 구현은 I 인터페이스 클래스에서 진행3. C++ 인터페이스의 특징추상 타입으로만 선언할 수 있는 Java, C#과 달리 언리얼은 인터페이스에도 구현이 가능함 🌟 언리얼 엔진에서 게임 컨텐츠를 구성하는 오브젝트의 설계 예시월드..
peewoong
peewoong.log