일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 가상 바이트
- 벡터
- 메모리 누수
- Toon Shader
- Private Bytes
- Cell Look
- VR
- Specular
- URP로 변경
- 3d
- Cartoon Rendering
- 개인 바이트
- ColorGradingLutPass
- OculusMotionVectorPass
- 프로그래밍 기초
- URP
- Three(Two) Tone Shading
- AppSW
- Windows Build
- 작업 집합
- Cell Shader
- ASW(Application SpaceWarp)
- C언어
- 게임 수학
- Virtual Byte
- working set
- Rim Light
- Today
- Total
목록게임 프로그래밍(학습 내용 정리)/C++ (9)
WinCNT
템플릿(Template) 템플릿은 매개변수의 타입(의 타입)에 따라 함수나 클래스를 생성한다 (템플릿은 타입이 매개변수에 의해 표현되므로, 매개변수화 타입(parameterized type)이라고도 함) 템플릿을 사용하면 타입마다 별도의 함수나 클래스를 만들지 않고, 여러 타입에서 동작할 수 있는 단 하나의 함수나 클래스를 작성하는 것이 가능해진다 용어 정리 템플릿 메타프로그래밍(template metaprogramming) 템플릿을 사용하는 프로그래밍 기법으로, 컴파일러에게 프로그램 코드를 생성하도록 하는 방식이다. 이러한 기법은 컴파일 시점에 많은 것을 결정하도록 하여, 실행 시점의 계산을 줄여준다. 이 기법은 C++ 프로그래밍 언어에서 주로 사용된다. https://ko.wikipedia.org/w..
보호되어 있는 글입니다.
일반화 프로그래밍(Generic Programming) C#, JAVA에서는 Generic이라도 한다 특정 타입에 상관 없이 동작을 만든다 템플릿은 사용하는 것은 쉽고, 만드는 것은 어렵고, 모던 C++이 얽히면 읽는 것도 어려워진다... 어디에 필요할까? 대표적인 예로는 자료 구조를 만들 때 Linked List의 예 List의 대상이 되는 자료형마다 클래스를 만들어야 한다 (int의 Linked List, char의 Linked List 등등) 자료형에 무관하게 만들 순 없을까? => 일반화 프로그래밍으로 가능! Template의 예제 template T minimum(const T& lhs, const T& rhs) { return lhs < rhs ? lhs : rhs; } 템플릿 특수화, 명시적..
Has a이냐 Is a이냐... 다중 상속 장점 포함으로도 다중 상속과 같은 기능은 할 수 있다 상속이 포함보다 할 수 있는 것이 많음 계층도가 깔끔해지고 재정의도 가능하고 코드도 줄어든다 문제점 모호성, 위험성 새 + 말 = 페가소스 하지만 새에도 hp, 말에도 hp에도 있다면? 페가소스는 어느 hp를 가져야 하지? 죽음의 다이아몬드 하나의 클래스가 간접적으로 두 번 이상 동작됨 새도 동물, 말도 동물... 이를 해결하기 위해 virtual 키워드로 상속한다 다만, 그러면 virtual 테이블이 생겨서 관리하게 되는데 그로 인해 성능이 더 떨어질 수 있음 RTTI(Runtime Type Identification) 실행 중 객체의 타입(자료형)에 대해서 알 수 있는 매커니즘 문법적인 사용법으로는 dyn..
다형성을 쓰는 이유? 이동하는 개념은 같은데 실제로 수행하는 방법이 다르다 배열에다가 클래스의 포인터를 넣어서 수행을 했는데 실제로 수행하는 처리가 다르게 할 수 있음 메모리에서 부모를 new한 주소(포인터)나 자식와 new한 주소(포인터)는 같다 자식들은 부모의 포인터와 부모가 가진 변수 등의 가진 영역까지 같다 예를 들어 Draw()을 구현한다고 할 때... 다형성을 이용하면 같은 그리기 함수를 클래스별로 다르게 작동할 수 있다 다형적 동작을 하기 위해, 부모와 자식의 함수의 시그니쳐(함수의 모양)이 같다는 뜻이다 하지만 각각의 도형은 필요한 데이터(인자)가 다를 텐데... 예) 원 - 중점, 반지름, 사각형 - 네 점의 좌표 어떻게 해야 할까? 필요한 정보를 Information Class로 빼두고..
상속을 만든 이유 공통되는 부분을 모아서 부모 오브젝트로 묶음 그 부모 오브젝트를 상속함 상속을 하게 되면, 부모의 멤버를 사용 가능 (다이어그램에서는 자식이 부모를 가르킴) 복잡한 프로그램을 여러 명이서 문제 없이 프로그래밍하기 위해서 필요함 (doxygen) 상속 계층도(Hierachy) 설계하기 나름 어떤 것을 묶을 것인가 어떤 철학으로 접근할 것인가 프로그래밍 설계에 정답은 여러 개 존재하지만 잘못 설계한 것은 존재한다 Has - a 관계(포함) Is - a 관계(상속) 함수 재정의(Overriding) Method Overriding 동적 바인딩과 그것을 이용한 다형성(Subtype polymorphism) Abstraction(추상화) SSS
1. C에서의 동적메모리 할당 주된 함수 - malloc 단순히 메모리의 할당/해제만 해준다 객체(즉, 복잡한 대상)을 다루기에는 적합하지 않다 2. C++ - new/delete 키워드 - 포인터 동적할당 C++의 연산자, malloc을 대체하는 것이 new, free를 대체하는 것이 delete new와 delete는 연산자(즉, 오버로딩이 가능하다) 3. 생성자 / 소멸자 생성자, 소멸자, 복사 생성자, 대입 연산자 오버로딩 클래스를 완전하게 만들기 위해서 필요한 것들 예) 행렬끼리의 덧셈, 할 수는 있는데 그에 대한 연산을 프로그래머가 해야 한다 4. 이것저것 Uniform Init Field Init Delegate Constructor nullptr C에서는 0이지만, C++에서는 객체 thi..
클래스 구조체가 진화한 것이 클래스 (클래스도 네임스페이지 않을까...?) (C++)클래스의 특징 캡슐화/은닉화 C++에서의 구조체(Struct)와 클래스(Class)의 차이는? 디폴트의 접근 한정자가 다르다 왜 쓸까요? 자동차 운전 시, 운전자는 실제 부품들이 움직이는 것은 신경 안 쓰는 것처럼, 대부분은 숨기면서 필요한 것만 오픈하는 것처럼 데이터도 은닉함 특징 캡슐화 / 은닉화 캡슐화와 은닉화는 기본적으로 세트 캡슐화는 둘러싸는 것, 은닉화는 그로인해 숨겨지는 것 생성자 / 소멸자 int a를 선언하면 a라는 공간(4바이트)이 생긴다 마찬가지로 클래스로 객체를 생성, 즉 메모리의 공간을 잡을 때 호출되는 함수 소멸자는 동적 할당된 메모리의 공간을 해제하는 함수를 의미한다 변수의 수명과 유사한 면이 ..
Object Oriendted Programming 객체 지향 프로그래밍 C에서는 없는데 C++에는 있는 것 C에는 객체 지향 프로그래밍에 필요한 요소들이 없음(캡슐화, 상속 등등) 구조체에 함수를 추가할 수 있는 것도 그 차이의 쉬운 예 C의 문제점 데이터와 함수가 응집성을 갖추지 못 했다 사실상 전역 변수와 함수들로 이루어진 모듈 다른 프로그래머가 몰라도 되는, 몰라야 하는 부분을 숨길 수 없다(언어적으로) 상세 설명 데이터와 함수가 응집성을 갖추지 못 했다 데이터와 함수가 사실상 연관되는 부분이 없다 한 구조체에 대해서 작동하는 함수는 계속 그 구조체를 인자로 받아야 한다 예를 들어 횡스크롤 액션 게임에서 플레이어의 정보(위치 좌표, HP 등등)을 구조체에 보관했다고 가정하자. 그리고 그 플레이어는..