프로그래밍 공부

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

카테고리 설명
  • 10.6 헤더 파일 헤더 파일은 서브 시스템이나 다른 코드에 추상화된 인터페이스를 전달하는 메커니즘이다. 한 가지 까다로운 부분은 여러 헤더 파일을 이용할 때 순환 참조나 중복 인클루드되는 경우를 피하는 것이다. 예를 들어 Logger클래스를 작성해서 모든 오류 메시지를 로깅해야 할 때, 사용자 설정 정보를 받기 위해 Preferences클래스를 사용해야 할 수 있다. 그런데 Preferences클래스가 사용하는 헤더 파일이 의도하지 않게 Logger클래스를 인클루드해버릴 수도 있다. 다음 코드에서 볼 수 있듯이 #ifndef 패턴을 이용하면 순환참조나 중복 인클루드를 막을 수 있다. 모든 헤더파일의 시작부분에 #ifndef 지시자를 넣어서 특정 키워드가 정의되지 않았다는 것을 확인한다. 만약 해당 키워..

  • 10.5 C++11 / C++14 C++11과 C++14에서는 여러 가지 새로운 기능이 도입되었다. 이 절에서는 다른 장들에서 설명하기에 적합하지 않은 C++11과 C++14의 새로운 기능을 설명한다. 10.5.1 유니폼 초기화 C++11이전에는 데이터 타입에 대한 초기화 방식에 일관성이 없었다. 예를 들어 다음의 Circle 데이터에 대한 정의를 보자. 하나는 구조체를 이용하고 다른 하나는 클래스를 이용하고 있다. struct CircleStruct { int x, y; double radius; }; class CircleClass { public: CircleClass(int x, int y, double radius) : mX(x), mY(y), mRadius(radius) {} private: ..

  • 10.4 스코프 지정 C++프로그래머라면 스코프(Scope)라는 개념에 익숙해져야 한다. 프로그램 내의 변수, 함수, 클래스 등의 모든 이름은 특정한 유효 범위, 즉 스코프를 가진다. 그리고 네임스페이스, 함수 정의, 클래스 정의, 중괄호 쌍을 이용한 블록 정의를 통해 스코프를 만들 수도 있다. 어떤 변수나 함수 클래스에 접근하려 할 때는 가장 가까운 스코프에서부터 가장 먼 전역 스코프까지 차례로 찾게 된다. 네임 스페이스, 함수, 클래스, 중괄호 쌍 블록 모두 이름이 존재하지 않으면 전역 스코프에 있는 것으로 간주한다. 만약 전역 스코프에서도 찾지 못하면 컴파일러가 정의되지 않은 심벌이라는 에러 메시지를 출력한다. 어떤 경우에는 같은 이름의 다른 스코프 때문에 스코프가 가려지기도 한다. 또 어떤 경우에..

  • 10.3 타입과 캐스팅 우리는 C++의 기본 타입에 대해 알아보았고, 커스텀 타입을 정의하는 방법을 배웠다. 이번에는 typedef, 함수 포인터에 대한 typedef, 타입에일리어스, 그리고 캐스팅 같은 타입과 관련된 까다로운 부분을 살펴본다. 10.3.1 typedef typedef를 이용하면 새롭게 타입을 만들지 않고, 이미 정의된 타입에 또 다른 이름을 부여할 수 있다. typedef로 어떤 타입에 대한 별명을 만든다고 생각해도 된다. 다음 코드는 int* 타입에 대해 IntPtr이라는 새로운 이름을 부여한다. typedef int* IntPtr; 이렇게 새롭게 부여된 타입 이름으로 변수를 선언할 수 있다. 다음의 두 변수 선언은 모두 허용된다. int* p1; IntPtr p2; typedef로..

  • 10.2 키워드 혼동 const와 static은 C++의 키워드 중에서 혼란을 가장 많이 일으킨다. 두 키워드 모두 몇 가지 서로 다른 의미가 있는데 각 사용 방식에 따른 미묘한 부분을 꼭 이해하고 넘어가야 한다. 10.2.1 const 키워드 const는 constant의 축약형으로 무언가 절대 변경되지 말아야 할 것을 지정한다. const로 표시된 변수는 컴파일러에 의해 모니터링되어 변경 시도 시 에러를 발생시킨다. 더불어서 컴파일러가 코드를 최적화할 때 해당 변수가 변경되지 않는다는 사실을 참조하여 더 나은 효율적인 코드를 만들어낼 수도 있다. const키워드의 사용처는 두 부분으로 나눌 수 있다. 하나는 변수나 파라미터고 다른 하나는 메서드다. 10.2.1.1 const변수와 const파라미터 변..

  • 10. C++의 까다롭고 유별난 부분들 C++언어에는 까다로운 문법이나 특이한 의미를 가지는 부분이 많다. 이런 부분이 유별나기는 하지만 C++프로그래머로서 계속 적응하다 보면 어느새 자연스럽게 느껴지기 시작한다. 하지만 어떤 부분은 계속해서 혼란을 야기하기도 한다. 속 시원하게 설명해주는 책이 없거나 자꾸 잊어버려서 다시 찾아봐야 한다거나 둘 중 하나 또는 둘 다가 원인일 것이다. 이 장에서는 가장 끈질기게 프로그래머를 괴롭히는 C++의 까다롭고 유별난 부분을 명쾌하게 설명함으로써 반복되는 혼란을 줄여보고자 한다. 10.1 참조형 전문 개발자가 작성한 C++코드에서는 참조형이 광범위하게 사용된다. 참조형의 정체가 무엇이고, 그 행동 방식은 어떤지 이해하면 큰 도움이 된다. C++에서 참조(referen..