λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

전체 κΈ€126

[C++] 18. Standard Library μ •λ³΅ν•˜κΈ°(STL) STLμ΄λž€? C++ STL(Standard Template Library)은 C++ ν‘œμ€€ 라이브러리의 μ€‘μš”ν•œ ꡬ성 μš”μ†Œ 쀑 ν•˜λ‚˜λ‘œ, μ—¬λŸ¬ μœ μš©ν•œ 데이터 ꡬ쑰와 μ•Œκ³ λ¦¬μ¦˜μ„ μ œκ³΅ν•˜λŠ” μ»¬λ ‰μ…˜μž…λ‹ˆλ‹€. STL은 C++ ν‘œμ€€μ΄λ―€λ‘œ C++ 언어에 λ‚΄μž₯λ˜μ–΄ 있으며, λ§Žμ€ C++ μ»΄νŒŒμΌλŸ¬μ™€ ν™˜κ²½μ—μ„œ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. STL의 핡심 μ•„μ΄λ””μ–΄λŠ” 'ν…œν”Œλ¦Ώ(Template)'을 μ‚¬μš©ν•˜μ—¬ μ œλ„€λ¦­(generic)ν•œ λ°©μ‹μœΌλ‘œ κ΅¬ν˜„λœ 데이터 ꡬ쑰와 μ•Œκ³ λ¦¬μ¦˜μ„ μ œκ³΅ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. μ΄λ ‡κ²Œ κ΅¬ν˜„λœ STL μ»¨ν…Œμ΄λ„ˆμ™€ μ•Œκ³ λ¦¬μ¦˜μ€ νŠΉμ • μžλ£Œν˜•μ— μ’…μ†λ˜μ§€ μ•Šκ³ , λ‹€μ–‘ν•œ μžλ£Œν˜•μ— λŒ€ν•΄ μž¬μ‚¬μš©λ  수 μžˆμŠ΅λ‹ˆλ‹€. 이λ₯Ό 톡해 μ½”λ“œμ˜ μž¬μ‚¬μš©μ„±κ³Ό μΌλ°˜μ„±μ„ 높일 수 μžˆμŠ΅λ‹ˆλ‹€. STL은 주둜 λ‹€μŒκ³Ό 같은 μ„Έ κ°€μ§€ μš”μ†Œλ‘œ κ΅¬μ„±λ©λ‹ˆλ‹€. 1. μ»¨ν…Œμ΄λ„ˆ (Conta.. 2023. 8. 6.
[STL] μŠ€λ§ˆνŠΈν¬μΈν„°(std::unique_ptr, std::shared_ptr, std::weak_ptr) μŠ€λ§ˆνŠΈν¬μΈν„° μŠ€λ§ˆνŠΈν¬μΈν„°λŠ” C++에 μΆ”κ°€λœ κΈ°λŠ₯ 쀑에 맀우 μ€‘μš”ν•˜λ‹€κ³  ν•  수 μžˆμŠ΅λ‹ˆλ‹€. C++의 치λͺ…적인 단점 쀑 ν•˜λ‚˜κ°€ λ©”λͺ¨λ¦¬ 관리λ₯Ό μ§μ ‘ν•˜λŠ” 데에 μžˆμ–΄μ„œ 리슀크λ₯Ό λ– μ•ˆκΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€. λ©”λͺ¨λ¦¬ 관리λ₯Ό μžλ™μœΌλ‘œ ν•΄μ£ΌλŠ” μŠ€λ§ˆνŠΈν¬μΈν„°λ‘œ μΈν•΄μ„œ λͺ¨λ˜ C++이 ν•œμΈ΅ ν’λΆ€ν•΄μ‘ŒμŠ΅λ‹ˆλ‹€. 슀마트 ν¬μΈν„°λŠ” λ©”λͺ¨λ¦¬ λˆ„μˆ˜μ™€ κ΄€λ ¨λœ 문제λ₯Ό ν•΄κ²°ν•˜λŠ”λ° 큰 도움을 μ£Όλ©°, μžμ› 관리λ₯Ό 보닀 μ•ˆμ „ν•˜κ²Œ ν•˜κ³  μ½”λ“œμ˜ 가독성과 μœ μ§€λ³΄μˆ˜μ„±μ„ ν–₯μƒμ‹œν‚΅λ‹ˆλ‹€. std::unique_ptr std::unique_ptr은 λ…μ μ μœΌλ‘œ μ†Œμœ ν•˜λŠ” 포인터λ₯Ό λ‚˜νƒ€λ‚΄λ©°, 객체에 λŒ€ν•΄ 단일 μ†Œμœ κΆŒμ„ κ°–μŠ΅λ‹ˆλ‹€. 즉, 였직 ν•˜λ‚˜μ˜ std::unique_ptr만이 νŠΉμ • 객체λ₯Ό μ†Œμœ ν•˜κ³ , μ΄ν›„μ—λŠ” ν•΄λ‹Ή 객체의 μ†Œμœ κΆŒμ„ λ‹€λ₯Έ std::unique_ptr둜 μ΄μ „ν•˜κ±°λ‚˜, μ†Œ.. 2023. 8. 5.
[STL] std::tuple, std::make_tuple, std::tie, std::ignore std::tuple μš°λ¦¬κ°€ STL μ»¨ν…Œμ΄λ„ˆλ₯Ό μ‚¬μš©ν•  λ•Œ, 보톡은 ν•œ κ°€μ§€ νƒ€μž…μœΌλ‘œ μ €μž₯ν•©λ‹ˆλ‹€. std::array와 std::vector, std::set은 ν•˜λ‚˜μ˜ ν…œν”Œλ¦Ώ 인자λ₯Ό λ°›κ³ , std::map, std::pairλŠ” key와 value, first와 second둜 두 개의 νƒ€μž…μ„ λ°›μŠ΅λ‹ˆλ‹€. μ„Έ 개 μ΄μƒμ˜ νƒ€μž…μ„ μ €μž₯ν•˜κ³  μ‹Άλ‹€λ©΄ μ–΄λ–»κ²Œ ν•΄μ•Όν• κΉŒμš”? 닡은 std::tuple에 μžˆμŠ΅λ‹ˆλ‹€. std::tuple은 C++11 이후에 λ„μž…λœ 클래슀 ν…œν”Œλ¦ΏμœΌλ‘œ, μ„œλ‘œ λ‹€λ₯Έ νƒ€μž…μ˜ μ›μ†Œλ“€μ„ 단일 객체둜 묢을 수 μžˆμŠ΅λ‹ˆλ‹€. 각 μ›μ†Œμ—λŠ” μˆœμ„œλŒ€λ‘œ 인덱슀(0λΆ€ν„° μ‹œμž‘)둜 μ ‘κ·Όν•  수 μžˆμŠ΅λ‹ˆλ‹€. #include // μ˜ˆμ‹œ: int와 double νƒ€μž…μ„ κ°€μ§€λŠ” νŠœν”Œμ„ μƒμ„±ν•©λ‹ˆλ‹€. std::tuple myTuple(42, 3.. 2023. 8. 4.
[C++] 17. μ˜ˆμ™Έμ²˜λ¦¬(Exception), std::exception μ˜ˆμ™Έμ²˜λ¦¬(Exception) C++μ—μ„œ μ˜ˆμ™Έμ²˜λ¦¬λŠ” ν”„λ‘œκ·Έλž¨μ˜ μ‹€ν–‰ 쀑에 λ°œμƒν•˜λŠ” μ˜ˆμ™Έ 상황을 κ°μ§€ν•˜κ³  μ μ ˆν•œ 쑰치λ₯Ό μ·¨ν•˜λŠ” λ©”μ»€λ‹ˆμ¦˜μž…λ‹ˆλ‹€. 이λ₯Ό 톡해 ν”„λ‘œκ·Έλž¨μ˜ μ•ˆμ •μ„±μ„ 높이고 μ˜ˆμƒμΉ˜ λͺ»ν•œ λ¬Έμ œμ— λŒ€μ²˜ν•  수 있게 λ©λ‹ˆλ‹€. μ˜ˆμ™ΈλŠ” 일반적으둜 ν”„λ‘œκ·Έλž¨μ΄ μ‹€ν–‰ 쀑에 λ°œμƒν•˜λŠ” 였λ₯˜ λ˜λŠ” μ˜ˆμƒμΉ˜ λͺ»ν•œ 상황을 λ‚˜νƒ€λƒ…λ‹ˆλ‹€. μ΄λŸ¬ν•œ 상황을 μ²˜λ¦¬ν•˜λŠ” 데 μ‚¬μš©λ˜λŠ” 기본적인 C++ μ˜ˆμ™Έ 처리 λ©”μ»€λ‹ˆμ¦˜μ— λŒ€ν•΄ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€. μ˜ˆμ™Έ λ˜μ§€κΈ° (Throwing Exceptions) μ˜ˆμ™Έλ₯Ό 던질 λ•ŒλŠ” throw ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€. throw ν‚€μ›Œλ“œ λ’€μ—λŠ” μ˜ˆμ™Έ 객체가 μ˜΅λ‹ˆλ‹€. 일반적으둜 μ˜ˆμ™Έ κ°μ²΄λŠ” κΈ°λ³Έ 데이터 νƒ€μž…μ΄λ‚˜ μ‚¬μš©μž μ •μ˜ 클래슀 객체일 수 μžˆμŠ΅λ‹ˆλ‹€. void doSomething(int value) { if (value.. 2023. 7. 23.
[C++] 16-3. 상속(Inheritance)κ΄€κ³„μ˜ μΈμŠ€ν„΄μŠ€ 생성, μ†Œλ©Έ 상속 κ΄€κ³„μ—μ„œ μƒμ„±λ˜λŠ” μΈμŠ€ν„΄μŠ€μ˜ μœ ν˜• 쀑 λ‹€ν˜•μ„±μ„ 기반으둜 λ§Œλ“€μ–΄μ§„ μΈμŠ€ν„΄μŠ€λŠ” 보톡 νŒŒμƒν΄λž˜μŠ€(Derived Class)λ₯Ό 톡해 κΈ°λ³Έ 클래슀(Base Class)λ₯Ό μ΄ˆκΈ°ν™”ν•©λ‹ˆλ‹€. 상속 κ΄€κ³„μ—μ„œ νŒŒμƒ 클래슀의 μΈμŠ€ν„΄μŠ€λ₯Ό λ§Œλ“ λ‹€ ν•˜λ”λΌλ„ λ‚΄λΆ€μ μœΌλ‘œλŠ” κΈ°λ³Έ 클래슀의 μΈμŠ€ν„΄μŠ€κΉŒμ§€ λ§Œλ“€μ–΄μ§€μ§€λ§Œ κΈ°λ³Έ 클래슀의 μƒμ„±μžλŠ” μž„μ˜λ‘œ ν˜ΈμΆœν•  수 μ—†κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€. λ°˜λŒ€λ‘œ μΈμŠ€ν„΄μŠ€μ˜ μ†Œλ©Έλ„ λ§ˆμ°¬κ°€μ§€μž…λ‹ˆλ‹€. νŒŒμƒ 클래슀만 μ†Œλ©Έν•˜κ³  κΈ°λ³Έ 클래슀의 μ˜μ—­μ΄ μ†Œλ©Έλ˜μ§€ μ•ŠμœΌλ©΄ λ©”λͺ¨λ¦¬ λˆ„μˆ˜(Memory Leak)κ°€ λ°œμƒν•  κ°€λŠ₯성이 있기 λ•Œλ¬Έμ— 이 λ˜ν•œ νŒŒμƒ ν΄λž˜μŠ€μ—μ„œ μ±…μž„μ Έμ•Ό ν•©λ‹ˆλ‹€. μƒμ„±μž(Contructor) κΈ°λ³Έ 클래슀(Base Class)의 μƒμ„±μž 호좜: νŒŒμƒ 클래슀(Derived Class)의 μƒμ„±μžκ°€ 호좜되기 전에 λ¨Όμ € κΈ°λ³Έ .. 2023. 6. 29.
[C++] 16-2. λ‹€ν˜•μ„±(Polymorphism)κ³Ό 좔상 클래슀(Abstract Class) 순수 가상 ν•¨μˆ˜(Pure Virtual Function)κ³Ό 좔상 클래슀(Abstract Class) 순수 가상 ν•¨μˆ˜(Pure Virtual Function)λŠ” ν•¨μˆ˜μ˜ μ •μ˜λ₯Ό κ°€μ§€μ§€ μ•Šκ³  μ„ μ–Έλ§Œ ν¬ν•¨ν•˜λŠ” 가상 ν•¨μˆ˜μž…λ‹ˆλ‹€. 순수 가상 ν•¨μˆ˜λŠ” = 0으둜 ν‘œμ‹œλ˜λ©°, νŒŒμƒ ν΄λž˜μŠ€μ—μ„œ λ°˜λ“œμ‹œ κ΅¬ν˜„λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€. 순수 가상 ν•¨μˆ˜λ₯Ό κ°€μ§„ ν΄λž˜μŠ€λŠ” 좔상 클래슀둜 κ°„μ£Όλ˜μ–΄ 객체λ₯Ό 직접 생성할 수 μ—†μŠ΅λ‹ˆλ‹€. 좔상 ν΄λž˜μŠ€λŠ” 주둜 μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ •μ˜ν•˜κΈ° μœ„ν•΄ μ‚¬μš©λ©λ‹ˆλ‹€. 순수 가상 ν•¨μˆ˜μ™€ 일반 가상 ν•¨μˆ˜μ˜ 차이점은 순수 가상 ν•¨μˆ˜λŠ” κΈ°λ³Έ ν΄λž˜μŠ€μ—μ„œ μ •μ˜λ₯Ό κ°€μ§€μ§€ μ•Šκ³ , νŒŒμƒ ν΄λž˜μŠ€μ—μ„œ κ΅¬ν˜„ν•΄μ•Ό ν•œλ‹€λŠ” μ μž…λ‹ˆλ‹€. 이λ₯Ό 톡해 λ‹€ν˜•μ„±μ„ μ§€μ›ν•˜λ©΄μ„œλ„ νŒŒμƒ ν΄λž˜μŠ€μ—μ„œ 각각의 독립적인 λ™μž‘μ„ κ΅¬ν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 가상 ν•¨μˆ˜μ™€ 순수 가상 함.. 2023. 6. 24.