프로그래밍 공부

전문가를 위한 C++정리 73

카테고리 설명
  • 3.6.2 괄호 사이 공백 같은 라인 안에서 괄호에 공백을 어떻게 적용할지도 논쟁거리다. 연산자와 함수 파라미터 목록의 쉼표와 키워드 뒤에 공백을 삽입하고있다. 그리고 수식의 연산 우선순위를 잘드러나게 하려면 괄호를 사용한다. if (i == 2) { j = i + (k / m); } 다른 방법으로는 if문을 함수와 같은 스타일로 처리하여 괄호와 키워드 사이에 공백을 두지 않을 수도 있다. 수식에 사용되는 연산 우선순위 표시용 괄호도 특별히 수식의 의미에 영향을 주지 않는다면 사용하지 않는다. if (i == 2) { j = i + k / m; } 둘의 차이는 크나, 어느쪽이 더 낫다고 할 수는 없다. 3.6.2 탭과 공백 탭과 공백의 사용 방식은 단순히 개인 취향 문제로 끝나지 않는다. 개발팀 내에서 ..

  • 3.6.1 중괄호 정렬 위치 코드 포맷 방식은 개발팀 내에 불화를 일으키는 가장 큰 논쟁거리다. 코드 포맷에 대해 원칙을 정해놓았다면, 굉장히 다행으로 생각해야 한다. 처음에는 그원칙이 마음에 들지 않을 수 있지만 코드 포맷 때문에 다른 프로그래머와 싸울 필요가 없다는 것이 얼마나 큰 이득인지 깨닫게 된다. 만약, 모든 프로그래머가 자신의 포멧으로 코드를 작성하고 있다면, 최대한 참고 수용해주는게 좋다. 나중에 보게 되겠지만 어떤 포멧 원칙은 정말 개인 취향 이상도 이하도 아니지만 프로그레머의 팀워크를 헤친다. 3.6.1 중괄호 정렬 위치 중괄호 블록의 정렬 위치 문제는 가장 흔한 포멧 논쟁거리이다. 중괄호 사용에는 몇가지 스타일이 있다. 현 작성문서에는 같은 라인에서 중괄호를 열고, 그 구문의 제일 앞..

  • 3.5.3 커스텀 익셉션의 활용 C++을 이용하더라도 익셉션을 전혀 사용하지 않을 수 있다. C++의 기능 중 어떤 부분에서도 익셈션의 사용을 강제하지 않는다. 익셉션 없이도 전통적인 에러 플래그나 nullptr 리턴을 통해 에러 처리 메커니즘을 구현할 수 있다. 자체적으로 익셉션을 구현하여 클래스를 정의해서 특정 환경의 필요에 잘 맞춰진 에러 처리 메커니즘을 만들 수 있기 때문에, 익셉션 을 사용하는걸 추천한다. 예를들어 웹 브라우저 프로그램 이라면 어떤 웹 페이지가 에러를 발생시켰을 때 자체적인 익셉션 클래스를 만들어서 에러를 발생시킨 URL이나 네트워크 상태에 대한 정보를 첨부할 수도 있다.

  • 3.5.2 참조형으로 포인터 대체 전통적으로 C++프로그래머는 C를 먼저 배운 후 C++를 배운다. C에서는 포인터만 복제가 아닌 참조형으로 데이터를 넘긴다. C++에서도 여전히 포인터가 필요할 때가 있지만 많은 경우 참조형으로 대체할 수 있다. C를 먼저 배운 사람이라면 참조형을 지원하기 위해 특별히 언어 차원에서 추가된 기능은 없을거로 생각할 수도 있다. 단지 포인터 연산을 하는 새로운 문법이 추가되었을 뿐이라고 볼 수도 있다. 포인터 대신 참조형을 이용하면 몇 가지 좋은 점이 있다. 참조형은 포인터보다 안전하다. 메모리 주소를 직접 다루지 않기 때문에 nullptr이 될 수 없다. 코드의 스타일이 더 좋아진다. 스택변수 와 문법이 같아서 *나 &같은 심벌을 이용하지 않아도 된다. 참조형은 사용하기도..

  • 3.5 스타일이 있는 언어의 활용 C++언어는 잘못 활용하면 도저히 사람이 알아볼 수 없는 해괴한 코드를 만들 수 있다. i++ + ++i; 위 코드는 어떤식으로 동작하는지 C++표준에 정해져 있지 않다. i++가 변수 i를 이용하면서, 그 값을 증가시키는 부가 효과가 있기 때문이다. 표준에서는 문장 실행 중에 결과값(i + 1) 리턴과 함께 변수 자체의 값 증가까지 완료해야 하는지 정하고 있지 않다. 변수 자체의 값 증가는 문장의 끝인 ; 이후에 반영되어도 된다. 이때문에 ++i에서 어떤 i값이 사용될지 알 수 없다. 따라서 이 코드의 결과는 어떤 컴파일러를 사용하느냐에 따라 달라진다. a[i] = i++; 이 코드도 마찬가지 이유에서 결과가 어떻게 될지 알 수 없다. 이러한 코드의 사용은 피해야 한다..

  • 3.4.2 네이밍 컨벤션 이름을 정하는 데 많은 시간이나 상상력이 꼭 필요한 것은 아니다. 일반적인 경우에 쉽게 적용할 수 있는 표준적인 네이밍 방법이 있으면 편리하다. 3.4.2.1 카운터 프로그래밍을 시작할 때 많은 코드에서 i를 반복문의 카운터 변수로 활용하는것 을 보았을 것이다. 습관적으로 변수 i와 j를 각각 바깥 루프와 안쪽 루프의 카운터 변수로 사용할 수 있다. 하지만 중첩된 루프에서는 i와 j의 형상이 비슷함으로 변수를 혼동하기 쉽다. 그럼으로, 좀더 명확한 이름을 사용하고 루프 변수에 i와 j를 쓰는게 별로 좋지 않을 수 있다. 3.4.2.2 접두사 많은 프로그래머가 변수명을 정할 때 변수의 타입이나 사용법을 암시하는 접두사를 붙인다. 그런데 마찬가지라 많은 수의 프로그래머가 유지보수 문..