깨져서 계속 이어 적겠습니다.


예 6부터.. 끝부분이라 내용은 얼마 없어요.



예 6.
C++의 템플릿(Template)을 사용해도 추상화가 가능하다.
템플릿은 Template라는 말 그대로 형틀이고, 적용 대상의 기능은 정해졌지만 자료형(double, int 같은 것.)은 정해지지 않고 가변적인 특성을 가지게 만듭니다.
'자료형'을 추상화 한다는 것.

그래서 의미하는 것은 같지만 여러 자료형이 쓰여야 될 변수, 쓸데없이 오버로딩(Overloading)된 함수의 코드를 줄일 수 있습니다.

int와 double을 사용한 예시를 보자.(코드를 최대한 짧게 하기 위해 Cirlce 클래스의 정의부분만 사용했다.)

class Circle
{
protected:
const double PI = 3.14;
int int_r = 0;
double double_r = 0;
public:
double area_circle(int r);
double area_circle(double r);
double length_circle(int r); //circumference
double length_circle(double r);
};

에서 템플릿을 사용하면


template <typename T> // Hungarian notation: t
class Circle
{
protected:
const double PI = 3.14;
T tR = 0;
public:
double area_circle(T tR);
double length_circle(T tR) //circumference
};

이렇게 됩니다.

이때 템플릿이 적용되는 자료형은 'T'로 표시했으며 네이밍은 바꿀 수도 있습니다.

헝가리안 표기법으로 t를 사용한 것은 인텔리전스를 사용할 때 헷갈리지 않기 위해 사용했습니다.(맨날 까먹어서...ㅜㅜ)
(제가 헝가리안을 사용하는 경우는 딱 2경우. 전역변수, 템플릿)

이젠 템플릿이 적용된 템플릿 클래스 코드를 어떻게 사용하는지 알아보자.

int main(void)
{
Circle<int> int_Circle;
Circle<double> double_Circle;
}

이렇게 사용하고 싶은 함수 내부에서  '<>'안에 자료형을 정의하여 사용할 수 있다.
이후는 일반 구조체나 클래스를 사용하는 것처럼 사용하면 됨.

솔직히 템플릿에 관한 것은 쓸 것이 너무 너무 많기 때문에 귀찮아서 여기까지만 쓰겠다.

+
템플릿 클래스의 정의와 구현을 파일단위로 분리하여 사용할 때 주의 사항.

https://black7375.tumblr.com/post/162425322640/템플릿-클래스-정의와-구현-분리

++
템플릿은 C++의 흑마법이라 불리는 TMP(Template MetaProgramming)의 첫번째 관문 이기도  하다.
(실행이 아니라 컴파일시에 연산을 해버린다니.. 어마무시!!)
필자는 TMP를 아직 잘 모르기 때문에 따로 적진 않겠다.(앞으로 공부할 예정)





요약하면
데이터를 적절히 변수와 상수로 나눈다.
변수, 함수, 알고리즘을 잘 사용해서 함수를 구성한다.
문제를 해결하는 과정에서 값들의 각 연관성에 대해 잘게 달라서 함수를 구성한다. (함수의 모듈화)
OOP를 지원하는 언어라면 클래스와 상속도 적절히 사용한다.
자료형이 가변적일 경우 템플릿도 사용할 수 있다.


그리고...

또 쓰지만 프로젝트할 때 main에 다 박지 말자.

요즘 공부할 수록 C++이 마음에 든다 정도?


후기
하이라이팅을 위해 Visual Code에서 DrRacket Syntax Colorizer를 깔아서 사용했는데 하이라이팅이 이쁘게 안되어 수작업을 했는데 너무 힘들었다.

(define (volume_pipe outer inner height)
(* (area_ring outer inner) height))

이딴식으로 일관성을 삶아 드셨다.(이쁘지도 않구)


+
racket을 넣은 의도가 함수형 언어와 추상화에 대해 다루기 위해서였는데..
아직 입문 일주일채 안된터라 함수형의 간결함, 추상화에 대해서는 못다루겠습니다.ㅜㅜ
보완해주실 분은 보완해주세요~

끝~~