๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ“– C๋ž‘ C++

(15)
C++ ์Šค๋งˆํŠธ ํฌ์ธํ„ฐ๋ฅผ ์•Œ์•„๋ณด์ž - (1) unique_ptr C++์—๋Š” ์•„์ฃผ ์œ ์šฉํ•œ ๊ฐœ๋…์ด ์žˆ๋‹ค ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๋ฅผ ํ•  ๋•Œ๋งˆ๋‹ค ๊ณ ๋ คํ•ด์•ผํ•  ์ ์€ ๋ฐ”๋กœ "๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜"์ธ๋ฐ, ๊ทธ๊ฒƒ์— ๋Œ€ํ•ด ์กฐ๊ธˆ์€ ์ž์œ ๋กญ๊ฒŒ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋Š” ์Šค๋งˆํŠธ ํฌ์ธํ„ฐ๋ผ๋Š” ๊ฒƒ์ด๋‹ค ๊ฐ€์žฅ ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š”๊ฑด shared_ptr์ด์—ˆ๋Š”๋ฐ, ์—ฌ๋Ÿฌ ๊ฐœ๊ฐ€ ์žˆ๋Š”๊ฑด ์ด์œ ๊ฐ€ ์žˆ๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์–ด์„œ ํ•˜๋‚˜์”ฉ ์ •๋ฆฌํ•˜๋ ค๊ณ  ํ•œ๋‹ค (๋ชจ๋˜ C++ ์ž…๋ฌธ ๊ต์žฌ๋ฅผ ์ฐธ๊ณ ํ•ด์„œ ์ž‘์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ฅ) 1. ์Šค๋งˆํŠธ ํฌ์ธํ„ฐ์—๋Š” ๋ญ๊ฐ€ ์žˆ์ง€? ์Šค๋งˆํŠธ ํฌ์ธํ„ฐ๋Š” 3๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค 1) unique_ptr (์˜ค๋Š˜ํ• ๊ฑฐ) 2) shared_ptr 3) weak_ptr ์š”๋ ‡๊ฒŒ 3๊ฐ€์ง€ ์ธ๋ฐ, ์ฐธ๊ณ ๋กœ ์Šค๋งˆํŠธ ํฌ์ธํ„ฐ๋Š” C++ 11์—์„œ ๋„์ž…๋œ ๊ฐœ๋…์ด๋‹ค C++ 03์—๋Š” auto_ptr๋ผ๋Š” ๊ฒƒ๋„ ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค -_-a ํ•˜์ง€๋งŒ ์‚ญ์ œ๋จ ์“ฐ์ง€๋งˆ์…ˆ 1-1) ์Šค๋งˆํŠธ ํฌ์ธํ„ฐ ํ—ค๋”๋Š”? #include or ..
Boost Asio์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด์ž Boost ๋น„๋™๊ธฐ ํ†ต์‹  ์„œ๋ฒ„&ํด๋ผ์ด์–ธํŠธ๋ฅผ ์ •๋ฆฌ์ค‘... ํ•„์ˆ˜ ๊ฐœ๋…์ธ Asio์— ๋Œ€ํ•ด์„œ ๋จผ์ € ์ •๋ฆฌํ•ด์•ผ๊ฒ ๋‹ค ์ƒ๊ฐ๋“ค์–ด์„œ ๋”ฐ๋กœ ๊ฒŒ์‹œ๊ธ€๋กœ ๋บ๋‹ค ใ…ˆใ„ฑใ„ด boost ํ™ˆํŽ˜์ด์ง€์— ์„ค๋ช…์ด ์ž˜ ๋˜์–ด์žˆ์–ด์„œ, ์š”๊ฑธ ์ •๋ฆฌํ•˜๋ ค๊ณ  ํ•œ๋‹ค (์ฒจ๋ถ€ ๋งํฌ ์ฐธ์กฐ) 1. Boost.Asio ( Asynchronous I/O ) ๊ฐ€ ๋ญ์ง€? Boost ๊ณต์‹ํ™ˆํ”ผ: Boost.Asio is a cross-platform C++ library for network and low-level I/O programming that provides developers with a consistent asynchronous model using a modern C++ approach. cf) ์–ด๋–ค ์šด์˜์ฒด์ œ์—ฌ๋„, ์‹คํ–‰ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋™์ž‘ํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋Š” ํ”Œ๋žซํผ์ด ํฌ๋กœ์Šค..
C++ ํด๋ž˜์Šค ๋ฉค๋ฒ„๋ณ€์ˆ˜ ์ดˆ๊ธฐํ™”๋ฅผ ์•Œ์•„๋ณด์ž ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ, ํด๋ž˜์Šค ์•ˆ์— ์žˆ๋Š” ๋ฉค๋ฒ„ ๋ณ€์ˆ˜์— ๋Œ€ํ•ด์„œ ์ดˆ๊ธฐํ™”๋ฅผ ํ•ด์ค˜์•ผํ•œ๋‹ค๋Š” ๊ฒƒ์€ ์ž˜ ์•Œ๊ณ  ์žˆ๋Š”๋ฐ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ฐฉ๋ฒ• ์ค‘ ์–ด๋Š ๊ฒƒ์„ ์จ์•ผํ• ๊นŒ? ์— ๋Œ€ํ•ด์„œ ๋‹ค๋ค„๋ณด๋ ค๊ณ  ํ•œ๋‹ค ๋˜ ํ—ท๊ฐˆ๋ฆฌ๋Š” ์ผ์ด ์—†๋„๋ก ~~ - ํด๋ž˜์Šค ๋ฉค๋ฒ„ ๋ณ€์ˆ˜๋ž€ - ํด๋ž˜์Šค ๋ฉค๋ฒ„ ๋ณ€์ˆ˜ ์ดˆ๊ธฐํ™” ๋ฐฉ๋ฒ• 3๊ฐ€์ง€ 1. ํด๋ž˜์Šค ๋ฉค๋ฒ„ ๋ณ€์ˆ˜ (Class Member Variable) ๋ž€ ํด๋ž˜์Šค ๋ฉค๋ฒ„ ๋ณ€์ˆ˜ ์ดˆ๊ธฐํ™”๋ฅผ ํ•˜๋ ค๋ฉด, ๋จผ์ € ๋ฉค๋ฒ„ ๋ณ€์ˆ˜๋ฅผ ์•Œ์•„์•ผํ•˜๋‹ˆ๊นŒ ์งง๊ฒŒ ์ •๋ฆฌ๋งŒ ํ•˜๋ ค๊ณ  ํ•œ๋‹ค ์œ„ํ‚ค๋ฐฑ๊ณผ ์ธ์šฉ: ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ๋ฉค๋ฒ„ ๋ณ€์ˆ˜(member variable) ๋˜๋Š” ๋ฉค๋ฒ„ ํ•„๋“œ๋Š” ํŠน์ • ๊ฐ์ฒด์™€ ์—ฐ๊ฒฐ๋œ ๋ณ€์ˆ˜์˜ ํ•˜๋‚˜์ด๋ฉฐ, ํ•ด๋‹น ๋ณ€์ˆ˜์˜ ๋ชจ๋“  ๋ฉ”์†Œ๋“œ(๋ฉค๋ฒ„ ํ•จ์ˆ˜)์— ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ํด๋ž˜์Šค ๊ธฐ๋ฐ˜ ์–ธ์–ด์—์„œ ์ด๋“ค์€ ๋‘ ์ข…๋ฅ˜๋กœ ๊ตฌ๋ณ„๋œ๋‹ค: ..... ๊ทธ๋ ‡๋‹ค.. ์ •์˜๋ฅผ ์ฝ์œผ๋ฉด ์•Œ ์ˆ˜ ..
C++ ๋Œ€๋ฌธ์ž/์†Œ๋ฌธ์ž ๋ณ€ํ™˜ ๋„ˆ๋ฌด ๋ฐ”๋น ์„œ ๊ธด ํฌ์ŠคํŒ… ๊ธ€์˜ ๋งˆ๋ฌด๋ฆฌ๋ฅผ ๋ชปํ•˜๊ณ  ์žˆ๋‹ค.. ์ผ๋‹จ ๊ฐ€๋ฒผ์šด๊ฑฐ๋ผ๋„ ์˜ฌ๋ ค์•ผ ๋“ค ์–ต์šธํ•  ๊ฒƒ ๊ฐ™๋‹ค 1. std::transform ์‚ฌ์šฉ 2. std::toupper & std::tolower ์‚ฌ์šฉ 3. boost::to_upper ์™€ to_lower ์‚ฌ์šฉ 1. std::transform ๊ตฌ๊ธ€์— "C++ ๋Œ€์†Œ๋ฌธ์ž ๋ณ€ํ™˜" ์ด๋ผ๊ณ  ๊ฒ€์ƒ‰ํ•˜๋ฉด ์•„๋งˆ ๊ฐ€์žฅ ๋จผ์ € ๋ณด์ด๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด์ง€ ์•Š์„๊นŒ ์‹ถ๋‹ค ์‚ฌ์šฉ ๋ฐฉ๋ฒ•์„ ๋ณด๊ธฐ์ „์— cppreference์— ์žˆ๋Š” ํ•จ์ˆ˜ ํ˜•ํƒœ๋ฅผ ๋จผ์ € ๋ณด๊ฒ ๋‹ค * ํ—ค๋” #include ํ—ค๋”๋Š” ์š”๋ ‡๊ณ ,, * ํ•จ์ˆ˜ ์›ํ˜•(?) template OutputIt transform( InputIt first1, Inpu..
C++ Function Object (ํ•จ์ˆ˜ ๊ฐ์ฒด)๋ฅผ ์•Œ์•„๋ณด์ž Lamda (๋žŒ๋‹ค) ํฌ์ŠคํŒ…์„ ํ•˜๊ธฐ ์œ„ํ•ด ๊ณต๋ถ€ํ•˜๋˜ ์ค‘,, ์ด์ƒํ•˜๊ฒŒ ๊ธ€์ด ์•ˆ์จ์กŒ๋‹ค. ๊ธฐ์ดˆ ์—†์ด ์‚ฌ์šฉํ• ๋ ค๊ณ  ํ•˜๋‹ˆ๊นŒ ๊ทธ๋Ÿฐ๊ฒƒ ๊ฐ™์•„์„œ ํ•จ์ˆ˜ ๊ฐ์ฒด์— ๋Œ€ํ•ด ๋จผ์ € ๊ณต๋ถ€๋ฅผ ํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค 1. ํ•จ์ˆ˜ ํ˜ธ์ถœ ์—ฐ์‚ฐ์ž ํ•จ์ˆ˜ ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•ด๋ณด๊ธฐ ์ „์—, ํ•จ์ˆ˜ ํ˜ธ์ถœ ์—ฐ์‚ฐ์ž๋ฅผ ๋ด๋ณด๊ฒ ๋‹ค ์•„์ฃผ์•„์ฃผ ๊ฐ„๋‹จํ•œ ์˜ˆ์‹œ๋ฅผ ๋“ค์–ด๋ณด๊ฒ ๋‹ค #include #include using namespace std; int myPlus(int num1, int num2) { return num1+num2; } int main(void) { int num1 = 10; int num2 = 20; cout
C++ std::map์„ ์‚ฌ์šฉํ•ด๋ณด์ž C ๊ฐœ๋ฐœ์„ ํ•˜๋‹ค๋ณด๋ฉด ๋Š๋ผ๋Š”๊ฒŒ ํ•˜๋‚˜ ์žˆ๋‹ค ์ •๋ง,, ์ž๋ฃŒ๊ตฌ์กฐ ๊ด€๋ฆฌํ•˜๊ธฐ ํž˜๋“ค๋‹ค๋ผ๋Š”๊ฑฐ๋‹ค (๋‚˜๋งŒ ๊ทธ๋Ÿด์ง€๋„ ๋ชจ๋ฅธ๋‹ค) ๊ทธ๋ž˜์„œ C++์—์„œ STL์ด ์ œ๊ณตํ•˜๋Š” ์—ฌ๋Ÿฌ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด์„œ ๋„ˆ๋ฌด ํŽธ๋ฆฌํ–ˆ๋‹ค cf) STL (Standard Template Library) ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ, std:: namespace๋ฅผ ๋ถ™์—ฌ์„œ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค ํ•˜์ง€๋งŒ ํ•œ ๋‘๊ฐœ ์‚ฌ์šฉํ•  ์ˆ˜๋ก, ์ž‘์€๊ฑฐ ํ•˜๋‚˜๋„ ํ—ท๊ฐˆ๋ ค์„œ ์ •๋ฆฌํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค - map ์ •์˜ ๋ฐฉ๋ฒ• - map ์š”์†Œ ์‚ฝ์ž… - map ์š”์†Œ ๊ฒ€์ƒ‰ - map ์š”์†Œ ์‚ญ์ œ - map ์ˆœํšŒ - map ํฌ๊ธฐ ๊ตฌํ•˜๊ธฐ 0. map์ด ๋ญ”๊ฐ€์š”? ์œ„ํ‚ค๋ฐฑ๊ณผ: ๋‹ค์ˆ˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์—์„œ, map์€ ๊ณ ์ฐจ ํ•จ์ˆ˜๋กœ์„œ ์ „ํ•ด์ง„ ํ•จ์ˆ˜๋ฅผ ๋ฐฐ์—ด์˜ ๋ชจ๋“  ์š”์†Œ์— ์ ์šฉ(apply)ํ•˜์—ฌ ๊ทธ ๊ฒฐ๊ณผ ๋ฐฐ์—ด์„ ์ „๋‹ฌํ•œ๋‹ค. KEY์™€ VALUE ํ˜•ํƒœ๋กœ ๋˜์–ด์žˆ..
C++ ์ „์—ญ ๋ณ€์ˆ˜์™€ ์ •์  ๋ณ€์ˆ˜๋ฅผ ์•Œ์•„๋ณด์ž ์ „์—ญ๋ณ€์ˆ˜์™€ ์ง€์—ญ๋ณ€์ˆ˜๋Š” ๋งŽ์ด ๋“ค์–ด๋ณผ ์šฉ์–ด์ด๋‹ค. ์ง€์—ญ๋ณ€์ˆ˜๋Š” ํ•จ์ˆ˜ ์•ˆ์—์„œ ์„ ์–ธํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋Š” ๋ณ€์ˆ˜์ด๊ณ , ์ „์—ญ ๋ณ€์ˆ˜๋Š” ์ง€์—ญ๋ณ€์ˆ˜์™€ ๋‹ค๋ฅด๊ฒŒ ์ „์ฒด์—์„œ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ์˜๋ฏธ๋กœ ๋ฐ›์•„๋“ค์ธ ๋‹ค๋ฉด, ๊ฐ„๋‹จํ•˜๊ฒŒ ์ดํ•ด๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค ์‹ค์ œ ์ฝ”๋“œ์—์„œ๋„ ์‚ฌ์šฉํ•˜๊ธฐ ์–ด๋ ต์ง€ ์•Š๋‹ค. ๊ฐ„๋‹จํ•œ ์˜ˆ์‹œ๋ฅผ ๋“ค์–ด๋ณธ๋‹ค๋ฉด string globalVar; void test() { string localVar; } ์œ„์น˜๋งŒ ๋ฐ”๋€๋‹ค๊ณ  ์ƒ๊ฐํ•ด๋„ ๊ดœ์ฐฎ์„ ์ •๋„์ด๋‹ค. (๋ฌผ๋ก  ๋ฌธ๋ฒ•์ด ์ถ”๊ฐ€๋  ์ˆ˜๋Š” ์žˆ๋‹ค.) ๊ทธ๋Ÿฌ๋ฉด ์ •์ (Static) ๋ณ€์ˆ˜๋Š” ๋ฌด์—‡์ธ์ง€, ์ „์—ญ๋ณ€์ˆ˜๋ž‘ ์ฐจ์ด๊ฐ€ ๋ญ”์ง€ ์•Œ์•„๋ณด๋ ค๊ณ  ํ•œ๋‹ค. (์ง€์—ญ๋ณ€์ˆ˜๋Š” ๋”ฐ๋กœ ์ •๋ฆฌํ•˜์ง€ ์•Š์•„๋„ ๋  ๊ฒƒ ๊ฐ™์•„์„œ ํŒจ์“ฐ ๐Ÿ˜€) ๊ฐœ๋…์— ๋Œ€ํ•œ ์„ค๋ช…์€ ์•„๋ž˜์— ์ž์„ธํžˆ ์ ์„๊ฑฐ๊ณ , ๊ธ‰ํ•œ ๋ถ„๋“ค์„ ์œ„ํ•ด ์–ด๋–ป๊ฒŒ ์“ฐ๋Š”์ง€๋งŒ ๋จผ์ € ์ •๋ฆฌํ•˜์ž๋ฉด 1. ์ „์—ญ ๋ณ€์ˆ˜ ์‚ฌ์šฉ extern strin..