인터페이스 설계방법. 제대로는 쉽게, 엉터리론 어렵게(effective c++ 18)

2015. 8. 20. 10:21프로그래밍/Effective C++

728x90
728x90

인터페이스 설계란

클래스의 접근 권한을 이야기 하는 것이 아닌, 

사용자와 제품간의 접점을 말한다. 

여기서는 클래스나 함수, 템플릿의 사용 환경 등이 속한다.


좋은 설계
제대로 쓰기는 쉽게, 잘못 쓰기는 어렵게 설계하는 것이 바람직하다.

일관성을 지키는 설계

인터페이스를 만들 때 기존에 제공되던 공통인터페이스를 

일관성 있게 따르는 것이 바람직하다.


이는 사용자 측에서 뭔가를 외우지 않고 

기존에 하던 대로 편하게 사용 할 수 있으므로 접근성이 높다.


(STL, .NET등도 최대한 이와 같이 하려고 노력하였다.)


실수를 방지하는 설계

만일 사용자가 인터페이스를 잘못 사용하고 있다면 

알기 쉽게 컴파일 에러가 나도록 만든다.


방법
1. 새로운 타입을 들여와 인터페이스를 강화한다.
2. const의 활용

주의점

새로운 타입을 활용 할 때 새로운 타입이라도 기존 타입과 최대한 비슷하게 

사용할 수 있도록 설계해야 한다. (일관성 있는 설계를 위해)


예시

잘못된 값을 입력했을 경우 컴파일러 수준에서 알 수 있게 

새로운 타입을 제공해서 이 타입으로만 값을 받도록 설계한다.




자원을 인터페이스에서 관리

사용자가 인터페이스에 넘긴 자원을 자신이 관리할 때

해제를 잊고 하지 않거나, 해제를 두 번 하는 경우가 생길 수 있으므로

인터페이스로 넘어온 자원은 인터페이스에서 관리하도록 한다.


방법

명시적으로 자원을 자동으로 해제해주는 스마트포인터를 

인터페이스로 사용한다.


이렇게 하면 사용자가 명시적으로 자원이 자동 관리된다는 것을 

알 수 있기 때문에 실수할 여지가 원천적으로 차단된다.


정리

인터페이스는 제대로 쓰기는 쉽고 잘못 쓰기는 어렵게 해야 한다.

이를 위해서 일관성 잡아주기, 동작 호환성 유지하기 등의 방법을 사용한다.


사용자가 실수했을 때는 컴파일러가 알려주도록 만든다.
이를 위해서는 사용자타입 사용, const사용 등의 방법을 사용한다.

자원관리 작업은 인터페이스에서 처리해서 원천적으로 실수를 막는다.
이를 위해서는 스마트 포인터 등의 방법을 사용한다. 



728x90
반응형