typedef 도 enum과 마찬가지로 클래스 맴버로 사용하면 객체 내에서만 타입을 재정의 하는데 사용할 수 있다.
다음은 typedef를 맴버 내에서 정의한 인터페이스 파일이다.
#ifndef POINT_H
#define POINT_H
// Point 클래스를 정의한다.
class Point
{
public:
enum { MIN_X = 0, MAX_X = 100, MIN_Y = 0, MAX_Y = 100 };
typedef int COOR_T; //좌표의 타입 int의 타입을 COOR_T로 재정의 했다.
//맴버 함수
void Print() const;
void Offset(COOR_T x_delta, COOR_T y_delta);
void Offset(const Point& pt);
//생성자들
Point();
Point(COOR_T delta, COOR_T y_delta);
Point(const Point& pt);
//접근자들
void SetX(COOR_T value);
void SetY(COOR_T value);
COOR_T GetX() const { return x; };
COOR_T GetY() const { return y; };
private:
//맴버 변수
COOR_T x, y;
};
inline void Point::SetX(COOR_T value)
{
if (value < MIN_X)
x = MIN_X;
else if (value > MAX_X)
x = MAX_X;
else
x = value;
}
inline void Point::SetY(COOR_T value)
{
if (value < MIN_Y)
y = MIN_Y;
else if (value > MAX_Y)
y = MAX_Y;
else
y = value;
}
#endif
아래 코드는 구현파일이다.
#include "Point.h"
#include <iostream>
using namespace std;
void Point::Offset(COOR_T x_delta, COOR_T y_delta)
{
SetX(x + x_delta);
SetY(y + y_delta);
}
void Point::Offset(const Point& pt)
{
Offset(pt.x, pt.y);
}
Point::Point(const Point& pt)
{
x = pt.x;
y = pt.y;
}
Point::Point(COOR_T initialX, COOR_T initialY)
{
SetX(initialX);
SetY(initialY);
}
Point::Point()
{
x = 0;
y = 0;
}
void Point::Print() const
{
cout << "( " << x << ", " << y << ")\n";
}
int 라는 자료형을 COOR_T 로 정의 한 것이 전부다.
맴버 변수 x, y 의 타입을 전부 COOR_T 로 정의 했다.
COOR_T가 결국은 int 타입이기 때문에 x, y 는 모두 int 타입으로 사용 된 것이다.
나중에 x,y를 float으로 정의 하고 싶어질 때는 typedef 문을 수정하여 COOR_T를 float으로 재정의 하면 그만이기 때문에 수정이 쉬워진다.
소프트웨어 공학 용어 중에 응집력(Cohesion)이라는 말이 있다. 응집력이 좋을 수록 좋은 프로그램이 된다.
관련된 것을 모아서 한꺼번에 관리하는 것을 말한다. 객체지향 프로그래밍이 지향하는 바와 비슷하다.
같은 성질을 가진 것들을 객체로 묶어놓는것이 객체 지향 프로그래밍이 지향하는 바 이기 때문이다.
'C++문법 공부' 카테고리의 다른 글
포함 (0) | 2023.06.27 |
---|---|
new 연산자 (0) | 2023.06.26 |
객체 맴버로 열거체(enum)사용하기 (0) | 2023.06.24 |
정적 맴버 함수를 사용해서 객체를 생성하기 (0) | 2023.06.22 |
맴버함수에 포인터 사용하기 (0) | 2023.06.21 |