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

์ „์ฒด๋ณด๊ธฐ115

[std] iterator๋ณด๋‹จ const_iterator ! ๊ฐ€๋Šฅํ•œ ํ•œ ํ•ญ์ƒ const๋ฅผ ์‚ฌ์šฉํ•˜๋ผ๋Š” ํ‘œ์ค€ ๊ด€ํ–‰์€ ๋ฐ˜๋ณต์ž์—๊ฒŒ๋„ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋ฐ˜๋ณต์ž๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฒƒ์„ ์ˆ˜์ •ํ•  ํ•„์š”๊ฐ€ ์—†์„ ๋•Œ๋Š” ํ•ญ์ƒ const_iterator๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. std::vector data; auto itr = std::find(data.cbegin(), data.cend(), 5);// cbegin, cend์‚ฌ์šฉ if (itr == data.cend()) data.push_back(5); 2023. 1. 14.
๊ฐ์ฒด ์ƒ์„ฑ์‹œ ์†Œ๊ด„ํ˜ธ์™€ ์ค‘๊ด„ํ˜ธ ์ฐจ์ด C++ 11์€ ๊ท ์ผ ์ดˆ๊ธฐํ™”(uniform initialization)๋ฅผ ๋„์ž…ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ท ์ผ ์ดˆ๊ธฐํ™” ๊ตฌ๋ฌธ์€ ์ค‘๊ด„ํ˜ธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ, ์ด์ „์—๋Š” ํ‘œํ˜„ํ•  ์ˆ˜ ์—†์—ˆ๋˜ ๋ฐฉ์‹์˜ ๊ฐ์ฒด ์ƒ์„ฑ์„ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. class Foo { ... private: int x{0};// OK int y = 0; // OK int z(0);// Error! }; ๋ฐ˜๋ฉด ๋ณต์‚ฌํ•  ์ˆ˜ ์—†๋Š” ๊ฐ์ฒด(์˜ˆ๋ฅผ ๋“ค๋ฉด std::atomic)์€ ์ค‘๊ด„ํ˜ธ๋‚˜ ์†Œ๊ด„ํ˜ธ๋กœ๋Š” ์ดˆ๊ธฐํ™”ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ =๋กœ๋Š” ์ดˆ๊ธฐํ™” ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. std::atomic val1{0};//OK std::atomic val2(0);//OK std::atomic val3 = 0;//Error! ๋˜, ์ค‘๊ด„ํ˜ธ ์ดˆ๊ธฐํ™”์˜ ํ˜์‹ ์ ์ธ ๊ธฐ๋Šฅ์€ ๋ฐ”๋ฅด์ง€ ์•Š์€ ์•”๋ฌต์  ํ˜•๋ณ€ํ™˜์„ ๋ฐฉ์ง€ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. double .. 2023. 1. 14.
[C++]ํฌ์ธํ„ฐ์™€ ๋ ˆํผ๋Ÿฐ์Šค ์ฐจ์ด C++์—์„œ ํฌ์ธํ„ฐ์™€ ๋ ˆํผ๋Ÿฐ์Šค๋Š” ๋ชจ๋‘ ๋ณ€์ˆ˜๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ฑฐ๋‚˜ ์ฐธ์กฐํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋˜์ง€๋งŒ, ๊ทธ๋“ค ๊ฐ„์— ์ค‘์š”ํ•œ ์ฐจ์ด์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ •์˜ - ํฌ์ธํ„ฐ(Pointer): ํฌ์ธํ„ฐ๋Š” ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ณ€์ˆ˜์ž…๋‹ˆ๋‹ค. ๋ณ€์ˆ˜์˜ ์ฃผ์†Œ๋ฅผ ์ €์žฅํ•˜๊ณ  ํ•ด๋‹น ๋ณ€์ˆ˜์— ๋Œ€ํ•œ ๊ฐ„์ ‘ ์ฐธ์กฐ๋ฅผ ํ†ตํ•ด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํฌ์ธํ„ฐ๋Š” '*' ๊ธฐํ˜ธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„ ์–ธํ•˜๋ฉฐ, ํ• ๋‹น๋œ ์ฃผ์†Œ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. - ๋ ˆํผ๋Ÿฐ์Šค(Reference): ๋ ˆํผ๋Ÿฐ์Šค๋Š” ๊ธฐ์กด ๋ณ€์ˆ˜์˜ ๋ณ„์นญ(alias)์ž…๋‹ˆ๋‹ค. ์ฆ‰, ๊ธฐ์กด ๋ณ€์ˆ˜์— ๋Œ€ํ•œ ๋ณ„์นญ์„ ๋งŒ๋“ค์–ด ํ•ด๋‹น ๋ณ€์ˆ˜๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ๋ ˆํผ๋Ÿฐ์Šค๋Š” '&' ๊ธฐํ˜ธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„ ์–ธ๋˜๋ฉฐ, ํ•œ ๋ฒˆ ํ• ๋‹น๋˜๋ฉด ๋‹ค๋ฅธ ๋ณ€์ˆ˜๋กœ ๋ณ€๊ฒฝ๋  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ดˆ๊ธฐํ™” - ํฌ์ธํ„ฐ(Pointer): ํฌ์ธํ„ฐ๋Š” ์ดˆ๊ธฐํ™”ํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ ๋„ ํฌ์ธํ„ฐ๋กœ ์ดˆ๊ธฐํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค... 2023. 1. 9.
์ปดํ“จํ„ฐ ์„ฑ๋Šฅ ํ–ฅ์ƒ ๊ธฐ์ˆ  ๋ฉ”์ธ๋ณด๋“œ ๋‚ด ๋ฉ”๋ชจ๋ฆฌ์™€ ์ฃผ๋ณ€์žฅ์น˜๋Š” ์‹œ์Šคํ…œ๋ฒ„์Šค(FSB)๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๊ณ , CPU ๋‚ด ALU, ์ œ์–ด์žฅ์น˜, ๋ ˆ์ง€์Šคํ„ฐ๋Š” CPU ๋‚ด๋ถ€ ๋ฒ„์Šค(BSB)๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ฉ”๋ชจ๋ฆฌ์˜ ์†๋„๋Š” ์‹œ์Šคํ…œ ๋ฒ„์Šค์˜ ์†๋„์™€ ๊ฐ™๊ณ , CPU์˜ ์†๋„๋Š” CPU ๋‚ด๋ถ€ ๋ฒ„์Šค์˜ ์†๋„์™€ ๊ฐ™๋‹ค. CPU ๋‚ด๋ถ€ ๋ฒ„์Šค์˜ ์†๋„๊ฐ€ ์‹œ์Šคํ…œ ๋ฒ„์Šค์˜ ์†๋„ ๋ณด๋‹ค ๋น ๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋น„๋กฏํ•œ ์ฃผ๋ณ€์žฅ์น˜์˜ ์†๋„๊ฐ€ CPU์˜ ์†๋„๋ฅผ ๋”ฐ๋ผ๊ฐ€์ง€ ๋ชปํ•œ๋‹ค. ์„ฑ๋Šฅ ํ–ฅ์ƒ ๊ธฐ์ˆ ์€ ๋ฉ”๋ชจ๋ฆฌ์˜ ์ž‘์—… ์†๋„๋ฅผ ์˜ฌ๋ฆฌ๊ธฐ ์œ„ํ•ด ๊ฐœ๋ฐœ๋œ ๊ธฐ์ˆ  ์ค‘ ์šด์˜์ฒด์ œ์™€ ๊ด€๋ จ๋œ ๊ธฐ์ˆ ์„ ์‚ดํŽด๋ณด์ž. ๋ฒ„ํผ ๋ฒ„ํผ๋Š” ์†๋„์— ์ฐจ์ด๊ฐ€ ์žˆ๋Š” ๋‘ ์žฅ์น˜ ์‚ฌ์ด์—์„œ ๊ทธ ์ฐจ์ด๋ฅผ ์™„ํ™”ํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค. ๋ณด๊ด€ ์ฐฝ๊ณ ์—์„œ ๊ทค 5๊ฐœ๋ฅผ ๋„๋งˆ๋กœ ์˜ฎ๊ธธ ๋•Œ ํ•˜๋‚˜์”ฉ ์˜ฎ๊ธฐ๋Š” ๊ฒƒ๋ณด๋‹ค ๋ฐ”๊ตฌ๋‹ˆ๋กœ 5๊ฐœ๋ฅผ ์˜ฎ๊ธธ ์ˆ˜ ์žˆ๋Š”๋ฐ, ์—ฌ๊ธฐ์„œ ๋ฐ”๊ตฌ๋‹ˆ๊ฐ€ ๋ฒ„ํผ์— ํ•ด๋‹นํ•œ๋‹ค. ์ผ.. 2023. 1. 7.
๊ต์ฐฉ์ƒํƒœ(DeadLock) ์•„์‚ฌ ํ˜„์ƒ์€ ์šด์˜์ฒด์ œ๊ฐ€ ์ž˜๋ชป๋œ ์ •์ฑ…์„ ์‚ฌ์šฉํ•˜์—ฌ ํŠน์ • ํ”„๋กœ์„ธ์Šค์˜ ์ž‘์—…์ด ์ง€์—ฐ๋˜๋Š” ๋ฌธ์ œ. ๊ต์ฐฉ ์ƒํƒœ๋Š” ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์„œ๋กœ ์–‘๋ณดํ•˜์ง€ ์•Š๋Š” ์ƒํƒœ. ๊ต์ฐฉ ์ƒํƒœ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์šด์˜์ฒด์ œ๊ฐ€ ๊ฐ•์••์ ์œผ๋กœ ํ•ด๊ฒฐํ•ด์•ผ ํ•œ๋‹ค. ๊ต์ฐฉ ์ƒํƒœ์˜ ๋ฐœ์ƒ ๊ต์ฐฉ ์ƒํƒœ๋Š” ์‹œ์Šคํ…œ ์ž์›, ๊ณต์œ  ๋ณ€์ˆ˜(๋˜๋Š” ํŒŒ์ผ), ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ๋“ฑ์„ ์‚ฌ์šฉํ•  ๋•Œ ๋ฐœ์ƒํ•œ๋‹ค. ์‹œ์Šคํ…œ ์ž์› ์˜ˆ๋ฅผ ๋“ค๋ฉด, ํ”„๋กœ์„ธ์Šค P1์€ ํ”„๋ฆฐํ„ฐ๋ฅผ ํ• ๋‹น ๋ฐ›์€ ํ›„ CD ๋ ˆ์ฝ”๋”๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ํ”„๋กœ์„ธ์Šค P2๋Š” CD ๋ ˆ์ฝ”๋”๋ฅผ ํ• ๋‹น ๋ฐ›์€ ํ›„ ํ”„๋ฆฐํ„ฐ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋ฉด ๊ต์ฐฉ ์ƒํƒœ ๋ฐœ์ƒ ์—ฌ๊ธฐ์„œ ํ”„๋ฆฐํ„ฐ์™€ CD ๋ ˆ์ฝ”๋“œ ๊ฐ™์€ ์ž์›์€ ์ž„๊ณ„๊ตฌ์—ญ์œผ๋กœ ๋ณดํ˜ธ๋ฐ›๊ณ  ์žˆ์Œ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์™€ ๊ณต์œ ํ•  ์ˆ˜ ์—†๋Š” ์ž์›์„ ์‚ฌ์šฉํ•  ๋•Œ ๋ฐœ์ƒ(๋Œ€ํ‘œ์ ) ๊ณต์œ  ๋ณ€์ˆ˜ ์˜ˆ๋ฅผ ๋“ค๋ฉด, ์„œ๋กœ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ•œ ๊ณต์œ  ๋ณ€์ˆ˜์˜ ๊ฐ’์„ ๋ฐ”๊พธ๋ฉด์„œ ๋ฌดํ•œ ๋ฃจํ”„๋ฅผ ๋„๋Š” ๊ฒฝ์šฐ ํ•œ .. 2023. 1. 3.
์‹ฑ๊ธ€ํ†ค ํŒจํ„ด โœ… ์‹ฑ๊ธ€ํ†ค ํŒจํ„ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์‹œ์ž‘๋  ๋•Œ ์–ด๋–ค ํด๋ž˜์Šค๊ฐ€ ์ตœ์ดˆ ํ•œ๋ฒˆ๋งŒ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•˜๊ณ (Static) ๊ทธ ๋ฉ”๋ชจ๋ฆฌ์— ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค์–ด ์‚ฌ์šฉํ•˜๋Š” ๋””์ž์ธํŒจํ„ด. ์ƒ์„ฑ์ž๊ฐ€ ์—ฌ๋Ÿฌ ์ฐจ๋ก€ ํ˜ธ์ถœ๋˜๋”๋ผ๋„ ์‹ค์ œ๋กœ ์ƒ์„ฑ๋˜๋Š” ๊ฐ์ฒด๋Š” ํ•˜๋‚˜๊ณ  ์ตœ์ดˆ ์ƒ์„ฑ ์ดํ›„์— ํ˜ธ์ถœ๋œ ์ƒ์„ฑ์ž๋Š” ์ตœ์ดˆ์— ์ƒ์„ฑํ•œ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. (์ž๋ฐ”์—์„  ์ƒ์„ฑ์ž๋ฅผ private๋กœ ์„ ์–ธํ•ด์„œ ์ƒ์„ฑ ๋ถˆ๊ฐ€ํ•˜๊ฒŒ ํ•˜๊ณ  getInstance()๋กœ ๋ฐ›์•„์“ฐ๊ธฐ๋„ ํ•จ) => ์‹ฑ๊ธ€ํ†ค ํŒจํ„ด์€ ๋‹จ ํ•˜๋‚˜์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•ด ์‚ฌ์šฉํ•˜๋Š” ๋””์ž์ธ ํŒจํ„ด์ด๋‹ค. (์ธ์Šคํ„ด์Šค๊ฐ€ ํ•„์š” ํ•  ๋•Œ ๋˜‘๊ฐ™์€ ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค์–ด ๋‚ด๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ๋™์ผ(๊ธฐ์กด) ์ธ์Šคํ„ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒํ•จ) โœ… ์‹ฑ๊ธ€ํ†ค ํŒจํ„ด์„ ์“ฐ๋Š” ์ด์œ  ๊ณ ์ •๋œ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์„ ์–ป์œผ๋ฉด์„œ ํ•œ๋ฒˆ์˜ new๋กœ ์ธ์Šคํ„ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„๋ฅผ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Œ ๋˜ํ•œ ์‹ฑ๊ธ€ํ†ค.. 2023. 1. 3.