프로그래밍 언어/C++ 53

[게임 프로그래머 입문 올인원] 모던 C++ 스마트 포인터 : weak_ptr (84강)

A. 모던 C++ 스마트 포인터 2. weak_ptr a. weak_ptr이란? 🌟 shared_ptr의 순환 참조를 방지하기 위해 사용 객체를 소유하지 않고 참조만 할 수 있음 객체의 수명을 연장하지 않으므로, 객체가 소멸되더라도 weak_ptr은 만료 독립적이지 않고 shard_ptr에 의존적으로 사용됨 shard_ptr 카운트는 날려도 되는지 여부를 카운팅함 👉 shard_ptr이나 weak_ptr 둘 중 하나 골라서 사용하면 됨! shared_ptr을 사용할 때 사이클이 발생하는 부분에 대해서만 깔끔하게 처리해주면 된다 b. weak_ptr의 개념 캐스팅과 비슷, 널포인터이면 사용 X, 포인터이면 사용된다! 3. unique_ptr a. unique_ptr이란? 🌟 동적으로 할당된 메모리를 관리하..

[게임 프로그래머 입문 올인원] 모던 C++ 스마트 포인터 : shared_ptr (83강)

A. 모던 C++ 스마트 포인터 메모리 관리를 보다 효율적으로 처리하기 위해 사용 모두 헤더 파일에 정의 1. shared_ptr a. shared_ptr이란? 🌟 동적으로 할당된 메모리를 가리키는 포인터 여러 개의 shared_ptr이 같은 객체를 가리킬 때, 해당 객체는 참조 카운트(reference count)를 유지하며, 객체를 참조하는 shared_ptr의 수를 추적 객체를 참조하는 shared_ptr이 모두 소멸될 때, 객체가 자동으로 메모리에서 해제 순환 참조(circular reference)를 방지하기 위해 메모리 누수를 방지 스마트 포인터의 비중 99% 섞어쓰면 안되고 shard_ptr을 쓰면 계속 똑같이 써야 함 🧡 래퍼 포인터 이런 느낌이랑 비슷하게 사용한다 ➡ 스마트포인터가 있어서..

[게임 프로그래머 입문 올인원] 모던 C++ : 오른값 참조 (82강)

A. 모던 C++ 1. 오른값 참조 a. 오른값이란? 🌟 변수나 표현식이 임시로 생성되거나 값을 가지고 있는 객체인 경우를 가리키는 용어 C++의 이동(Move) 세마틱스와 관련 이동을 통해 자원 소유권을 효율적으로 이전함 효율적인 자원 관리와 더 나은 성능을 제공 b. 좌변값 VS 오른값 좌변값 L-value : 변수나 표현식이 메모리 주소를 가지며, 해당 주소에 값이 할당될 수 있는 객체 오른값 R-value : 할당될 수 있는 값을 가진 표현식 또는 객체. L-value가 아닌 나머지 주로 이동 가능한 객체가 취급됨 (임시 객체나, 리터럴 상수, 함수 호출의 반환 값) c. 이동 세마틱스 🌟 객체의 데이터나 자원을 복사하는 대신 이동(move)하여 성능을 향상시키는 기술 ➡ 임시 객체나 동적으로 할..

[게임 프로그래머 입문 올인원] 모던 C++ : 멀티바이트와 유니코드(81강)

A. 모던 C++ : 문자 인코딩 방식 1. 멀티바이트 a. 멀티바이트란? 🌟 문자를 여러 개의 바이트로 나타내는 문자 인코딩 방식 보통 1바이트에서 여러 바이트까지 다양한 길이로 표현 ASCII, ISO 8859, EUC-KR 등이 이 방식으로 표현됨 b. ASCII 🌟 American Standard Code for Information Interchange 7비트로 문자를 표현하는 인코딩 방식 128개의 문자를 포함(영문 알파벳, 숫자, 특수 문자 등) 👉 아스키코드 자세히 공부하기 [문자 표현의 이해] 아스키코드(ASCII)와 유니코드 💙 배경지식 컴퓨터 내부는 전기 신호로 작동하는 스위치인 트랜지스터가 존재 전기 신호가 있으면 1, 없으면 0 즉, 컴퓨터는 트랜지스터를 통해 사용자가 입력한 데이..

[게임 프로그래머 입문 올인원] 모던 C++ : std::string (80강)

A. 모던 C++ 1. std::string a. C 스타일의 문자열의 한계점 만약 아래와같이 같은 문자를 비교하는 코드를 작성한다면 또한 문자열을 복사하거나 수정하면 특정 함수를 사용해서 이용해야 함 ➡ 사용성이 안좋음 b. std::string 🌟 C++ 표준 라이브러리에서 제공하는 문자열 클래스 가변 길이 문자열: 문자열의 길이가 동적으로 조정되는 가변 길이의 문자열을 저장 문자열 조작: 문자열을 수정하고 조작하는 다양한 멤버 함수들을 제공. ex) 결합, 분할, 삽입, 제거, 변경 편리한 접근: 인덱스 기반 접근을 지원하여 특정 위치의 문자에 쉽게 접근가능 null 종료 문자열 아님: null 종료 문자열(null-terminated string)이 아니여서 문자열 안에 null 문자('\0')가..

[게임 프로그래머 입문 올인원] STL Algorithms : 기본정렬 (78강)

A. STL Algorithms : 기본 정렬 1. 기본 정렬의 기초 a. 기본 정렬이란? 🌟 디폴트 정렬(default sorting), 기본 정렬 알고리즘(default sorting algorithm)을 의미 std::sort 함수를 통해 수행 이 함수는 퀵 정렬(Quick Sort)을 기반으로 한 기본 정렬 알고리즘을 사용 STL의 정렬 알고리즘 중에서 가장 일반적으로 사용되는 정렬 방법 효율적인 성능을 제공 💥 하지만 데이터의 특성에 따라 다른 정렬 알고리즘을 사용하는 것이 더 효율적일 수도 있으므로 상황에 맞게 선택하여 사용 💙 게임에서 정렬이 필요한 경우 인벤토리의 정렬기능 자동사냥의 몬스터 정렬 즉, 그 순간에 정렬이 필요한 경우에 사용됨 (n log n 이라 자주사용하면 안됨) b. st..

[게임 프로그래머 입문 올인원] STL Algorithms : 람다식 (77강)

A. STL Algorithms 1. 람다식 a. 람다식이란? 🌟 익명 함수를 생성하는데 사용되는 간결한 문법 함수 객체를 만드는데 있어서 편의성과 가독성을 높여줌 함수나 함수 포인터가 필요한 곳에서 사용(우선순위 큐에서 predicate 넣어줄 때, 인벤토리 등 을 할때 사용) 주로 STL 알고리즘과 함께 사용되어 익명 함수를 표현하는 용도 C++11부터 도입 b. 기본 구문 HTML 삽입 미리보기할 수 없는 소스 [capture list] (parameters) -> return_type { // 함수 본문 } capture list: 람다식에서 사용되는 외부 변수를 캡처. 람다식 내부에서 외부 변수를 사용할 때, 이 변수들을 캡처해야 함 parameters: 람다 함수의 매개변수. 람다식 내에서 사..

[게임 프로그래머 입문 올인원] STL Algorithms : 기본 알고리즘(76강)

A. STL Algorithms 1. 찾기 a. find ➡ 성능상 동일하지만 읽기 더 쉽다 💙 namespace 🌟 이름이 안겹치도록 나만의 이름을 만들어서 모든 결과물을 넣는 방법 b. find_if 대부분의 순회하는 코드는 비슷하고 안 내용물만 조금 바뀜 2. 카운팅하기 a. count_if b. 나머지 함수들 3. 모두 접근하기 a.for_each 전체를 대상으로 할때 자주 사용 곱셈 뿐만 아니라 모든것에 대해 실행해야 하는 코드일 때 주로 사용한다 4. 제거하기 a. remove_if remove_if는 남겨야하는 아이들을 앞으로 빼고 (짝수인애들) 나머지 데이터를 삭제하지 않고 뒤로 둔다 ➡ 반환값은 iterator로 반환되는데 삭제되는 데이터부터 남겨줌 🧡 람다의 필요성 위 코드들처럼 계속 ..

[게임 프로그래머 입문 올인원] C++11 (Modern C++) 2 : range-based for(69강)

A. Modern C++ 2. range-based for 루프 a. range-based for란? 🌟 컨테이너나 배열과 같은 시퀀스 데이터 구조를 순회할 때 사용하는 반복문 데이터를 추가, 삭제하는건 어려움 반복자나 인덱스를 명시적으로 다루는 번거로움을 줄이고 코드의 가독성을 높임 HTML 삽입 미리보기할 수 없는 소스 for (변수의 타입 변수명 : 컨테이너 또는 배열) { // 반복 실행될 코드 } //변수의 타입은 컨테이너나 배열의 요소 타입과 일치 //코드 블록 내부에서 변수명은 각 요소에 대한 참조, // 변수명은 루프 내에서 사용되며, 각 요소에 대한 작업을 수행하는 데 사용 HTML 삽입 미리보기할 수 없는 소스 #include #include int main() { std::vector..

[게임 프로그래머 입문 올인원] C++11 (Modern C++) 1 : auto (68강)

A. Modern C++ 1. auto 키워드 a. auto란? 🌟 변수의 타입을 컴파일러가 자동으로 추론(type deduction)해 결정하도록 하는 기능 코드를 간결하게 작성하고 유지보수성을 높여줌 다른 키워드 (int, double..) 보다 빠르지도 느리지도 않음 💥 너무 남발하여 사용할 경우 가독성을 해치거나 의도하지 않은 타입 추론으로 인한 오류를 발생 템플릿과 auto가 사용하는 뿌리가 같음 주로 iterator를 사용할 떄 사용 (타이핑 귀찮음) 💙 타입 추론 변수의 타입을 컴파일러가 자동으로 추론하는 과정 HTML 삽입 미리보기할 수 없는 소스 #include #include int main() { // int 타입 변수의 선언 int x = 5; // auto를 사용하여 변수의 타입을..