개발자의 길/Effective C++

[Effective C++] Chapter 4 설계 및 선언

토아드 2020. 2. 29. 20:24
반응형

항목 18: 인터페이스 설계는 제대로 쓰기엔 쉽게, 엉터리로 쓰기엔 어렵게 하자

인터페이스는 일관성 있는 네이밍, 새로운 타입을 제공하여 함수 인자로 받도록 하여 잘못된 동작 사용 못하도록 하기, 자원 관리 책임을 사용자에게 주지 않기 등이 있다. shared_ptr 사용하면 자원에 대한 권한은 라이브러리에 있게 된다.

 

항목 19: 클래스 설계는 타입 설계와 똑같이 취급하자

 클래스를 설계할 때는 기본 타입을 정의하는 것만큼 고민을 하자. 책에 정리되어 있는 모든 고려사항을 참고하여 클래스를 보도록 하자.

 

항목 20: '값에 의한 전달'보다는 '상수객체 참조자에 의한 전달'방식을 택하는 편이 대개 낫다

 함수를 호출할때 기본타입을 제외하고는 복사 생성자가 호출될 가능성을 없애기 위해, 상수객체 참조자에 의한 전달을 선택하도록 하자 . : getName( Human human ) -> getName( const Humand &human )

 

항목 21: 함수에서 객체를 반환해야 경우에 참조자를 반환하려고 들지 말자

 지역 스택 객체에 대한 포인터나 참조자를 반환하는 , 힙에 할당된 객체에 대한 참조자를 반환하는 , 지역 정적 객체에 대한 참조자나 포인터를 반환하지 마라. '반환' 때에는 위에서처럼 참조자를 반환할 생각일랑 하지 말라.

 

항목 22: 데이터 멤버가 선언될 곳은 private 영역임을 명심하자

 데이터 멤버에 대해서는 반드시 private 선언하여, 문법적으로도 일관성 있게 작성하고, 접근 제어도 가능하도록 하자 ( 사용자가 변화시킬 있는 , 변화시킬수 없는 , 읽지도 못하는 )

 

항목 23: 멤버 함수보다는 비멤버 비프렌트 함수와 더 가까워지자

 멤버 함수를 무작정 만들기 보다는, 네임스페이스 안에 해당 객체를 인자로 받는 비멤버 비프렌드 함수를 자주 쓰도록 하자. 패키징 유연성과 기능적인 확장성이 늘어난다! ( sqlite3 나 std 를 생각해보기 )

 

항목 24: 타입 변환이 모든 매개변수에 대해 적용되어야 한다면 비멤버 함수를 선언하자

 어떤 함수에 들어가는 모든 매개변수에 대해 타입 변환을 해 줄 필요가 있다면, 그 함수는 비 멤버여야 한다. 멤버변수로 선언할 경우, 교환법칙이 성립이 안되는 연산자가 되어 버린다.

 

항목 25: 예외를 던지지 않는 swap 에 대한 지원도 생각해 보자

 std::swap 이 개발자가 만든 타입에 대해 느리게 동작할 여지가 있다면, swap 멤버 함수를 제공하되, 예외를 던지지 않도록 만들자

 

 

반응형