์ฝ”๋“œ ์Šคํƒ€์ผ์— ๋Œ€ํ•œ ๊ธ€์ด ์ข…์ข… ์˜ฌ๋ผ์™€์„œ ์จ๋ด„

์ œ๋ชฉ์€ ์ข€ ์–ด๊ทธ๋กœ๊ณ  ๊ทธ๋ƒฅ ๋‚ด๊ฐ€ ๊ฐœ์ธ์ ์œผ๋กœ ์ข‹๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š” ๋ฐฉ๋ฒ•์ž„

ํ˜„์žฌ ์–ด๋А ํŒ€์—์„œ ๋ฆฌ๋“œ ํด๋ผ๋กœ ์ผํ•˜๊ณ ์žˆ๊ณ  ์šฐ๋ฆฌํŒ€์— ์ ์šฉ, ๊ถŒ์žฅํ•˜๊ณ  ์žˆ๋Š” ์ปจ๋ฒค์…˜์ž„


https://vmsdurano.com/c-coding-guidelines-and-practices/?


๋ณ„๊ฑด ์•„๋‹ˆ๊ณ  ๊ทธ๋ƒฅ ์œ„ ๋งํฌ๋Œ€๋กœ๋‹ค

๋Œ€์ถฉ ๊ฐ„๊ฒฐํ•˜๊ณ  ์งง์€ ๋ฌธ๋ฒ•์ด ์žˆ์œผ๋ฉด ๊ทธ๊ฑธ ์“ฐ์ž๋Š” ์–˜๊ธฐ์ž„ ๋Œ€์ฒด๋กœ

๋Œ€๋žต ์š”์•ฝํ•˜๋ฉด



1. ?: (์‚ผํ•ญ์—ฐ์‚ฐ์ž)๋ฅผ ์“ธ์ˆ˜ ์žˆ์œผ๋ฉด if-else ๋Œ€์‹  ์“ด๋‹ค


2. ์ค‘๊ด„ํ˜ธ ์—†๋Š” ํ•œ์ค„์งœ๋ฆฌ ๋ธ”๋Ÿญ ์•ˆ์“ด๋‹ค


3. switch expression ์ ๊ทน ์‚ฌ์šฉ

a = b switch

{

ย  1 => "1",

ย  2 => "2",

ย  _ => ๋Œ€์ถฉ ์˜ˆ์™ธ ๋˜์ง

}


4. using var๋Š”ย IDispoable / IAsyncDisposable ๊ตฌํ˜„ํ•œ ์• ๋“ค ์‚ฌ์šฉํ• ๋• ๋ฌด์กฐ๊ฑด ์“ด๋‹ค


5. ๋ฌธ์ž์—ด ํฌ๋งทํŒ…์ด๋‚˜ ํ•ฉ์„ฑ ๋“ฑ์€ ์ •๋ง ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ๊ฐ€ ์•„๋‹ˆ๋ฉด string interpolation ๋ฐฉ์‹์œผ๋กœ ํ†ต์ผ

$"A: {a} / B: {b} 1+2 = {1+2}"


6. ํ•œ์ค„์งœ๋ฆฌ ๋ฉ”์†Œ๋“œ๋‚˜ ํ”„๋กœํผํ‹ฐ๋Š” ์‹ ๋ณธ๋ฌธ ์Šคํƒ€์ผ๋กœ ์”€

void Foo() => 1;

float GetPositionX => gameObject.transform.position.x;


7. ํด๋ž˜์Šค ์ƒ์„ฑ๊ณผ ํ•จ๊ป˜ ์ดˆ๊ธฐ๊ฐ’์„ ๋„ฃ์„ ํ•„์š”๊ฐ€ ์žˆ์„๋•

new Foo() { x = 1, y = 2, z = 3 }


8. ๊ฐ’ ๋‘๊ฐœ, ์„ธ๊ฐœ ๋ฆฌํ„ดํ• ๋•Œ๋Š” ํŠœํ”Œ ์‚ฌ์šฉ

๊ทธ๊ฑฐ ์™ธ์—๋„ ๋‘๊ฐœ, ์„ธ๊ฐœ์”ฉ ๋ฌถ์—ฌ์„œ ํ–‰๋™ํ•ด์•ผ ํ•˜๋Š”๋ฐ ๋”ฐ๋กœ ํด๋ž˜์Šค๋‚˜ ๊ตฌ์กฐ์ฒด๋กœ ๋งŒ๋“ค๋งŒํผ ์—ฌ๋Ÿฌ๊ณณ์—์„œ ์“ฐ์ง€ ์•Š๊ณ  ๋กœ์ปฌ์—์„œ ์“ฐ๋Š” ๊ฒฝ์šฐ์—๋„ ํŠœํ”Œ ์ ๊ทน ์‚ฌ์šฉ


9.ย 

ํด๋ž˜์Šค ์ด๋ฆ„, public ๋ฉ”์†Œ๋“œ, ํ”„๋กœํผํ‹ฐ๋Š” PascalCase๋กœย 

๋กœ์ปฌ ๋ณ€์ˆ˜ ๋ฐ ๋งค๊ฐœ๋ณ€์ˆ˜ ๋“ฑ์€ camelCase๋กœ

private ํ•„๋“œ๋Š” _camelCase๋กœ

(2021๋…„์—ย ํ—๊ฐ€๋ฆฌ์•ˆ ์“ฐ๋Š” ์‚ฌ๋žŒ ์•„์ง๋„ ์ข…์ข…์žˆ๋˜๋ฐ ๊ทนํ˜)


10.

์ด๋ฆ„์ง€์„๋•Œ ๋‹จ์–ด ์‚ฌ์ด์‚ฌ์ด์— _ ๋ถ™์ด์ง€ ์•Š๊ธฐ


11.ย 

๋ฉ”์†Œ๋“œ, ํ•„๋“œ, ํ”„๋กœํผํ‹ฐ ํ”„๋ผ์ด๋น—๋ผ๋ฆฌ ํผ๋ธ”๋ฆญ๋ผ๋ฆฌ ๋ชจ์•„๋‘˜๊ฒƒ



๊ทธ๋ฆฌ๊ณ  ๋งํฌ์— ์—†๋Š”๊ฒƒ๋“ค์ธ๋ฐ ๊ฐœ์ธ์ ์œผ๋กœ ์ •ํ•œ๊ฒƒ๋“ค์€


1. float ๋’ค์— f ๊ผญ ๋ถ™์ด๊ธฐ


2. ์ด๋ฆ„์ง€์„๋•Œ ๋™์ผํ•œ ๋ฌธ๊ตฌ๊ฐ€ ๋ฐ˜๋ณต๋˜๋Š”๊ฑธ ํ”ผํ•˜๊ธฐ

์˜ˆ)

class Monster

ย  enum MonsterType

ย  ย  MonsterTypeUndead, MonsterTypeDemon

์ด๋Ÿฌ๋ฉด Monster.MonsterType.MonsterTypeUndead ์ด๋Ÿฐ์‹์œผ๋กœ ์ ‘๊ทผํ•ด์•ผํ•˜๋Š”๋ฐ ๋Œ€์‹  Monster.Type.Undead ์ด๋Ÿฐ์‹์œผ๋กœ ์ด๋ฆ„์ง“๊ธฐ

์œ„์˜ ์˜ˆ๋Š” ์ผ๋ถ€๋Ÿฌ ๋งŒ๋“  ๊ทน๋‹จ์ ์ธ๊ฑฐ์ง€๋งŒ ์ •๋„๋Š” ์•ฝํ•ด๋„ย ์ €๋Ÿฐ๋А๋‚Œ์œผ๋กœ ๋งŒ๋“œ๋Š”๊ฒฝ์šฐ ๋„๋ฆผ


3. interface ๊ตฌํ˜„์€ ๊ฐ€๊ธ‰์  ์•”์‹œ์ ๋Œ€์‹  ๋ช…์‹œ์ ์œผ๋กœย 

interface๋ฅผ public์œผ๋กœ ๊ตฌํ˜„ํ•ด์„œ ๋‹ค๋ฅธ๋ฐ์„œ ๋ง˜๋Œ€๋กœ ํ˜ธ์ถœํ•˜๋Š”๊ฒƒ ์ž์ฒด๊ฐ€ ์–ด๋”˜๊ฐ€ย ์„ค๊ณ„์— ๋ฌธ์ œ๊ฐ€ ์žˆ์„ํ™•๋ฅ ์ด ๋†’๋‹ค๊ณ  ๋ด„



4.

์ž์ฃผ ์‚ฌ์šฉ๋  ๊ฒƒ ๊ฐ™์€ ๋ฉ”์†Œ๋“œ์˜ ๊ฒฝ์šฐ XMLํƒœ๊ทธ ์ฃผ์„ ๊ผญ ๋ถ™์ด์žย 

https://docs.microsoft.com/ko-kr/dotnet/csharp/language-reference/xmldoc/recommended-tags ์ฐธ์กฐ

์ธํ…”๋ฆฌ์„ผ์Šค์— ์ฝ”๋ฉ˜ํŠธ ํ•œ์ค„ ๋œจ๋Š”๊ฒŒ ์—„์ฒญ ํŽธํ•จ




๋งํฌ์—์„œ ์ œ์‹œํ•œ๊ฒƒ๋“ค์ค‘์— ์ฑ„ํƒํ•˜์ง€ ์•Š์€๊ฒƒ


* extension method ์ ๊ทน ํ™œ์šฉํ•˜๊ธฐ

์ด๊ฑฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋งŒ๋“œ๋Š” ์ž…์žฅ์—์„  ์ข‹์„์ง€๋„ ๋ชจ๋ฅด๊ฒ ๋Š”๋ฐ ํด๋ผ ๋กœ์ง์— extension method ๋‚จ์šฉํ•˜๋ฉด ์ „ํ˜•์ ์ธ '๋‚˜๋งŒ์•„๋Š”์ฝ”๋“œ' ๋ ํ™•๋ฅ ์ด ๋†’๋‹ค๊ณ  ๋ด์„œ ๊ฑฐ๋ฆ„


* null propagation ์ ๊ทน ํ™œ์šฉ

์ด๊ฑฐ ์ง„์งœ ์ข‹์€๋ฐ.. ์ด๊ฑฐ๋Š” ์•„์ง ๊ณ ๋ฏผ์ค‘์ž„. ํŽธํ•˜๊ธด ํ•œ๋ฐ ๊ตณ์ด ์“ฐ์ง€ ๋ง๋ผ๋Š”๊ฑฐ ์“ฐ๊ธฐ๋„ ์ข€ ๊ทธ๋ ‡๊ณ 

UnityObject ๊ฐ€ ์•„๋‹Œ์• ๋“ค์— ํ•œํ•ด์„œ ํ—ˆ์šฉํ•œ๋‹ค๊ณ  ํ•˜๋ฉด ์‚ฌ๋žŒ๋“ค์ด 100% ํ—ท๊ฐˆ๋ คํ•˜๊ณ 


๊ฐ€๊ธ‰์  ์˜ค๋ธŒ์ ํŠธ๋“ค์ด ์ง์ ‘ ๋ ˆํผ๋Ÿฐ์Šค๋ฅผ ๋“ค๊ณ  ์žˆ์ง€ ์•Š๊ณ  ์ด๋ฒคํŠธ๋กœ ํ†ต์‹ ํ•˜๋Š” ์‹์œผ๋กœ ์‹œ์Šคํ…œ์„ ์„ค๊ณ„ํ•ด์„œ ๋„์ฒดํฌ์˜ ํ•„์š”์„ฑ ์ž์ฒด๋ฅผ ์ค„์ด๋ ค๊ณ  ๋…ธ๋ ฅ ์ค‘.

is null ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€ ๋ฌธ์ œ๊ฐ€ ์žˆ์Œ. ์‚ฌ๋žŒ๋งˆ๋‹ค null = A๋ž‘ A = null ํ˜ผ์šฉํ•˜๋Š”๊ฑฐ ํ†ต์ผํ•˜๊ณ  ์‹ถ์€๋ฐ ๋ถ€์ž‘์šฉ์ด ๊ฑฑ์ •๋จ



๋˜ ๋ญ๊ฐ€์žˆ๋”๋ผ.. ์ผ๋‹จ ์ƒ๊ฐ๋‚˜๋Š”๊ฑด ์ด์ •๋„์ธ๋“ฏ


ย