== 런타임의 자료형이 정해지는 타입.다형성과 STL이 여기에 속한다.
== 자료형이 일정하게 정해져있지않고 런타임의 어떤 객체냐에 따라서 그 타입으로 변환시켜주는 존재
== 실행 전에는 어떤 함수가 호출될지 모르는데 실행됐을때의 객체에 따라서 자료형이 자유자재로 변하는게 RTTI란 개념이다.
==virtual 클래스로부터 상속이 하나라도 존재하면 RTTI를 사용하고있다고 보면 된다.
dynamic_cast가 가상함수테이블이 필요없는 경우에는 static_cast를 사용하게끔 되어있고 실행이 되고나서 자료형이 정해지는 경우는 가상함수테이블이 필요해서 dynamic_cast로 RTTI를 적용하여 작동하는 구조로 설계되어있다.
== 자료형에 구애받지않는
== 자료형에 관계없이 실행 가능하게해주는 존재
기존에 우리는 함수를 짤때 자료형 하나로만 입력값을 받고 반환했었는데 다른 자료형에 대한 함수를 만들어달라하면 함수정의문과 호출문을 그때마다 추가해야된다.
ex)
int addNum(int a, int b)
{
return a+b;
}
float addNum(float a, float b) //오버로드 된 함수
{
return a+b;
}
그렇게 오버로드 된 함수는( 오버로드 == 함수정의문의 이름과 내용은 같은데 매개변수의형태 즉 자료형이 다른것 ) 아래처럼 얼마든지 더 만들어도 문제가 되지않는다.(이걸 오버로드 된 상태라고 한다.)
float addNum(float a)
{
return a;
}
char addNum(char a)
{
return a;
}
이렇게 4개의 함수 정의문이 있는데 메인함수에선 호출문에 들어가는 인자의 형태에 따라 함수이름이 동일한데도 불구하고 인자 형태(자료형,인자 갯수)에 맞는 함수가 호출이된다.
2.오버로드의 조건 두 가지
ㄱ. 함수 이름이 동일해야된다.
ㄴ. 함수의 매개변수 갯수나 자료형이 달라야한다.(갯수만 다른것도 가능)
3.오버로드의 한계
추가되는 요구에 대응하기위해서 나온 개념이 오버로드인데 이 오버로드도 동일함수명이 무수히 많아지기때문에 한계가 있다.그래서 문법적으로 다 통일해서 하나로 만든 탬플릿이 나오게 된다.
4-0.Template
4-1.탬플릿의 구조
Template< class T >
T addNum(T a, T b)
{
return a+b;
}
구조는 우리가 만들었던 클래스,구조체와 비슷하다.왜냐하면 이것 또한 사용자에 의해 창조되는 자료형이기때문이다.그리고 매개변수 자료형 자리엔 T가 위치함
4-2. 특징
T가 인자가 들어오면 인자의 자료형에 따라 동일하게 변경돼서 맞춰준다.
그게 언제냐면 런타임때(=함수 호출로 실행시)
뭐가 들어오던지 다 커버가 가능.
앞에 오버로드와 기능은 동일하지만 훨씬 더 효율성 있게함.
클래스를 넣는것도 가능하지만 그건 계산 용도로는 불가
탬플릿을 표준적으로 어떻게 쓰는가를 뜻함
기존에는 함수에다가 적용했다고하면 이번엔 변수에다가 탬플릿을 적용한다.
변수는 자료형이 정해진건데 STL은 이 변수의 자료형을 좀 더 유연하게 쓸 수 있게끔해준다.
배열도 우리가 여러 자료형으로 다 만들었던것 생각하면 배열도 탬플릿이다.
이런 배열 같은 애들의 종류가 몇 개 존재한다.
그리고 이런걸 자료구조라고 한다.
자료 == 데이터 == 변수들, 상수들, 어떤값들처럼 컴퓨터에 저장이 되는 존재
-> 이런 자료들을 어떤 방식으로 구조를 짜서 저장할거냐라는게 '자료구조'라는 학문이다.
배열은 자료구조 중 하나로 데이터 하나하나가 일렬로 붙여서 유지한다는 특징이 있는데 이걸로 사용자는 인덱스가 있어서 배열이름(주소값)에 자료형만큼의 크기 곱하기 원소 갯수를 해서 배열의 원소에 접근할 수 있다.
하지만 배열의 단점이 있는데 선언하면서 정한 크기는 바꿀 수 없다.또한 그 크기를 넘어가면 오류가 난다.이런 단점들이 있어 나온게 다른 자료들이다.
정말 잘 읽었습니다, 고맙습니다!