18. 인터페이스 설계는 제대로 쓰기는쉽게, 엉터리로 쓰기는 어렵게
흔하게 할 수 있는 실수들 중에서
매개변수 순서를 잘 못 입력한 경우가 생길 수 있다.
class Data
{
public:
Date( int Month, int Day, int Year );
}
Date( 3, 10, 1999 ) ; 라도 제대로 기입 한다면 문제가 없겠지만
입력중 오타 라던지, 여러 사람이 사용 할 경우 순서가 헤깔리는 경우가 생 길 수 있다.
이럴때 명시적으로 각자를 구분하는 간단한 랩퍼(wrapper)타입을 만들고 이 타입을
Date 생성자 안에 둘 수 있다.
struct Day{ struct Month{ struct Year{
explcit Day( int d ) explcit Month( int m ) explcit Year( int y )
: val( d ) {} : val( m ) {} : val( y ) {}
int val; int val; int val;
}; }; };
class Date{
public:
Date( const Month& m, const Day& d, const Year& y );
};
Date d(30, 3, 1995); // error
Date d( Day(30), Month(3), Year(1995) ); // error
Date d( Month(3), Day(30), Year(1995) ); // Ok
이렇게 명시적으로 사용 하면 실수를 줄일 수 있다.
사용자의 실수를 방지하는 방법으로 새로운 타입만들기, 타입에 대한 연산을 제어하기,
객체의 값에 대한 제약걸기, 자원 관리 작업을 사용자 책음으로 놓지 않기가 있다.