쾌락없는 책임 (공부)/Effetive C++ 요약본
-
[Effective C++] 6장(2) - 상속, 그리고 객체 지향 설계쾌락없는 책임 (공부)/Effetive C++ 요약본 2022. 11. 30. 11:21
본 카테고리는 프로텍 미디어의 '이펙티브 C++'을 보고 요약하는 카테고리입니다. 3판을 기준으로 하며 전체 내용이 아닌 간략한 내용만을 요약하고 있습니다. 항목 37 : 어떤 함수에 의해서는 상속받은 기본 매개변수 값은 절대로 재정의하지 말자 간혹 기존의 가상함수가 기본 매개변수를 가지는 일이 있습니다. 이 경우 하위 클래스에서 재정의 한다 해도 변경되지 않습니다. 이건 정적 바인딩으로 정의가 되기에 무조건 부모 크래스의 기본 매개변수를 가져가게 됩니다. 때문에 비가상 인터페이스(NVI)를 사용하는 게 좋습니다. 가상 함수를 호출하는 public 비가상 함수를 부모 클래스에 만들어 주는 것이죠. class Shape{ public: enum ShapeColor { Red, Green, Blue }; v..
-
[Effective C++] 6장(1) - 상속, 그리고 객체 지향 설계쾌락없는 책임 (공부)/Effetive C++ 요약본 2022. 11. 29. 21:42
본 카테고리는 프로텍 미디어의 '이펙티브 C++'을 보고 요약하는 카테고리입니다. 3판을 기준으로 하며 전체 내용이 아닌 간략한 내용만을 요약하고 있습니다. 항목 32 : public 상속 모형은 반드시 "is-a"를 따르도록 만들자 본 "Effective C++"을 작성한 스콧 마이어스가 가장 강조한 부분으로 만일 public 으로 상속을 해 준다면 무조건 is-a 관계의 타입이 되어야 한다는 이야기입니다. 다만 여기서 나온 이야기들 중 '새-펭귄' 의 예시가 인상깊게 남습니다. 이 경우 '새'는 날 수 있을지언정 '펭귄'은 날 수 없기에 is-a 관계를 주면서 이상한 복잡성을 가지게 됩니다. 책에서는 bird 클래스에 fly를 넣지 말고 canflybird 클래스를 파생시킨 뒤 fly를 넣어주는게 좋..
-
[Effective C++] 5장(2) - 구현쾌락없는 책임 (공부)/Effetive C++ 요약본 2022. 5. 16. 17:49
본 카테고리는 프로텍 미디어의 '이펙티브 C++'을 보고 요약하는 카테고리입니다. 3판을 기준으로 하며 전체 내용이 아닌 간략한 내용만을 요약하고 있습니다. 항목 29 : 예외 안정성이 확보되는 그날 위해 싸우고 또 싸우자 이런 함수가 있다고 생각해 봅시다. void PrettyMenu::ChangeBackGround(std::istream& imgSrc) { lock(&mutex); delete bgImage; ++imageChanges; bgImage = new Image(imgSrc); unlock(&mutex); } 위 함수의 경우 예외 안정성에 있어서 최악의 함수가 되는 함수입니다. 일단 예외 안정성을 가지는 함수는 자원이 새지 않고 자료구조가 더럽혀지지 않아야 합니다. 위의 경우 new 에서 ..
-
[Effective C++] 5장(1) - 구현쾌락없는 책임 (공부)/Effetive C++ 요약본 2022. 4. 2. 20:41
본 카테고리는 프로텍 미디어의 '이펙티브 C++'을 보고 요약하는 카테고리입니다. 3판을 기준으로 하며 전체 내용이 아닌 간략한 내용만을 요약하고 있습니다. 항목 26 : 변수 정의는 늦출 수 있는 데까지 늦추는 근성을 발휘하자 생성자, 소멸자를 끌고 다니는 타입으로 변수를 정의하면 2가지 비용을 물게 됩니다. - 프로그램 제어 흐름이 변수 정의에 닿을 때 생성자 호출 비용 - 유효범위를 벗어날 때 소멸자가 호출되는 비용 그리고 사용하지 않는 변수라면 비용이 쓸데없이 발생하게 됩니다. std::string encryptPassword(const std::string& password){ using namespace std; string encryptrd; // 이걸 너무 빨리 선언함 if(password..
-
[Effective C++] 4장(3) - 설계 및 선언쾌락없는 책임 (공부)/Effetive C++ 요약본 2022. 3. 31. 12:18
본 카테고리는 프로텍 미디어의 '이펙티브 C++'을 보고 요약하는 카테고리입니다. 3판을 기준으로 하며 전체 내용이 아닌 간략한 내용만을 요약하고 있습니다. 항목 24 : 타입 변환이 모든 매개변수에 대해 적용되어야 한다면 비멤버 함수를 선언하자 책의 처음 부분에서는 클래스의 암시적 변환을 지원하는 건 안 좋은 생각이다라고 했었는데 이 규칙에도 예외가 있습니다. 바로 숫자 타입을 만들 때입니다. class Rational{ public: Rational (int numerator = 0, int denominator = 1); int numerator() const; int denominator() const; private: ... }; 유리수를 나타내는 클래스가 있을 때 이 클래스에 각종 연산을 해주..
-
[Effective C++] 4장(2) - 설계 및 선언쾌락없는 책임 (공부)/Effetive C++ 요약본 2022. 3. 29. 15:40
본 카테고리는 프로텍 미디어의 '이펙티브 C++'을 보고 요약하는 카테고리입니다. 3판을 기준으로 하며 전체 내용이 아닌 간략한 내용만을 요약하고 있습니다. 항목 21 : 함수에서 객체를 반환해야 할 경우에 참조자를 반환하려고 들지 말자 함수 인자로 & 가 좋다고 해도 너무 무분별하게 사용하다가는 있지도 않은 객체의 참조가를 넘기게 되는 경우가 있습니다. class Rational{ public: Rational(int numerator = 0, int denominator = 1); ... private: int n, d; friend const Rational operator * (const Rational& lhs, const Rational& rhs); }; 위와 같은 클래스가 있을 때 opera..
-
[Effective C++] 4장(1) - 설계 및 선언쾌락없는 책임 (공부)/Effetive C++ 요약본 2022. 3. 17. 13:35
본 카테고리는 프로텍 미디어의 '이펙티브 C++'을 보고 요약하는 카테고리입니다. 3판을 기준으로 하며 전체 내용이 아닌 간략한 내용만을 요약하고 있습니다. 항목 18 : 인터페이스 설계는 제대로 쓰기엔 쉽게, 엉터리로 쓰기엔 어렵게 하자 C++에서는 함수, 클래스 템플릿 등 다 인터페이스로 이루어져 있다고 보면 되고, 사용자들을 위해서 이런 인터페이스를 잘 쓰기엔 쉽고 잘못된 경우는 경고해주는 인터페이스를 만들어주고 싶습니다. 예를 들어 날짜를 나타내는 클래스가 있다고 합시다. class Date{ public: Date(int month, int day, int year); ... }; 여기서는 매개변수 순서가 잘못될 여지, 어이없는 수가 들어갈 경우가 있습니다. 그리고 이때 새로운 타입을 들여와 인..
-
[Effective C++] 3장(2) - 자원 관리쾌락없는 책임 (공부)/Effetive C++ 요약본 2022. 3. 13. 17:11
본 카테고리는 프로텍 미디어의 '이펙티브 C++'을 보고 요약하는 카테고리입니다. 3판을 기준으로 하며 전체 내용이 아닌 간략한 내용만을 요약하고 있습니다. 항목 16 : new 및 delete를 사용할 때는 형태를 반드시 맞추자! std::string *stringArray = new strd::string[100]; ... delete stringArray; 딱 보면 이상한 코드입니다. 이러면 이후 99개의 string들이 delete될 수 없습니다. new 키워드로 동적 할당을 하면 아래 메모리 할당, 할당된 메모리에 대해 한개 이상의 생성자가 호출 됩니다. delete 표현식에서는 다른 2가지 내부 동작을 하게 됩니다. 할당된 메모리에 대해 한 개 이상의 소멸자 호출, 메모리 해제. 여기서 삭제되..