C, C++/전문가를 위한 C++ (책)
전문가를 위한 C++ 4장 : 프로그램 디자인 (1)
4장 전문가다운 C++ 프로그램 디자인 본격적으로 코드를 작성하기 전에 반드시 프로그램 디자인부터 해야 한다. 본능을 거스르는 기분이 들더라도 프로젝트를 시작할 때 시간을 충분히 투자해서 제대로 디자인하면 오히려 프로젝트 완료 시점을 앞당길 수 있다. 1. 프로그램 디자인의 정의 프로젝트를 새로 시작하거나 기존에 구현했던 프로그램을 개선하기 시작할 때 가장 먼저 할 일은 요구사항을 분석하는 것이다. 요구사항은 이해 당사자와 함께 논의한다. 요구사항 분석 단계에서 가장 핵심적인 결과는 기능 요구사항 문서다. 이 문서는 작성할 코드가 정확히 할 일만 표현하고, 그 일을 달성하는 구체적인 방법은 생략한다. 요구사항 분석 과정에서 비기능 요구사항 문서도 나올 수 있다. 이 문서는 최종 결과로 나오는 시스템에 대..
전문가를 위한 C++ : 3장 코딩 스타일
3장 코딩 스타일 제대로 작동하는 코드를 작성하는 것만이 프로그래머가 할 일의 전부는 아니다. 기본적인 코드 작성법은 누구나 쉽게 배울 수 있다. 진정한 실력은 코드를 얼마나 세련되게 작성하느냐에서 드러난다. 1. 코딩 스타일의 중요성 코드를 작성할 때는 항상 누군가가 이 코드를 넘겨받는다고 생각하자. 자신이 직접 작성한 코드도 나중에 보면 기본 로직조차 기억나지 않을 수 있다. 잘 작성된 코드에서 볼 수 있는 공통적인 속성은 다음과 같다. - 문서화 - 분할 - 명명 규칙 - 언어 사용 - 포매팅 2. 코드 문서화 프로그래밍에서 말하는 문서화(documentation)란 주로 소스 파일에 작성된 주석을 의미한다. 주석은 여러분이 코드를 작성할 당시 가졌던 생각을 다른 이에게 전할 수 있는 좋은 기회다...
전문가를 위한 C++ : 2장 스트링 (2)
1. C++ std::string 클래스 string myString = "hello"; myString += "!"; string myOtherString = myString; if (myString == myOtherString) { myOtherString[0] = 'H'; } cout
전문가를 위한 C++ : 2장 스트링 (1)
1. C 스타일 스트링 C 언어는 스트링을 문자 배열로 표현했다. 스트링의 마지막에 널 문자(\0)를 붙여서 스트링이 끝났음을 표현했다. 이러한 널 문자에 대한 공식 기호는 NUL이다. 여기서는 L이 두 개가 아니라 하나며 NULL 포인터와는 다른 값이다. char* copyString(const char* str) { char* result = new char[strlen(str)];// 버그! 한 칸 부족하다. strcpy(result, str); return result; } 위 copyString() 함수 코드에 오류가 하나 있다. strlen() 함수에서 리턴하는 값은 스트링을 저장하는 데 사용된 메모리 크기가 아니라 스트링 길이라는 점이다. 따라서 strlen()은 'hello'란 스트링에 대..
전문가를 위한 C++ : 1장 (4)
1. 유니폼 초기화 c++ 11 이전에는 타입의 초기화 방식이 일정하지 않았다. 예를 들어 다음과 같이 원을 정의할 때 한 번은 구조체로, 한 번은 클래스로 작성한 경우를 살펴보자. struct CircleStruct { int x, y; double radius; }; class CircleClass { public: CircleClass(int x, int y, double radius) : mX(x), mY(y), mRadius(radius) {} private: int mX, mY; double mRadius; }; c++ 11 이전에는 CircleStruct 타입 변수와 CircleClass 타입 변수를 초기화하는 방법이 서로 달랐다. CircleStruct myCircle1 = { 10, 10..
전문가를 위한 C++ : 1장 (3)
1. unique_ptr, shared_ptr 배열 생성 unique_ptr은 C 스타일 배열을 저장하는 데도 활용할 수 있다. 다음 예는 열 개의 Employee 인스턴스로 구성된 배열을 생성하여 이를 unique_ptr에 저장하고, 배열에 담긴 원소를 접근하는 방법을 보여주고 있다. auto employees = make_unique(10); cout
전문가를 위한 C++ : 1장 (2)
1. enum과 enum class enum은 원래 타입을 엄격하게 따지지 않는다. 타입을 엄격히 따지는 것을 '스트롱 타입' 또는 '타입에 안전하다(타입 세이프하다)'고 표현한다. enum 타입은 항상 정수로 해석하기 때문에 선언한 형태에 관계없이 모든 enum 타입을 서로 비교할 수 있다. 타입을 엄격하게 적용하고 싶다면 enum class를 사용한다. enum class PieceType { King = 1, Queen,// 2 Rook = 10, Pawn// 11 }; enum class로 정의한 열거 타입 값들의 이름은 스코프(유효 범위)가 자동으로 확장되지 않는다. 다시 말해 enum class 스코프 안에서만 유효하다. 따라서 열거 타입 값을 사용할 때마다 다음과 같이 스코프 지정 연산자를 ..
전문가를 위한 C++ : 1장 (1)
위 책을 읽으며 공부한 내용을 정리한 글입니다. 1. using문 헤더 파일 안에서는 절대로 using 문을 작성하면 안된다. (책) 일반적으로 헤더 파일(*.h)에는 using 지시문을 넣지 마세요. 해당 헤더를 포함하는 모든 파일이 네임스페이스의 모든 식별자를 범위로 가져오기 때문에 이름 숨김 및 이름 충돌 문제가 발생할 수 있으며, 디버그하기 매우 어렵습니다. 헤더 파일에는 항상 정규화된 이름을 사용하세요. (MSDN) https://docs.microsoft.com/ko-kr/cpp/cpp/namespaces-cpp?view=msvc-170&viewFallbackFrom=vs-2019 2. c++ 17 중첩된 네임 스페이스 기존에는 이런 방식 namespace MyLibraries { namesp..