2024. 1. 9. 14:11ㆍUnreal 강의
템플릿
자료형을 마치 변수처럼 사용하여 1번만 함수를 만들어도 되는 문법이다.
template<typename Type>
void print(Type _Value)
{
}
템플릿은 기본적으로 함수나 클래스 위에 template<typename 이름>을 붙이게 되면 그 이름을 자료형이 존재하는 곳에 대입할 수 있게 되고 디 이후에는 필요하면 컴파일러가 자료형에 맞는 코드를 대신 작성해주는 문법이다.
Print<bool*>(bPtr);
Print<const char*>("AAAA");
Print<int*>(Ptr);
Print(bPtr);
Print("AAAA");
Print(Ptr);
함수 사용시에 <자료형>을 쓰지 않아도 자료형이 어떤 자료형이라는 것을 알고 알아서 해주는데 이걸 템플릿 인자추론이라고 한다.
템플릿 특수화
오버로딩과 같은데 이미 같은 이름의 템플릿 함수가 있다면 이것을 템플릿 특수화라고 부른다. 예외를 두는 문법이다. template<>을 붙여줘야 명시적으로 동작한다.
템플릿 클래스
template<typename MemberType>
class TemplateClass
{
public:
MemberType Value;
};
템플릿 클래스는 인자 추론이 불가능하고 그 때문에 header cpp 분할이 불가능하다. 그래서 일반적으로 전부 다 헤더 안에 구현해야한다. 그 이유는 사용시 값형이면 크기를 명확하게 명시해야하기 때문이다.
cpp에 분할하여 구현하려면 다음과 같이 사용해야하는데 이러면 코드 단축을 위해 사용하는 템플릿을 쓸 이유가 없다.
같은 템플릿 클래스더라도 사용된 자료형이 다르면 대입 등을 할 수 없다. 템플릿 클래스간의 호환은 완전히 동일한 템플릿 클래스만 가능하다. 많이 착각하는 포인트 중 하나이다.
TmeplateClass<int> != TmeplateClass<bool>
TmeplateClass<int> == TmeplateClass<int>
std
C++ 스탠다드 라이브러리
C++을 만든 사람들이 새롭게 C++을 시작하는 사람들이 편하게 프로그래밍할 수 있도록 미리 함수나 클래스를 만들어 둔 것이다.
단계적으로 인증을 받아서 올라와서 최상위에 std가 있다.
stl
스탠다드 템플릿 라이브러리로 std에 포함되어있는 일부분이다. std 중에 템플릿을 사용하는 것들이 대부분 stl이다. stl안에 자료구조도 포함되어있다.
인터페이스 : 클래스와 코드의 함수의 사용방식
자료구조
면접 단골 자료구조 3대장 : vector, map, list
그 외에 자주 사용하는 자료구조 : string, queue, stack
자료구조란 특정 객체나 오브젝트의 메모리의 할당, 탐색, 삭제 등등의 방법을 모두 아우르는 말이다.
어떠한 방식으로 안의 자료를 관리하는 클래스들을 컨테이너라고 한다.
시퀸스 컨테이너 : vector, list
연관 컨테이너 : map
어뎁터 컨테이너 : string, queue, stack
시퀸스 컨테이너
자료를 추가했을 때 순서가 바뀌지않고 들어가면 시퀸스 컨테이너이다.
vector<int>
연관 컨테이너
자료를 추가했을 때 자료의 순서가 바뀐다면 연관 컨테이너이다. 정확히는 순서가 바뀌는 규칙이 있기만 하면 연관 컨테이너이다. 연관 컨테이너는 정렬해주지 않는다.
map<int>
'Unreal 강의' 카테고리의 다른 글
23일차 (1/12) (0) | 2024.01.12 |
---|---|
21일차 (1/10) (0) | 2024.01.10 |
19일차 (1/8) (0) | 2024.01.08 |
18일차 과제 (0) | 2024.01.05 |
18일차 (1/5) (0) | 2024.01.05 |