{

이번 항목은 함수의 매개변수를 무엇으로 정하는게 좋을까? 란 말과 같다. 매개변수야 필요한 것을 필요한 만큼 인자로 만들면 되지 않을까? 라고 생각 할 수도 있겠지만, C++ 에선 "클래스" 라는 개념이 있기 때문에,  좀 까다로운 것들이 많이 있다.

예를 들자면, 자신의 복사 갯수를 카운팅하는 객체, 소유권 개념이 있는 객체, 스마트 포인터, 다른 것을 카운팅 하는 객체, 데이터 크기가 매우 큰 객체, 또는 매우 작은 객체, 복사 되지 않는 객체, 10개까지만 복사 되는 객체 등... 사용 상에 필요한 용도로 만들어진 이러한 객체들은 "함수의 매개변수로 어떻게 전달 할까?" 를 고민해 봐야 한다.

또는 함수 내부에서 변경될 수 있는가? 에 대한 고민도 같이 해서 const 를 붙여야 하는가? 말이야 하는가? 참조로 받아야 하는가? 포인터로 받아야 하는가? 복사해서 받아야 하는가? 등 도 생각해 봐야 한다.

나는 이렇게 했다.
1. 카운팅 할 필요가 없다면, 복사 생성자를 호출하지 않도록, 참조나 포인터로 전달한다.
2. 함수 내부에서 변경되지 않는다면 const를 항상 붙여준다.
3. 만약 값이 변경된다면, 포인터로 전달하고, 값이 변경 안된다면 const reference 형태로 전달 한다.
4. 기본 타입들에 대해선 그냥 복사 전달 한다.
5. 임시 객체로 전달될 수 있는 상황이 많다면, 객체의 복사 생성자로 인하여 객체를 생성하는게 좋다.
6. 복사 생성자가 호출 할 수 없다면, 참조나 포인터로 넘긴다.

등이 있다.

아마도 코딩을 하다 보면, 특수한 객체들을 만들어야 할 때가 있는데, 한번 겪어 보는게 더 쉽게 이해 갈 듯 하다.

}

'책 정리 > C++ Coding Standards : C++ 코딩의 정석' 카테고리의 다른 글

항목 30 : &&, || 그리고 콤마의 오버로딩은 피하라. ( Avoid overloading &&, ||, or , (comma) )  (0) 2009.02.26
항목 29 : 간접적인 타입 변환을 피하기 위해 오버로딩을 활용하라. ( Consider overloading to avoid implicit type conversions. )  (0) 2009.02.25
항목 28 : ++와 --의 표준적인 형식과 접두 형식을 사용하라. ( Prefer the canonical form of ++ and --. Prefer calling the prefix forms. )  (0) 2009.02.25
항목 27 : 표준적인 형식의 산술 및 할당 연산자를 사용하라. ( Prefer the canonical forms of arithmetic and assignment operators. )  (0) 2009.02.25
항목 26 : 오버로딩된 연산자의 본래 의미를 유지하라. ( Preserve natural semantics for overloaded operators. )  (0) 2009.02.24
항목 24 : 내부 #include 가드를 사용하라. 외부 #include 가드를 써서는 안 된다. ( Always write internal #include guards. Never write external #include guards. )  (0) 2009.02.24
항목 23 : 헤더 파일은 충분히 완성된 형태로 만들어라. ( Make header files self-sufficient. )  (0) 2009.02.24
항목 22 : 정의의 의존성과 순환 의존성을 최소화 하라. ( Minimize definitional dependencies. Avoid cyclic dependencies. )  (0) 2009.02.24
항목 21 : 컴파일 단위 사이의 초기화 의존성을 없애라. ( Avoid initialization dependencies across compilation units. )  (0) 2009.02.23
항목 20 : 너무 긴 함수와 많은 중첩구조는 피하라. ( Avoid long functions. Avoid deep nesting. )  (0) 2009.02.23
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 라이프코리아트위터 공유하기
  • shared
  • 카카오스토리 공유하기