{

나는 사실이 말을 듣고  무슨 말인가 했다. "완성된 형태"가 무엇을 위한 완성인지 몰랐기 때문이다. 하지만 이 항목을 읽다 보면, "내 머리속에 엄청난 녀석이 들어왔어!" 라고 느끼게 될 것이다.

이 항목에 이야기 하기 전에, "부모님와 자녀" 이라는 이야기를 하고 싶다. 어렸을 때, 나는 아버지께서 형과 나를 과보호 한다고 생각 했었는데(물론 아버지 입장에선 당연한거겠지만), 그 이유가 초등학생 때 친구네 집에서 밥 먹고 집에  가겠다고 말하거나, 자고 가겠다거나, 친구가 무엇인가 해준다고 했다고 하면, 혼났었기 때문이다.

때론 어머니의 심부름 도중 들려 형의 꼬임( 부모님께 혼난건 전부 형 잘못! )에 빠저서 "오락실"에 들려 게임 한두판을 하고 집에 가곤 했는데, 이 한두판이 1~2시간 이니, 어지간히 짧은 한두판은 아닐 것이다. 집에 들어 갔을 떄, 어머니께서는 형과 나를 뒤뜰로 집합 시켰고, .. 뒤지게 패셨다.

때마침 아버지께서 집에 오셨는데, 어머니께서 아버지에게 이 사실을 알렸고, .. 아버지꼐서도 가세하여 형과 나를 뒤지게 패셨다. 어렸을 때는 부모님의 이런 보호와 행동들은 내가 잘못 했기 때문에 혼낸다고 생각했었다.

이런 초등학교 시절이 끝난 후 나는 중학교에 입학했고, 위의 "친구네 집에서 밥 먹고 집에  가겠다고 말하거나, 자고 가겠다거나, 친구가 무엇인가 해준다고 했다"고 하면, 모라고 말씀하시지 않으셨고, 나쁜 짓(...)을 할 때만 말만 혼내셨다.

고등학교에 입학하고 부터는 친구집에서 잔다거나 학업에 대해서나 장래에 대해서, 일절 관여하지 않으셨고, 역시 나쁜 짓(...)에 대해서만 혼내셨다.

대학교 입학 후부터는 "방목"이 였고, 스스로 자립해야 한다는 생각이 자연스럽게 들었다. 다행히(?) 집이 부자는 아니였기 때문인지, 부모님께 돈을 받아서 생활한다는 생각보다는, 스스로 벌어서 써야 한다는 생활을 하였다.(KGCA 입학금이 없을 때 200만원 가량 빌렸으나, 다시 갚았다.)

그런데 왜 이 이야기를 하는 것일까?
바로 "완성된 형태"를 설명하기 위해서 이다. 헤더파일의 "완성된 형태"는 사람이 성인이 되었을 때의 "자립"과 비슷하다. 그리고 "완성된 형태"가 아닌 경우는 부모님의 사랑과 보호가 필요한 어린 시절 처럼 #include 해야 한다.

이것을 설명하기 위해서 "보호" 와 "자립"을 이야기로 쓴 것이다.

충분히 "완성된 형태"로 만들 경우 어떤 해택이 있는가?
스스로가 활동할 수 있게 된다. 즉, 다른 헤더파일에 영향을 받지 않기(#include 가 없기 때문에) 때문에, 헤더 파일의 변경에 따른 컴파일 시간의 단축과 이해관계 역시 충분히 한 만큼 충분히 줄어 드는 해택을 보게 된다.

언제나 충분히 "완성된 형태"로 만들 수 있는가?
사람이라면 어린시절을 반드시 거쳐야 하듯이, 어린 헤더파일들 즉, 다른 것에 의존해야만 하는 헤더파일이 있다. 하지만 언제나 그렇듯 어린이들은 언제까지나 어린이로만 있을 순 없고, 충분히 자립할 수 있다면,(중학교때, 고등학교때, 대학교 이후일때 처럼) 그 것을 인정하고 자립을 도와 주어야 할 것이다.

대답은 "언제나 그런건 아니다. 되도록 할 수 있으면 해주는게 좋다. 판단은 스스로의 몫"

}

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

항목 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
항목 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
항목 19 : 변수는 항상 초기화하여 사용하라. ( Always initialize variables. )  (0) 2009.02.23
항목 18 : 가능하면 로컬 변수를 선언하여 사용하라. ( Declare variables as locally as possible. )  (0) 2009.02.23
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 라이프코리아트위터 공유하기
  • shared
  • 카카오스토리 공유하기