인터페이스 설계를 제대로 하고싶다면 우선, 저지를 만한 실수의 종류를 머리에 넣어두어야한다!
아래 코드와 같이 매개 변수를 잘못 넣을 수 있다.
class Date{
public:
Date(int month, int day, int year);
};
Date d(30, 3, 1995) ; // 3과 30을 잘못씀
Date d(3, 40, 1995); // 30을 넣어야했는데 오타로 40
해결책
새로운 타입을 넣어 매개변수를 구분!
아래 코드와 같이 struct를 사용해 일 월 년 구분
// 일 타입
struct Day{
explicit Day(int d) : val(d) {}
int val;
};
// 월 타입
struct Month{
explicit Month(int m) : val(m) {}
int val;
}
// 년 타입
struct Year {
explicit Year(int y) : val(y) {}
int val;
}
// Date 클래스 재정의
class Date{
public:
Date(const Month& m, const Day& d, const Year& y);
};
Date d(Month(3), Day(30), Year(1995));
또한 아래코드처럼 타입에 제한을 걸어 오류를 방지
class Month{
public:
static Month Jan() {return Month(1);}
...
static Month Dec() {return Month(12);}
private:
explicit Month(int m);
};
Date d(Month::Mar(), Day(30), Year(1995));
_explicit : 자신이 원하지 않은 형변환이 일어나지 않도록 제한하는 키워드이다.
잊지말자!
1. 인터페이스를 만들 때는 이 특성을 지닐 수 있도록 고민하고 또 고민합시다.
느낀점
아직 뮤텍스나 스마트포인터에 대해 상세하기 알지 못해 무슨 소리인지 감이 잘안잡힌다. 스마트포인터를 익히고 다시 봐야 제대로 이해할 수 있을 것 같다.