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

STL 기초

A. STL 1. STL 개요 a. STL이란 🌟 표준 C++ 라이브러리 (Standard Template Library) 프로그램에 필요한 자료구조와 알고리즘을 Template로 제공하는 라이브러리 프로그래머가 쉽고 효율적으로 흐로그램을 작성할 수 있게 도움 b. STL의 구성요소 1) 컨테이너 Container : 데이터를 저장하는 자료구조. 벡터, 리스트, 맵, 큐, 스택 등 제공 시퀀스 컨테이너 : 선형 자료구조 연관 컨테이너 : 비선형 자료구조 2) 반복자 Iterator : 컨테이너의 요소를 반복하는데 사용. 접근을 추상화 해 일관된 방법으로 처리 3) 알고리즘 Algorithm : 정렬, 검색, 변환 등 다양한 작업을 수행하는 함수를 제공. 컨테이너와 반복자를 대상으로 작동 4) Functi..

[게임 프로그래머 입문 올인원] 템플릿 문법 (52강)

A. 템플릿 문법 1. 템플릿 문법 a. 템플릿이란? 🌟 함수나 클래스를 작성할 때 특정한 데이터 타입에 의존하지 않고 유연하게 작성할 수 있게 하는 것 제네릭 프로그래밍을 지원하기 위한 강력한 언어 특징 코드의 재사용성을 높이고 일반화된 알고리즘을 작성하는데 도움 👉 런타임 X 컴파일할때 모든것이 다 결정되고 사용됨 사용하지 않으면 컴파일시 존재조차 만들어지지 않음 = 오류나지 않음 템플릿은 두 가지 주요 형태로 사용 함수 템플릿 클래스 템플릿 C#의 제네릭이랑 비슷하지만 기능이 더 많고 어렵다 (거의 흑마법) b. 함수 템플릿 1) 정의 🌟 함수의 데이터 타입을 일반화하여 함수를 선언하고 정의 다양한 데이터 타입에 대해 동일한 코드를 재사용할 수 있게 함 HTML 삽입 미리보기할 수 없는 소스 tem..

[게임 프로그래머 입문 올인원] 동적할당과 캐스팅 : 버그 유형과 디버깅 연습/답안 (43, 44강)

A. 버그 유형 1. 버그 유형의 종류 a. Null 크러쉬 (95%) 🌟 없는 객체에 대한 데이터 변형이 일어날 경우 둘 다 크러쉬가 나는 코드, 왼쪽 p 포인터만 봐도 0x000000... 로 나옴 b. 정수 오버플로우(언더플로우) (0.001%) 🌟 범위를 초과해 저장하면 일어나는 경우 이렇게 범위를 초과해서 저장하게 되면 음수값이 저장됨 마치 옛날 문명 간디처럼,, 갑자기 폭군이 된다 c. 메모리 릭 (0.1%) 🌟 메모리를 만들었는데 해제하지 않아서 일어나는 경우 나중에 덤프로 코드를 분석하면 돼 (몇시간 뒤 서버가 다운될지 나옴) 그나마 괜찮은? 버그 d. 메모리 오염 1) 캐스팅 🌟 가장 빈번, 잘못된 객체로 캐스팅 된 경우 2) 버퍼 오버플로우 🌟 할당한 값 보다 더 큰 메모리 공간을 사용..

[게임 프로그래머 입문 올인원] 동적할당과 캐스팅 : 전방 선언 (40강)

A. 전방 선언(Forward Declaration) 1. 전방 선언 a. 전방 선언이란? 🌟 컴파일러에게 식별자(함수, 클래스, 변수 등)가 미리 선언되어 있다고 알려주는 것 C++ 및 다른 프로그래밍 언어에서 사용되는 중요한 개념 중 하나 헤더 파일의 사용을 최소화하고 코드를 더 효율적으로 구성하는 데 도움 b. 전방 선언의 목적 순환 참조(Circular Dependency) 문제를 해결하고 헤더 파일의 의존성을 최소화하는 데 사용 컴파일 속도를 향상시키고 중복된 코드를 방지하는 데도 도움 특히 대규모 프로젝트에서 중요한 역할 👉 즉, 무거워지고 꼬이기때문에 사용하는 것 💥 순환 참조의 컴파일 오류 순환 참조는 서로에 대한 헤더 파일을 포함하거나 의존하는 경우 발생할 수 있으며, 이로 인해 컴파일 ..

[게임 프로그래머 입문 올인원] 동적할당과 캐스팅 : C 스타일 캐스팅 과 캐스팅 4총사(37강, 42강)

A. C 스타일 캐스팅 (37강) 1. 일반적인 타입 변환 a. 값 타입 변환 🌟 의미를 유지하기 위해서 원본 객체와 다른 비트열 재구성 a와 b는 완전히 다른 주소값이 들어가게 됨 (원본 객체와 다른 비트열 재구성) b. 참조 타입 변환 이렇게되면 이상한 값이 b에 들어가는데, 이유는 123456789의 주소값을(a) float& 형태로 변환하다보니 이상한 값으로 변환된것 평생 쓸 일 없음 c. 안전한 변환 의미가 100% 일치하는 경우 작은 메모리 ➡ 큰 메모리로 옮기는 경우 d. 불안전한 변환 의미가 일치하지 않는 경우 큰 메모리 ➡ 작은 메모리로 옮기는 경우 e. 암시적 변환 컴파일러가 알아서 변환해주는 것 2. 포인터끼리 캐스팅(클래스) a. 참조가 되지 않은 클래스끼리 캐스팅 포인터끼리의 변환..

[게임 프로그래머 입문 올인원] 동적할당과 캐스팅 : 동적할당 기초 (35강)

A. 동적할당 기초 1. 컴퓨터 이해하기 a. 동적 할당의 필요성 만약 MMORPG 게임을 만든다고 하고 몬스터를 50만 마리를 생성해야 한다고 할 때 stack 영역에 몬스터 객체를 많이 생성하게 되면 공간이 부족해지고, 메모리 영역에 할당하면 계속 그 메모리를 가지고 가야한다는 부담이 생김 b. 동적할당이란? 🌟 실시간으로 메모리를 할당받아서 사용하는 것 유저 영역 : 사용자가 사용하는 동작하는 프로그램 커널 영역 : 운영체제가 돌아가는 영역 유저 영역에서 메모리를 실시간으로 요청 ➡ 커널 영역이 더 많은 공간을 할당 c. 메모리 동적 할당하는 2가지 방법 1) malloc + free 🌟 malloc함수로 heap 영역에 공간을 할당해줌 / free는 반대 개념 C에서 등장한 개념 할당된 공간의 주..

C++ OPP 3대요소 : 다형성

C. OPP 다형성 1. 가상 함수 a. 가상 함수(virtual function) 🌟 파생 클래스에서 재정의할 것으로 기대하는 멤버 함수 자신을 호출하는 객체의 동적 타입에 따라 실제 호출할 함수가 결정 HTML 삽입 미리보기할 수 없는 소스 virtual 멤버함수의원형; 기초 클래스에서 virtual 키워드를 사용해 선언하면, 파생 클래스에서 재정의된 멤버 함수도 자동으로 가상 함수가 됨 👉 파생 클래스에서도 virtual 키워드를 사용해 가상함수라는것을 명확히 하는 것도 나쁘지 않음! b. 동적 바인딩(dynamic binding) 🌟 바인딩(binding) : 함수를 호출하는 코드에서 어느 블록에 있는 함수를 실행하라는 의미 C++에서는 함수가 오버로딩될 수 있으므로 이 작업이 조금 복잡 정적 바..

C++ OPP 3대요소 : 상속성

B. OPP 상속성 1. 파생 클래스 a. 상속(inheritance) 추상화, 캡슐화와 더불어 객체 지향 프로그래밍을 구성하는 중요한 특징 중 하나 사용자에게 높은 수준의 코드 재활용성을 제공하며, 클래스 간의 계층적 관계를 구성함으로써 다형성의 문법적 토대를 마련 b. 클래스 상속(class inheritance) 🌟 기존에 정의되어 있는 클래스의 모든 멤버 변수와 멤버 함수를 물려받아, 새로운 클래스를 작성하는 것을 의미 기존에 정의되어 있던 클래스 : 기초 클래스(base class), 부모 클래스(parent class), 상위 클래스(super class) 상속을 통해 새롭게 작성되는 클래스 : 파생 클래스(derived class), 자식 클래스(child class), 하위 클래스(sub ..

C++ OPP 3대요소 : 캡슐화

A. OPP 캡슐화 1. 프렌드 a. 프렌드란? C++에서는 객체의 private 멤버는 해당 객체의 public 멤버 함수를 통해서만 접근 가능함 하지만 경우에 따라서 해당 객체의 멤버 한수가 아니여도 private 멤버에 접근해야만 할 경우가 생김 💥 이럴때마다 매번 새로운 public 함수를 작성하는건 비효율적 따라서 friend라는 새로운 접근 제어 키워드를 제공해 🌟 지정한 대상에 한해 해당 객체의 모든 멤버에 접근할 수 있는 권한을 부여해줌 ➡ 전역함수, 클래스, 멤버 함수의 세 가지 형태로 사용가능 b. 프렌드 함수 선언 HTML 삽입 미리보기할 수 없는 소스 friend 클래스이름 함수이름(매개변수목록); 위 프렌드 함수는 클래스 선언부에 원형이 포함되지만, 클래스의 멤버 함수는 ❌ but..

C++ 연산자 오버로딩

A. 연산자 오버로딩 (operator overloading) 1. 연산자 오버로딩 기초 a. 연산자 오버로딩이란? 함수 오버로딩 개념을 확대해 연산자에 대해서도 오버로딩을 제공 연산자 오버로딩을 사용자 정의 타입까지 확장할수도 있음 👉 클래스도 하나의 타입임을 확실히 보여줌 b. 연산자 함수(operator function) 연산자를 오버로딩하기 위해서 연산자 함수(operator function)라는 것을 사용 operator 키워드를 사용하여 연산자를 오버로딩 오버로딩할 연산자는 적법한 C++ 연산자여야 하고, operator 키워드와 공백 없이 연결되어 표시해야 함 HTML 삽입 미리보기할 수 없는 소스 operator오버로딩할연산자(매개변수목록) 연산자 함수의 장점은 복잡한 함수 이름 대신에 간..