λͺ©λ‘μ 체 κΈ (1099)
KoreanFoodie's Study
GoF μ λμμΈ ν¨ν΄κ³Ό κ°μλ₯Ό μ°Έκ³ νμ¬ λμμΈ ν¨ν΄μ λν λ΄μ©μ μ 리νκ³ μμ΅λλ€. Interface Segregation Principle (μΈν°νμ΄μ€ λΆλ¦¬ μμΉ) μΈν°νμ΄μ€ λΆλ¦¬ μμΉ, ISP λ κ° μΈν°νμ΄μ€κ° μ¬μ©νμ§ μλ λ©μλλ§ μ§μν΄μΌ ν¨μ μλ―Ένλ€. μλ₯Ό λ€μ΄, νλ¦°νΈμ μ€μΊλ κΈ°λ₯μ νλ κΈ°κ³λ₯Ό μΈν°νμ΄μ€λ‘ ꡬννλ€κ³ νμ. struct IMachine { virtual void print(Document& doc) = 0; virtual void fax(Document& doc) = 0; virtual void scan(Document& doc) = 0; }; struct MFP : IMachine { void print(Document& doc) override; void fax(..
GoF μ λμμΈ ν¨ν΄κ³Ό κ°μλ₯Ό μ°Έκ³ νμ¬ λμμΈ ν¨ν΄μ λν λ΄μ©μ μ 리νκ³ μμ΅λλ€. Liskov Substitution Principle (리μ€μ½ν μΉν μμΉ) 리μ€μ½ν μΉν μμΉ (μ€μ¬μ LSP) λ, κΈ°λ° ν΄λμ€κ° μκ³ νμ ν΄λμ€κ° μμλ, κΈ°λ° ν΄λμ€κ° λ€μ΄κ°λ μ리μ νμ ν΄λμ€κ° λ€μ΄κ° μ μμ΄μΌ νλ©°, μ΄λ κΈ°λ° ν΄λμ€λ₯Ό λ£μμλμ μλλλ‘ μ½λκ° μ λμν΄μΌ ν¨μ μλ―Ένλ€. μλ₯Ό λ€μ΄, Rectangle ν΄λμ€λ₯Ό κΈ°λ° ν΄λμ€λ‘ ν Square ν΄λμ€λ₯Ό 보μ. process λΌλ ν¨μμμ λμ΄λ₯Ό 10μΌλ‘ λ§λ ν, λμ΄λ₯Ό λ°ννκ³ μλ€. #include class Rectangle { protected: int width, height; public: Rectangle(const int ..
GoF μ λμμΈ ν¨ν΄κ³Ό κ°μλ₯Ό μ°Έκ³ νμ¬ λμμΈ ν¨ν΄μ λν λ΄μ©μ μ 리νκ³ μμ΅λλ€. Open-Closed Principle (κ°λ°©-νμ μμΉ) OCP λ νμ₯μλ μ΄λ €μκ³ , μμ μλ νμμ μΈ λμμΈ μμΉμ μλ―Ένλ€. (Open for extension, Closed for modification) μλ₯Ό λ€μ΄, λ€μκ³Ό κ°μ ꡬ쑰μ Product λ₯Ό λΆλ₯ν΄μΌ νλ μ½λλ₯Ό μ§ λ€κ³ κ°μ ν΄ λ³΄μ. μκΉκ³Ό μ¬μ΄μ¦ λ±μ κΈ°μ€μΌλ‘ μ νμ λΆλ₯ν κ²μ΄λ€. struct Product { string name; Color color; Size size; }; μ κ²½μ°, enum class μ functor λ₯Ό μ¬μ©νλ©΄ λ€μκ³Ό κ°μ΄ μ½λλ₯Ό 지 μ μμ κ²μ΄λ€. #include #include #include using n..
GoF μ λμμΈ ν¨ν΄κ³Ό κ°μλ₯Ό μ°Έκ³ νμ¬ λμμΈ ν¨ν΄μ λν λ΄μ©μ μ 리νκ³ μμ΅λλ€. Single Responsibility Principle (λ¨μΌ μ± μ μμΉ) Single Responsibility Principle, μ€μ¬μ SRP λ λ¨μΌ μ± μ μμΉμΌλ‘, λͺ¨λ ν΄λμ€κ° νλμ μ± μμ κ°μ§λ©°, ν΄λμ€κ° κ·Έ μ± μμ μμ ν μΊ‘μνν΄μΌ ν¨μ μλ―Ένλ€. μλ μ½λλ₯Ό 보μ. #include #include #include #include #include using namespace std; struct Journal { string title; vector entries; explicit Journal(const string& title) : title{title} { } void add(const stri..
λͺ¨λμ μ½λλ₯Ό μ°Έκ³ νμ¬ ν΅μ¬ λ΄μ©μ κ°μΆλ¦¬κ³ μμ΅λλ€. μμΈν λ΄μ©μ λͺ¨λμ μ½λμ μΉμ΄λ¨Ήλ C++ κ°μ’λ₯Ό μ°Έκ³ ν΄ μ£ΌμΈμ! std::optional (C++17 μ΄μ - ) μλ₯Ό λ€μ΄μ μ΄λ ν map μμ μ£Όμ΄μ§ ν€μ λμνλ κ°μ΄ μλμ§ νμΈνλ ν¨μλ₯Ό λ§λ€κ³ μΆλ€κ³ ν΄λ³΄μ. std::optional μ μ¬μ©νλ©΄ μ΄λ₯Ό κΉλνκ² κ΅¬νν μ μλ€! #include #include #include #include std::optional GetValueFromMap(const std::map& m, int key) { auto itr = m.find(key); if (itr != m.end()) { return itr->second; } // nullopt λ μ μ μλ κ°μ²΄λ‘ λΉμ΄μλ optional μ ..
λͺ¨λμ μ½λλ₯Ό μ°Έκ³ νμ¬ ν΅μ¬ λ΄μ©μ κ°μΆλ¦¬κ³ μμ΅λλ€. μμΈν λ΄μ©μ λͺ¨λμ μ½λμ μΉμ΄λ¨Ήλ C++ κ°μ’λ₯Ό μ°Έκ³ ν΄ μ£ΌμΈμ! νμΌμ μ°Ύμ보μ νμΌ μμ€ν λΌμ΄λΈλ¬λ¦¬λ νμΌ λ°μ΄ν° μ μ μΆλ ₯μ λ΄λΉνλ νμΌ μ μΆλ ₯ λΌμ΄λΈλ¬λ¦¬ () κ³Όλ λ€λ₯΄λ€. μ κ²½μ°, νμΌ νλκ° μ£Όμ΄μ§λ©΄ ν΄λΉ νμΌμ λ°μ΄ν°λ₯Ό μ½μ΄λ΄λ μν μ νμ§λ§, κ·Έ μΈμ νμΌμ κ΄ν μ 보 (νμΌ μ΄λ¦, μμΉ, λ±λ±) μ κ΄ν λ°μ΄ν°λ₯Ό μμ ν μ λ μλ€. λ°λ©΄μ νμΌ μμ€ν λΌμ΄λΈλ¬λ¦¬μ κ²½μ°, νμΌμ κ΄ν μ 보 (νμΌ λ©νλ°μ΄ν)μ λν μ κ·Όμ λμμ£Όλ μν μ μννλ©°, νμΌ μ체λ₯Ό μ½λ μΌμ μννμ§ μλλ€. μ½κ² λ§ν΄μ νλ λμ€ν¬ μ΄λκ°μ μλ a.txt λΌλ νμΌμ μ°Ύκ³ μΆλ€λ©΄ filesystem λΌμ΄λΈλ¬λ¦¬λ₯Ό μ¬μ©νκ² λκ³ , ν΄λΉ νμΌμ μ°Ύ..
λͺ¨λμ μ½λλ₯Ό μ°Έκ³ νμ¬ ν΅μ¬ λ΄μ©μ κ°μΆλ¦¬κ³ μμ΅λλ€. μμΈν λ΄μ©μ λͺ¨λμ μ½λμ μΉμ΄λ¨Ήλ C++ κ°μ’λ₯Ό μ°Έκ³ ν΄ μ£ΌμΈμ! C μ€νμΌμ λμ μμ±μ λ¬Έμ μ #include #include #include int main() { srand(time(NULL)); for (int i = 0; i < 5; i++) { printf("λμ : %d \n", rand() % 100); } return 0; } μμ κ°μ C μ€νμΌμ λμ μμ±μ λ€μκ³Ό κ°μ λ¬Έμ μ λ€μ΄ μλ€ : λμμ²λΌ 보μ΄μ§λ§ 무μμλ‘ μμ±λ κ²μ΄ μλ (첫 μ«μλ§ λ¬΄μμ, λλ¨Έμ§λ μκ³ λ¦¬μ¦μΌλ‘ μμ±) μλκ°μ΄ λ무 μ²μ²ν λ³ν¨ (μμμλ μ΄ λ¨μ) 0 λΆν° 99 κΉμ§ κ· λ±νκ² λμλ₯Ό μμ±νμ§ μμ (rand() μ μ΅λκ°μ λ°λΌ rand() %..
λͺ¨λμ μ½λλ₯Ό μ°Έκ³ νμ¬ ν΅μ¬ λ΄μ©μ κ°μΆλ¦¬κ³ μμ΅λλ€. μμΈν λ΄μ©μ λͺ¨λμ μ½λμ μΉμ΄λ¨Ήλ C++ κ°μ’λ₯Ό μ°Έκ³ ν΄ μ£ΌμΈμ! μ 체 λ¬Έμμ΄ λ§€μΉνκΈ° λ‘κ·Έ νμΌμ μΆμΆνλ μ½λλ₯Ό 보μ. #include #include #include int main() { // μ£Όμ΄μ§ νμΌ μ΄λ¦λ€. std::vector file_names = {"db-123-log.txt", "db-124-log.txt", "not-db-log.txt", "db-12-log.txt", "db-12-log.jpg"}; std::regex re("db-\\d*-log\\.txt"); for (const auto &file_name : file_names) { // std::boolalpha λ bool μ 0 κ³Ό 1 λμ μ false, true..
λͺ¨λμ μ½λλ₯Ό μ°Έκ³ νμ¬ ν΅μ¬ λ΄μ©μ κ°μΆλ¦¬κ³ μμ΅λλ€. μμΈν λ΄μ©μ λͺ¨λμ μ½λμ μΉμ΄λ¨Ήλ C++ κ°μ’λ₯Ό μ°Έκ³ ν΄ μ£ΌμΈμ! ν νλ¦Ώ λ©ν ν¨μ ν νλ¦Ώ λ©ν ν¨μλ μ¬μ€ ν¨μλ μλμ§λ§ λ§μΉ ν¨μμ²λΌ λμνλ ν νλ¦Ώ ν΄λμ€λ€μ μλ―Ένλ€. μ΄λ€μ΄ λ©ν ν¨μμΈ μ΄μ λ 보ν΅μ ν¨μλ€μ κ°μ λν΄ μ°μ°μ μννμ§λ§, λ©ν ν¨μλ νμ μ λν΄ μ°μ°μ μννλ€λ μ μ΄ μ‘°κΈ λ€λ₯΄λ€. μμλ₯Ό 보μ. // μμμΈμ§ μ²΄ν¬ if (is_negative(x)) { // Do something... } // νμ μ΄ void μΈμ§ μ²΄ν¬ if (is_void::value) { } μλ μ½λλ₯Ό λλ €λ³΄μ. #include #include template void tell_type() { if (std::is_void::value) { s..
λͺ¨λμ μ½λλ₯Ό μ°Έκ³ νμ¬ ν΅μ¬ λ΄μ©μ κ°μΆλ¦¬κ³ μμ΅λλ€. μμΈν λ΄μ©μ λͺ¨λμ μ½λμ μΉμ΄λ¨Ήλ C++ κ°μ’λ₯Ό μ°Έκ³ ν΄ μ£ΌμΈμ! decltype decltype ν€μλλ C++ 11 μ μΆκ°λ ν€μλλ‘, decltype λΌλ μ΄λ¦μ ν¨μμ²λΌ μ¬μ©λλ€. decltype(/* νμ μ μκ³ μ νλ μ */) μ΄λ, decltype μ ν¨μμλ λ¬λ¦¬, νμ μ μκ³ μ νλ μμ νμ μΌλ‘ μΉνλκ² λλ€. μλ₯Ό λ€μ΄, #include struct A { double d; }; int main() { int a = 3; decltype(a) b = 2; // int int& r_a = a; decltype(r_a) r_b = b; // int& int&& x = 3; decltype(x) y = 2; // int&& A* ..