전문가를 위한 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장 (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..