2015. 8. 20. 10:21ㆍ프로그래밍/Effective C++
인터페이스 설계란
클래스의 접근 권한을 이야기 하는 것이 아닌,
사용자와 제품간의 접점을 말한다.
여기서는 클래스나 함수, 템플릿의 사용 환경 등이 속한다.
인터페이스를 만들 때 기존에 제공되던 공통인터페이스를
일관성 있게 따르는 것이 바람직하다.
이는 사용자 측에서 뭔가를 외우지 않고
기존에 하던 대로 편하게 사용 할 수 있으므로 접근성이 높다.
(STL, .NET등도 최대한 이와 같이 하려고 노력하였다.)
실수를 방지하는 설계
만일 사용자가 인터페이스를 잘못 사용하고 있다면
알기 쉽게 컴파일 에러가 나도록 만든다.
주의점
새로운 타입을 활용 할 때 새로운 타입이라도 기존 타입과 최대한 비슷하게
사용할 수 있도록 설계해야 한다. (일관성 있는 설계를 위해)
예시
잘못된 값을 입력했을 경우 컴파일러 수준에서 알 수 있게
새로운 타입을 제공해서 이 타입으로만 값을 받도록 설계한다.
자원을 인터페이스에서 관리
사용자가 인터페이스에 넘긴 자원을 자신이 관리할 때
해제를 잊고 하지 않거나, 해제를 두 번 하는 경우가 생길 수 있으므로
인터페이스로 넘어온 자원은 인터페이스에서 관리하도록 한다.
방법
명시적으로 자원을 자동으로 해제해주는 스마트포인터를
인터페이스로 사용한다.
이렇게 하면 사용자가 명시적으로 자원이 자동 관리된다는 것을
알 수 있기 때문에 실수할 여지가 원천적으로 차단된다.
정리
인터페이스는 제대로 쓰기는 쉽고 잘못 쓰기는 어렵게 해야 한다.
이를 위해서 일관성 잡아주기, 동작 호환성 유지하기 등의 방법을 사용한다.
'프로그래밍 > Effective C++' 카테고리의 다른 글
데이터 멤버는 private(effective c++ 22) (0) | 2015.08.25 |
---|---|
함수에서 객체 반환시 참조로 X(effective c++ 21) (0) | 2015.08.23 |
클래스 설계는 타입 설계와 같이 보자(effective c++ 19) (0) | 2015.08.20 |
new로 생성한 객체를 스마트포인터에 저장하는 코드는 별도의 한 문장(effective c++ 17) (0) | 2015.08.20 |
new/delete 형태 맞추기(effective c++ 16) (0) | 2015.08.20 |
자원관리 클래스의 자원은 접근 가능하게(effective c++ 15) (0) | 2015.08.20 |
자원관리 클래스의 복사 동작에 대해(effective c++ 14) (0) | 2015.08.12 |