{

음... 난 이 제목을 보고 느끼는 것이 있다., "한글로 하면, 항상 어렵다." 는 것인데, 뭐 .. 어쩔수 없다. 마땅히 우리나라 말로 옮길 수 있는 단어는 저런거 밖에 없기 때문이지 않을까? 본론으로 빠르게 돌아가서 저 제목이 의미하는 바 가 무엇인지 알아 보자.


표준적인 형식이란?

말 그대로 표준적인 것들을 뜻하는데, 이 표준적인 것들은 많이 있지만, 여기에서 말하고자 하는 "표준적인 형식"이란, 바로 연산자 즉, operator에 대한 표준적인 형식을 뜻하는 것이다.


그렇다면 이런 표준적인 형식은 정확히 어떤 형식인가?

바로 C++ 표준에서 산술 및 할당 연산자를 구현할 때, 사용하는 형식, 즉, 산술 연산자를 구현할 떄는 산술 할당 연산자와 산술 연산자 두개를 제공해야 하며, 산술 연산자는 산술 할당 연산자로 구현해야 한다는 것, 이것이 바로 표준적인 형식의 코딩 법이다. 이렇게 말로만 하면 분명 헷갈리는 "산술 할당 연산자"와 "산술 연산자"의 차이점을 알아 보는게 좋을것 같다.


산술 할당 연산자란?

a += b; <-- 여기서 보이는 "+=" 연산자가 바로 산술 할당 연산자라 부른다.


산술 연산자란?

a = a + b; <-- 여기서 보이는 "+" 연산자가 바로 산술 연산자라 부른다.


그렇다면 왜~ 산술 할당 연산자를 이용해서 산술 연산자를 구현하는게 좋은가? 때로는 별개의 코드로 짤 수도 있는데, 말이다. 그 이유는 강아지는 강아지~ 사슴은 사슴~ 고양이는 고양이인데, 만약 경우에 따라서 강아지는 고양이, 사슴은 강아지, 고양이는 사슴 이라고 말을 해 보자.

헷갈리지 않는가? 모두들 표준적인 것으로 사용했다고  알고 코딩하고 있기 때문에, .. 헷갈리게 하면 그게 좋을 수 있겠는가? 당연히 좋지 못하다. 그러므로 "표준적인 형식"을 따르는것이 좋다. 물론~ 성능에 영향을 많이 미치어, 어쩔수 없이 다르게 구현을 해야 하는 경우도 있을 것이다.(물론 나는 겪어 본적이 없다.) 그때는 주석을 잘~ 달아 주면 될 것이다., 하지만 굳이 연산자를 오버로딩 할 필요가 있는지? 에 대해서 생각해 봐야 할 것이다.

개인적으론 연산자는 필요한 경우가 아니라면, 아예 내비 두는게 더 좋다고 생각 한다.( 이 항목에 대해선 스콧 마이어스의 Effective C++ 3판과 2판에 대해서 언급하고 있다.)

여기에 대한 소스코드는 STL의 iterator 코드를 보면 정확히 나온다. 물론 std::vector<T>::iterator 를 봐야 할 것이다.

연산자를 제공하는데 있어, 조심해야 할 것이 있는가?

전역 연산자를 제공 할 때에는 암시적 형변환을 고려해야 한다. 여기에 대해서는 이번 항목에서 다루기 보다, Effective C++ 3판, 2판에서 지적했던 암시적 형변환 부분을 보는게 좋을것 같다.

}

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

항목 32 : 만들고 있는 클래스가 무엇인지 확실히 하라. ( Be clear what kind of class you’re writing. )  (0) 2009.02.26
항목 31 : 함수의 인자의 처리 순서에 좌우되는 코드는 좋지 않다. ( Don’t write code that depends on the order of evaluation of function arguments. )  (0) 2009.02.26
항목 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
항목 25 : 값, (스마트) 포인터, 참조 중 적절한 방식으로 인자를 얻어라.(Take parameters appropriately by value, (smart) pointer, or reference. )  (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
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 라이프코리아트위터 공유하기
  • shared
  • 카카오스토리 공유하기

댓글을 달아 주세요

">