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

전체 κΈ€106

[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.
[C++] 16-1. 상속(Inheritance)κ³Ό 가상 ν•¨μˆ˜(Virtual Function) 이번 ν¬μŠ€νŒ…λΆ€ν„°λŠ” κ²½μ–΄μ²΄λ‘œ 글을 μ“°κ² μ”λ‹ˆλ‹€. μ—¬νƒœκΉŒμ§€ ν‰μ–΄μ²΄λ‘œ ν¬μŠ€νŒ…ν–ˆλŠ”λ°, λ”±λ”±ν•œ λŠλ‚Œμ΄ λ“€μ–΄μ„œ μ§€κΈˆλΆ€ν„°λŠ” μ’€ 더 μΉœμ ˆν•˜κ²Œ μžμ„Έν•˜κ²Œ μ„€λͺ…ν•˜λ €κ³  경어체λ₯Ό μ‚¬μš©ν•˜κ² μŠ΅λ‹ˆλ‹€! 상속(Inheritance) 객체 지ν–₯의 4λŒ€ 원칙(μΊ‘μŠν™”, 좔상화, 상속, λ‹€ν˜•μ„±) 쀑 상속 그리고 λ‹€ν˜•μ„±μ„ 닀뀄보렀고 ν•©λ‹ˆλ‹€. 상속은 객체지ν–₯의 κ½ƒμ΄μž 핡심이라고도 ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 클래슀 μžμ²΄λ§ŒμœΌλ‘œλ„ 객체끼리의 관계λ₯Ό ν‘œν˜„ν•œλ‹€λ©΄, 상속을 ν†΅ν•œ λ‹€ν˜•μ„±μ€ 객체 κ°„μ˜ 관계λ₯Ό λ”μš± ν’μ„±ν•˜κ³  μ‰½κ²Œ ν‘œν˜„ν•  수 μžˆλ„λ‘ ν•˜μ£ . 상속을 톡해 기쑴에 μ •μ˜λœ 클래슀λ₯Ό 기반으둜 μƒˆλ‘œμš΄ 클래슀λ₯Ό μ •μ˜ν•  수 있으며, κ³΅ν†΅λœ 것을 κ³΅μœ ν•˜κ³  ν™•μž₯ κ°€λŠ₯ν•˜λ„λ‘ λ§Œλ“€ 수 μžˆμŠ΅λ‹ˆλ‹€. 상속은 클래슀 κ°„μ˜ 관계λ₯Ό μ„€μ •ν•˜μ—¬ μ½”λ“œ μž¬μ‚¬μš©κ³Ό 계측적 ꡬ쑰λ₯Ό κ΅¬μΆ•ν•˜λŠ” 데 μ‚¬μš©λ©λ‹ˆ.. 2023. 6. 23.
[C++] 15. 클래슀(class)와 ꡬ쑰체(struct) # ꡬ쑰체(struct) ꡬ쑰체(struct)λŠ” κ΄€λ ¨λœ 데이터λ₯Ό λ¬Άμ–΄ ν‘œν˜„ν•˜κΈ° μœ„ν•œ μ‚¬μš©μž μ •μ˜ 데이터 ν˜•μ‹μž…λ‹ˆλ‹€. κ΅¬μ‘°μ²΄λŠ” 멀버 λ³€μˆ˜μ˜ μ§‘ν•©μœΌλ‘œ 이루어지며, 각 멀버 λ³€μˆ˜λŠ” λ‹€λ₯Έ 데이터 ν˜•μ‹μ„ κ°€μ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€. κ΅¬μ‘°μ²΄λŠ” ν΄λž˜μŠ€μ™€ μœ μ‚¬ν•˜μ§€λ§Œ ν΄λž˜μŠ€μ™€λŠ” λͺ‡ 가지 μ€‘μš”ν•œ 차이점이 μžˆμŠ΅λ‹ˆλ‹€. κ΅¬μ‘°μ²΄λŠ” 일반적으둜 κ΄€λ ¨λœ 데이터λ₯Ό κ·Έλ£Ήν™”ν•˜κΈ° μœ„ν•΄ μ‚¬μš©λ˜λ©°, νŠΉμ • λ™μž‘μ„ κ΅¬ν˜„ν•˜κΈ° μœ„ν•œ 멀버 ν•¨μˆ˜λ₯Ό κ°€μ§ˆ 수 μ—†μŠ΅λ‹ˆλ‹€. 사싀 C++μ—μ„œλŠ” 멀버 ν•¨μˆ˜λ₯Ό μ–Όλ§ˆλ“ μ§€ κ°€μ§ˆ μˆ˜λŠ” μžˆμ§€λ§Œ, 데이터λ₯Ό λ‹€λ£¨λŠ” ꡬ쑰체의 νŠΉμ„±μƒ λ§Žμ€ κΈ°λŠ₯을 ν•˜λŠ” ν•¨μˆ˜λŠ” μ •μ˜ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.(그럴 λ°”μ—” 클래슀λ₯Ό 써야 ν•©λ‹ˆλ‹€) 멀버 λ³€μˆ˜λŠ” 주둜 ꡬ쑰체 λ‚΄μ—μ„œ 직접 μ ‘κ·Όλ˜μ–΄ μ‚¬μš©λ©λ‹ˆλ‹€. λ˜ν•œ, ꡬ쑰체의 기본적인 κ°€μ‹œμ„±μ€ public으둜 μ„€μ •λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. 즉.. 2023. 6. 9.