๐Ÿ—ฏ๏ธLanguage ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ

ํ•ด๋‹น ๊ธ€ 59๊ฑด

๊ตฌ์กฐ์ฒด (Structure) C#์˜ ๋ณตํ•ฉ ๋ฐ์ดํ„ฐ ํ˜•์‹์—๋Š” ํด๋ž˜์Šค ๋ง๊ณ ๋„ ๊ตฌ์กฐ์ฒด๊ฐ€ ์žˆ๋‹ค. C ์–ธ์–ด์—์„œ ๋ดค๋˜ ๊ทธ ๊ตฌ์กฐ์ฒด๊ฐ€ ๋งž๊ธด ํ•˜์ง€๋งŒ ์—ฌ๋Ÿฌ๋ชจ๋กœ ๋‹ค๋ฅธ ์ ์ด ์žˆ๋‹ค. ํด๋ž˜์Šค์ฒ˜๋Ÿผ ํ•„๋“œ์™€ ๋ฉ”์†Œ๋“œ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ์ ์—์„œ ํด๋ž˜์Šค์™€ ๊ตฌ์กฐ์ฒด ๋‘˜์€ ์„œ๋กœ ๋งŽ์ด ๋น„์Šทํ•ด ๋ณด์ธ๋‹ค. struct MyStructure { public int data; public void Method() { ... } } ํด๋ž˜์Šค์™€ ๋‹ฌ๋ฆฌ ์€๋‹‰์„ฑ์„ ๋น„๋กฏํ•œ ๊ฐ์ฒด์ง€ํ–ฅ์˜ ์›์น™์„ ๊ฐ•ํ•˜๊ฒŒ ์ ์šฉํ•˜์ง€ ์•Š๋Š” ํŽธ์ด๋ผ, public์œผ๋กœ ํ•„๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ฃผ๋กœ ์“ด๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด, ๊ตฌ์กฐ์ฒด์™€ ํด๋ž˜์Šค์˜ ์ฐจ์ด์ ์€ ๋ญ˜๊นŒ? ํŠน์ง• ํด๋ž˜์Šค ๊ตฌ์กฐ์ฒด ํ‚ค์›Œ๋“œ class struct ํ˜•์‹ ์ฐธ์กฐ ํ˜•์‹ (ํž™ ํ• ๋‹น) ๊ฐ’ ํ˜•์‹ (์Šคํƒ ํ• ๋‹น) ๋ณต์‚ฌ ์–•์€ ๋ณต์‚ฌ (Shallow Copy) ๊นŠ์€ ๋ณต์‚ฌ (Deep ..

๐Ÿ—ฏ๏ธLanguage/C# 2022. 3. 21. 21:20

ํ™•์žฅ ๋ฉ”์†Œ๋“œ(Extension Method)๋ž€? ๊ธฐ์กด ํด๋ž˜์Šค์˜ ๊ธฐ๋Šฅ์„ ํ™•์žฅํ•˜๋Š” C#์—์„œ ์ง€์›ํ•˜๋Š” ๊ธฐ๋ฒ•์ด๋‹ค. ์ผ๋ฐ˜์ ์ธ ์‚ฌ์šฉ์ž ์ •์˜ ํด๋ž˜์Šค์˜ ๊ฒฝ์šฐ์—๋Š” ์ถ”๊ฐ€์ ์ธ ๋ฉ”์†Œ๋“œ๊ฐ€ ํ•„์š”ํ•˜๋‹ค๋ฉด ํด๋ž˜์Šค ๋‚ด๋ถ€์—์„œ ์ถ”๊ฐ€๋กœ ์ •์˜ํ•˜๋ฉด ๋œ๋‹ค. ํ•˜์ง€๋งŒ ๋‚ด์žฅ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค ๊ฐ™์€ ๊ฒฝ์šฐ์—๋Š” ๊ทธ๋Ÿด ์ˆ˜๊ฐ€ ์—†๋‹ค. ์ด๋Ÿฐ ๊ฒฝ์šฐ์— ์œ ์šฉํ•œ ๊ฒƒ์ด ํ™•์žฅ ๋ฉ”์†Œ๋“œ์ด๋‹ค. ํ™•์žฅ ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ•„์š”ํ•˜๋‹ค. ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ์„ ์–ธ ๋ฉ”์†Œ๋“œ๋ฅผ ์„ ์–ธํ•˜๋˜, static ํ•œ์ •์ž๋กœ ์ˆ˜์‹ํ•ด์•ผ ํ•œ๋‹ค. ์„ ์–ธํ•˜๋Š” ํด๋ž˜์Šค ๋˜ํ•œ static ํ•œ์ •์ž๋กœ ์ˆ˜์‹ํ•ด์•ผ ํ•œ๋‹ค. ๋ฉ”์†Œ๋“œ์˜ ์ฒซ ๋ฒˆ์งธ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ๋ฐ˜๋“œ์‹œ this ํ‚ค์›Œ๋“œ์™€ ํ•จ๊ป˜ ํ™•์žฅํ•˜๊ณ ์ž ํ•˜๋Š” ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค์—ฌ์•ผ ํ•œ๋‹ค. ๋ฉ”์†Œ๋“œ์— ํ•„์š”ํ•œ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ๋‘ ๋ฒˆ์งธ ๋งค๊ฐœ๋ณ€์ˆ˜๋ถ€ํ„ฐ ์ฑ„์›Œ์ค€๋‹ค. namespace ๋„ค์ž„์ŠคํŽ˜์ด์Šค์ด๋ฆ„ { public ..

๐Ÿ—ฏ๏ธLanguage/C# 2022. 3. 21. 20:31

*์ด ๊ธ€์€ ์ฑ…์„ ๋ฐ”ํƒ•์œผ๋กœ ๊ณต๋ถ€ํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค. ์ค‘์ฒฉ ํด๋ž˜์Šค(Nested Class) ๊ฐ€๋”์”ฉ ์ฝ”๋“œ๋“ค์„ ๋ณด๋ฉด, ์ค‘์ฒฉ ํด๋ž˜์Šค๋กœ ๊ตฌํ˜„ํ•œ ์ฝ”๋“œ๋“ค์ด ๋ณด์ด๊ณค ํ–ˆ๋‹ค. class OuterClass { class NestedClass // ์ค‘์ฒฉ ํด๋ž˜์Šค { } } ์‚ฌ์‹ค ์•„์ง๊นŒ์ง€ ์ค‘์ฒฉ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉ์˜ ํ•„์š”์„ฑ์„ ์ž˜ ๋Š๋ผ์ง€ ๋ชปํ•˜๊ณ  ์žˆ๊ธด ํ•˜๋‹ค. ์ฑ…์„ ์ฝ์–ด๋ณด๋‹ˆ, ๊ธฐ๋ณธ์ ์œผ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‘ ๊ฐ€์ง€ ์ด์œ  ๋•Œ๋ฌธ์— ์‚ฌ์šฉํ•˜๊ณค ํ•œ๋‹ค๊ณ  ํ•œ๋‹ค. ํด๋ž˜์Šค ์™ธ๋ถ€์— ๊ณต๊ฐœํ•˜๊ณ  ์‹ถ์ง€ ์•Š์€ ํ˜•์‹์„ ๋งŒ๋“ค๊ณ  ์‹ถ์„ ๋•Œ ํ˜„์žฌ ํด๋ž˜์Šค์˜ ์ผ๋ถ€๋ถ„์ฒ˜๋Ÿผ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค๊ณ ์ž ํ•  ๋•Œ ์ค‘์ฒฉ ํด๋ž˜์Šค๋Š” ๋‹ค๋ฅธ ํด๋ž˜์Šค์˜ private ๋ฉค๋ฒ„์—๋„ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ํŠน์ง•์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ํ…Œ์ŠคํŠธ๋ฅผ ํ•ด๋ณด๋‹ˆ, ์™ธ๋ถ€ ํด๋ž˜์Šค์—์„œ ๋‚ด๋ถ€ ์ค‘์ฒฉ ํด๋ž˜์Šค์˜ private ๋ฉค๋ฒ„ ์ ‘๊ทผ์€ ์•ˆ ๋˜๋Š” ๊ฒƒ ๊ฐ™..

๐Ÿ—ฏ๏ธLanguage/C# 2022. 3. 21. 17:40

*์ด ๊ธ€์€ ์ฑ…์„ ๋ฐ”ํƒ•์œผ๋กœ ๊ณต๋ถ€ํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค. const const float range = 5f; // ๊ณต๊ฒฉ ์‚ฌ๊ฑฐ๋ฆฌ ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์ƒ์ˆ˜์— ์ง€์ •๋œ ๊ฐ’์„ ์‹คํ–‰ํŒŒ์ผ ์•ˆ์— ๊ธฐ๋กํ•ด๋‘”๋‹ค. ์ด ๋ง์€ ์ƒ์ˆ˜๋Š” ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋˜๊ธฐ ์ „๋ถ€ํ„ฐ ์ด๋ฏธ ๊ฐ’์ด ์ •ํ•ด์ ธ ์žˆ๋‹ค๋Š” ์˜๋ฏธ๊ฐ€ ๋œ๋‹ค. (์ปดํŒŒ์ผ ํƒ€์ž„์— ์ด๋ฃจ์–ด์ง) ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ๋ณ€์ˆ˜์™€ ๋‹ฌ๋ฆฌ, ์ƒ์ˆ˜๋Š” ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์ค‘(๋Ÿฐํƒ€์ž„)์—๋Š” ๊ทธ ๊ฐ’์„ ์ ˆ๋Œ€๋กœ ๋ฐ”๊ฟ€ ์ˆ˜ ์—†๋‹ค. ์ด๋Ÿฌํ•œ const ์ƒ์ˆ˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํŠน์ง•๋“ค์„ ๊ฐ€์ง„๋‹ค. 1. ์„ ์–ธ ์‹œ, ๋ฐ˜๋“œ์‹œ ๊ฐ’์„ ํ• ๋‹นํ•ด์•ผ ํ•œ๋‹ค. // const float range; ์ปดํŒŒ์ผ ์˜ค๋ฅ˜ const float range = 5f; 2. ์ž๋™์œผ๋กœ ์ •์  ๋ณ€์ˆ˜(static) ์†์„ฑ์„ ๊ฐ€์ง„๋‹ค. class Monster { public const float range = 5f;..

๐Ÿ—ฏ๏ธLanguage/C# 2022. 3. 21. 17:08

์ด ๊ธ€์€ ์ฑ…์„ ๋ฐ”ํƒ•์œผ๋กœ ๊ณต๋ถ€ํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค. ๊ฐœ์š” ๊ฐœ์ธ์ ์œผ๋กœ ์ƒ๊ฐํ•˜๋Š” ๊ฐ์ฒด ์ง€ํ–ฅ์˜ ๊ฝƒ ์ค‘ ํ•˜๋‚˜๋Š” ์—…์บ์ŠคํŒ…(Upcasting)์ด๋ผ๊ณ  ์ƒ๊ฐํ•œ๋‹ค. ์ˆ˜๋งŽ์€ ์ž์‹ ํด๋ž˜์Šค๋“ค์ด ์žˆ์ง€๋งŒ, ๊ทธ ๋งŽ์€ ํด๋ž˜์Šค๋“ค์„ ๋ถ€๋ชจ ํด๋ž˜์Šค ํ•˜๋‚˜๋กœ ๊ฐ€๋ฆฌํ‚ฌ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์€ ์ƒ์‚ฐ์„ฑ์— ์ •๋ง ํฐ ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค. ์ฒ˜์Œ ๊ฐ์ฒด์ง€ํ–ฅ์–ธ์–ด๋ฅผ ๋‹ค๋ฃฐ ๋•Œ๋Š” ๋‹น์—ฐํžˆ ๋‚˜๋„ ์ด๊ฒŒ ๋ฌด์Šจ ์˜๋ฏธ์ธ์ง€ ์ž˜ ์•Œ์ง€ ๋ชปํ–ˆ๋‹ค. ๋‚ด๊ฐ€ ์ดํ•ดํ•œ ๋‚ด์šฉ์„ ์˜ˆ์‹œ๋ฅผ ๋“ค๋ฉด์„œ ํ•œ ๋ฒˆ ์„ค๋ช…ํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž์‹ ํด๋ž˜์Šค๋“ค์ด ์žˆ๋‹ค๊ณ  ํ•˜์ž. class Monster { public void Attack() { ... } } class Slime : Monster { public void LiquidAttack() { ... } } class Bubbling : Monster { public..

๐Ÿ—ฏ๏ธLanguage/C# 2022. 3. 21. 16:53

*์ด ๊ธ€์€ ์ฑ…์„ ๋ฐ”ํƒ•์œผ๋กœ ๊ณต๋ถ€ํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค. 1. ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ๋ฉ”์†Œ๋“œ ์ˆจ๊ธฐ์ž! : new ํ‚ค์›Œ๋“œ ๋ถ€๋ชจ ํด๋ž˜์Šค๋กœ๋ถ€ํ„ฐ ์ƒ์† ๋ฐ›์€ ๋ฉค๋ฒ„์™€ ์ด๋ฆ„์€ ๋™์ผํ•˜์ง€๋งŒ ์™„์ „ํžˆ ๋‹ค๋ฅธ ์ƒˆ๋กœ์šด ๋ฉค๋ฒ„๋กœ ์žฌ์ •์˜ํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” new ํ‚ค์›Œ๋“œ์˜ ์˜๋ฏธ์™€๋Š” ๋‹ค๋ฅด๋‹ค. ํด๋ž˜์Šค๋ฅผ ์ž‘์„ฑํ•˜๋‹ค ๋ณด๋ฉด, ๋งŒ๋“ค๊ณ  ์žˆ๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ๋‚˜์ค‘์— ์˜ค๋ฒ„๋ผ์ด๋”ฉ์„ ํ•  ์ง€ ์•ˆ ํ• ์ง€๋ฅผ ๋ฏธ๋ฆฌ ์ƒ๊ฐํ•œ๋‹ค๋Š” ๊ฑด ์‰ฌ์šด ๊ฒŒ ์•„๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด, C#์—์„œ ์˜ค๋ฒ„๋ผ์ด๋”ฉ์„ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ๋ฉ”์†Œ๋“œ๋ฅผ virtual์œผ๋กœ ์„ ์–ธํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ด๋Ÿฐ ๋ถ€๋ถ„๊นŒ์ง€ ์ „๋ถ€ ์„ค๊ณ„๋ฅผ ์‹ ๊ฒฝ์จ์„œ ์ž‘์„ฑํ•œ๋‹ค๋Š” ๊ฒƒ์€ ๊ฒฝํ—˜์ด ๋งŽ์€ ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์•„๋‹ˆ๋ฉด ์–ด๋ ค์šธ ๊ฒƒ์ด๋‹ค. ๊ทธ๋ž˜์„œ C#์—์„œ๋Š” ์šฐ๋ฆฌ ๊ฐ™์€ ์‚ฌ๋žŒ๋“ค์„ ์œ„ํ•ด์„œ, ๋ฉ”์†Œ๋“œ ์ˆจ๊ธฐ๊ธฐ๋ฅผ ์ง€์›ํ•œ๋‹ค. class Monster { publ..

๐Ÿ—ฏ๏ธLanguage/C# 2022. 3. 21. 16:12